打印一堆无趣的数字!


40

这样创建一个无趣的数字(我完全没有为这个挑​​战所弥补):

  1. 取正整数N
  2. 通过在N的末尾添加N的数字来创建新的数字O
  3. 最终无趣的数字是O * N

例如对于N = 12:

  1. O = 1212
  2. O * N = 1212 * 12
  3. 最终号码是14544

输入项

正整数N(N> 0)或与您的语言等效的整数。您不必捕获不正确的输入。

输出量

相应的无趣数字。

测试用例

  1 -> 11
  2 -> 44
  3 -> 99
 10 -> 10100
174 -> 30306276

计分

以字节为单位的最短代码为准。


9
必须有一个相关的OEIS条目...
MKII

1
@Seims这是一个笑话,基于“不误解”的名称
MKII,

7
@MKII我不好,我不会开玩笑
Seims '16

1
将数字作为字符串参数是否会使规则有些过分?
Dom Hastings

1
继续吧,遵守规则!:P
塞姆斯'16

Answers:


38

05AB1E,3个字节

Ы*

讲解

Ð    # triplicate input
 «   # conactenate
  *  # multiply

在线尝试


2
啊,太好了!忍者秒杀了我:p。
阿德南

2
@Adnan Hehe。那个时候的复仇你对我做了:P
Emigna '16

1
3个操作,3个字节,我认为您不能使它更短。
Lasse Meyer

2
@busukxuan是的。串联会自动将数字转换为数字,str并将*字符串解释为数字。非常有用:)
Emigna '16

2
@busukxuan是的,Pyth和05AB1E的组合可以用2个字节完成:)
Emigna '16

29

JavaScript(ES6),10个字节

_=>(_+_)*_

需要使用参数a String而不是a 来调用Number

用法:

(_=>(_+_)*_)('3')
99

-3个字节,感谢@Quill的建议。


1
如果你可以传递参数作为一个字符串,你可以切两个字节关闭此解决方案:_=>(_+_)*+_
奎尔

3
这是如何工作的?如果我理解正确,您_是否将变量用作任意字符?(PS- (_+_)看上去完全像个屁股)
charredgrass16年

@charredgrass $也可以使用

11
类型转换滥用11
Downgoat

3
出于兴趣,我可以纯粹从数学上做到的最好是ES7中的30个字节n=>(1+10**-~Math.log10(n))*n*n-~优先级比更高**)或ES6中的31 个字节n=>-~`1e${-~Math.log10(n)}`*n*n。甚至递归也占用了我32个字节:f=(n,m=1)=>n<m?-~m*n*n:f(n,m*10)
Neil

24

Java 8,29 26 25 21字节

上帝保佑lambda

c->new Long(c+""+c)*c

c-> Long.decode(c +“” + c)* c;


28
您一定喜欢Java。即使使用Java 8的lambda,并且是codegolf上有史以来最短的Java答案之一,它仍然被当前所有其他答案所超越。xD
Kevin Cruijssen '16

3
java是bae,lambda是bae
Seims '16

3
@KevinCruijssen我仍然有希望,有一天Java将赢得代码高尔夫竞赛
user902383 '16

1
编辑后,您将@MartinEnder的Retina答案超出了1个字节!o.Ô
凯文Cruijssen

1
@KevinCruijssen,但仍然不足以赢得或至少击败python :(
user902383 '16

20

vim,11岁

C<C-r>=<C-r>"<C-r>"*<C-r>"<cr>

crcrcrcr ...

C       change (delete and enter insert mode) until the end of the line
<C-r>=  insert an expression via the special "expression register"
<C-r>"  insert the contents of the default register (what we just C'd)
<C-r>"  ... again
*       multiplied by
<C-r>"  the input (again)
<cr>    insert the result of this expression

11什么?字节?
疯狂的2016年

3
如果从命令行调用@Insane Bytes,则直接从vim进行击键。我通常在我的vim答案中省略该单位,因为它可以是一个。
门把手


<C-r>回车吗?
曼队长

@CaptainMan不,<C-r>是控制加r。回程为<cr>
门把手

15

Pyth,5个 4字节

*s+`

说明:

    Q    input
   `     representation, basically str(Q)
  +  Q   add Q to its own string form
 s       parse int
*     Q  multiply by input
         print

在这里测试


15

Emacs,17个字节

(*SPACEC-SPACEC-EM-YSPACEC-YC-Y)C-J

说明

  • (*SPACE(*在点添加(在数字之前);
  • C-SPACEC-EM-Y 选择并复制号码;
  • SPACE 在点(在数字之后)添加一个空格字符;
  • C-YC-Y 将数字粘贴到点的两倍处;
  • ))在末尾添加;
  • C-J 将行解释为LISP表达式并打印其结果。

例子

以竖线(|)表示的游标

  • |174
  • (*SPACE (* |174
  • C-SPACEC-EM-Y (* 174|
  • SPACE (* 174 |
  • C-YC-Y (* 174 174174|
  • ) (* 174 174174)|
  • C-J

结果

(* 174 174174)
30306276|

3
嗨,欢迎来到PPCG!不错的第一篇文章!
Rɪᴋᴇʀ


12

Python 2.7,21个字节:

lambda f:int(`f`*2)*f

好吧,这必须是我用最短的时间编写的最短的Python答案。这是一个匿名的lambda函数,可以通过将其命名为所需的任意名称,然后像包裹在中的普通函数一样调用它来执行print()。例如,如果您的输入为12,并且函数被命名为H,则这将称为print(H(12))

在线尝试!(爱迪生)

请注意,这仅适用于等于或大于等于的值,9223372036854775807因为任何更高的值都repr()将a L放在整数的末尾。因此,对于大于的值9223372036854775807,将使用以下24字节版本:

lambda f:int(str(f)*2)*f

在线尝试!(爱迪生)


我仍然发现Phytons String操作非常神奇……
Seims '16

@Seims以什么方式?
busukxuan

字符串乘法和加法。很少见过。
塞姆斯'16

@Seims我猜您主要处理静态语言吗?
busukxuan '16

@busukxuan如果需要的话,请叫我一个菜鸟:^)
塞姆斯'16

11

果冻,4字节

;DḌ×

在线尝试

说明

;DḌ×    Main link. argument : N

 D      Decimal; Yield the digits of N
;       Concatenate N and its digits
  Ḍ     Convert to integer; We get O
   ×    Multiply O and N

1
带着山羊胡子,真是一个快乐的眨眼脸!;DDx

在哪种编码中仅占用1个字节?通常我们使用UTF-8,其中它占3(而×占2,但在ISO8859-1中为1字节)。
o11c'7

@ o11c Jelly使用其自己的自定义代码页,其中这些字符均为一个字节。
意大利面条

10

C,70 68 54 53 52 44

f(n){return(pow(10,(int)log10(n)+1)*n+n)*n;}

以前的版本(48字节,没有数学函数),@ LeakyNun节省了16个字节,@ FryAmTheEggman节省了1个字节,@ TobySpeight节省了4个字节:

f(n,d,i){for(i=d=n;d;d/=10)i*=10;return(i+n)*n;}

f()用一个参数数字调用,然后返回相应的无趣数字。

测试程序

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    while (*++argv) {
        int n = atoi(*argv);
        printf("%d -> %d\n", n, f(n));
    }
    return 0;
}

检测结果:

$ ./84712 1 2 3 4 10 174
1 -> 11
2 -> 44
3 -> 99
4 -> 176
10 -> 10100
174 -> 30306276

在线尝试!


f(n){int b=1;while(a)b*=10,a/=10;return(n+n*b)*n;}
Leaky Nun

如果不包含math.h,这将无法正常工作,但是您可以在GCC(内置log10()和)pow()中使用它,并且编译器仅警告“内置函数的不兼容隐式声明”,而不是假设(应该如此)他们俩都回来了int
Toby Speight

@Leaky-您什么都没放进去a……
Toby Speight

1
很高兴看到另一个答案完全落在算术领域(不进行字符串连接)。:-)
Toby Speight

1
@Toby-C中的字符串串联与打高尔夫球不兼容。;-)
owacoder

9

Dyalog APL,7 个字节

⊢×#⍎⍕,⍕

字符串表示

⍕, 前置字符串表示

#⍎ 编号(在根名称空间中)

⊢× 乘以原始数


1
那些失事的TIE战士真有趣!
Luis Mendo


1
叉子醒来:-D
路易斯·门多

我很确定这些不是任何编码的字节,因为它们不像字母或很常见。
o11c'7

@ o11c您是否检查了单词“ bytes”的抢占链接,即。meta.codegolf.stackexchange.com/a/9429/43319
阿达姆(Adám)'16

9

J,7个字节

*,~&.":

说明

*,~&.":  Input: n
     ":  Format n as a string
 ,~&.    Reflect and join the string to make "nn"
         and parse the string to get a number
*        Multiply that number by n

+1。我什至不能认为这Under在字符串连接中正常工作。对我来说真是个了不起的发现!谢谢。
丹·奥克

可悲的是,我认为这应该放在括号中,因为如果直接键入该钩子是行不通的* ,~ &.": n,并且也不能用于形成其他动词。
Dan Oak

1
@dahnoak在PPCG,我们只需要指定一个函数所需的内容,因此以上内容是在J中创建一个函数所必需的。然后使用一些输入作为参数来调用它,或者在括号或存储在变量中。
2016年

啊,我知道了,ty。
丹·奥克

9

视网膜27 20字节

^
$_$*: $_
:
$_$*:
:

对于大型输入,会有点慢,因为在最后一个阶段之前,结果以一元表示。

在线尝试!(第一行启用换行分隔的测试套件。)

说明

我将使用2输入作为示例(因为一元表示形式对于较大的输入会有点笨拙)。

阶段1:替代

^
$_$*: $_

通过匹配字符串的开头,^我们可以简单地添加一些内容。$_指输入字符串本身,$*:表示我们插入了许多冒号。这样我们得到:

:: 22

第二阶段:替代

:
$_$*:

现在,我们将每次匹配都:替换为$_$*:。当然,这次$_不会求整数(:: 22在我们的示例中为整数),而是$*查找字符串中的第一个小数,因此,它求和连接到自身的输入(O在Challenge规范中)。我们将以N*O冒号结尾,然后是O

:::::::::::::::::::::::::::::::::::::::::::: 22

第三阶段:比赛

:

剩下的全部工作就是将:s从一元转换为十进制,这正是此阶段的工作。


哦,与Java一样长。仅超出了2个字节。+1
R. Kap

@ R.Kap实际上,Java 8在删除3个字节后就超出了它!o.Ô
凯文Cruijssen

4
抱歉,Java ....
Martin Ender

9

CJam,8个字节

ri_`_+i*

在线尝试!

r     e# Read input
i     e# Convert to integer
_     e# Duplicate
`     e# Convert to string
_     e# Duplicate
+     e# Concatenate
i     e# Convert to integer
*     e# Multiply. Implicitly display

2
我将建议不要立即转换为in,然后立即返回字符串,但是幼稚的方法(即以前从未使用过CJam)是r__+i\i*,它的长度是相同的。
Nic Hartley

@QPaysTaxes很好。我注意到了与您相同的事情:为什么先将其转换为int,然后再次转换为string。我也从未使用过CJam,并且在所有可能的运算符上看起来都不太接近,因此乍一看我找不到解决方案。感谢您分享您的方法,即使它具有相同的字节长,也没有将其转换回字符串。
凯文·克鲁伊森

如果有一种方法可以在两个字节中对整个堆栈进行操作,则它会短一个字节(类似r__+si*,其中s“在堆栈上应用此操作”),但我看不到任何类似的内容
Nic哈特利2016年

8

果冻,8 6 个字节

ŒṘẋ2v×

在线尝试!

说明

ŒṘẋ2v× - Main link. Left argument: the number to convert

     × - Multiply
    v  - an evaluation of the left argument
ŒṘ     - converted to string
  ẋ    - multiplied by
   2   - two and the left argument

1
我认为您不需要其中任何一个³
Martin Ender


7

Brachylog,7个字节

:?c:?*.

说明

:?c      Concatenate Input to itself
   :?*.  Output is that concatenation times Input


7

Matlab /八度,20字节

@(x)eval([x x 42 x])

这是一个匿名函数,将输入作为字符串。

使用示例:

>> f = @(x)eval([x x 42 x])
f = 
    @(x)eval([x,x,42,x])
>> f('12')
ans =
       14544

与ideone在线尝试

说明

该代码通过将输入字符串连接两次,然后是字符*(具有ASCII代码42),然后再是字符串来建立字符串。然后评估连接的字符串。


什么42意思
Leaky Nun

4
@LeakyNun这是生命,宇宙和一切终极问题答案。”此外,它恰好是*
Luis Mendo

啊。我正在寻找类似第42个函数的东西。
Leaky Nun

该代码只需将输入字符串连接两次,然后连接*,然后再次连接字符串,即可构建一个字符串。然后评估连接的字符串。我将其编辑为答案
Luis Mendo

6

MATL,6个字节

tVthU*

在线尝试!

tV     % Input number implicitly. Duplicate and convert to string
th     % Duplicate and concatenate the two equal strings
U      % Convert to number
*      % Multiply

6

zsh,13个字节

<<<$[$1$1*$1]

将输入作为命令行参数,输出到STDOUT。

这仅在zsh中有效,但是在Bash中使用15个字节echo代替<<<

echo $[$1$1*$1]

6

Perl,11个字节

$_*=$_ x2

+ pl标志。

(运行perl -ple '$_*=$_ x2'

-2字节多亏了管道。


保存两个字节:$_*=$_ x2
管道

我认为您不需要-l
Brad Gilbert b2gills '16

@ BradGilbertb2gills是的,我需要它,因为如果没有它,$_ x2它将产生...\n...\n由perl转换为数字的结果,该结果将在第一时间结束\n
Dada 2016年

我在Perl 5和Perl 6上都进行了测试,但没有注意到我忘记删除了6
布拉德·吉尔伯特b2gills '16

6

Excel VBA,35字节

子用数字调用,msgbox返回答案

Sub B(a)
MsgBox (a & a) * a
End Sub

备用Excel VBA,42字节

公式中给出的数字,返回答案。

Function B(a)
B = (a & a) * a
End Function

考虑一个MsgBox和一个Sub。如果我计算正确,它将为您节省13字节
GER_Moki '16

我需要某种形式的输入框来获取值,不是吗?
tjb1

试试Sub B(a)MsgBox(a&a)* a End Sub
GER_Moki '16

这需要另一个子传递值,我不确定高尔夫中是否允许。
tjb1

该函数也必须被调用;)
GER_Moki '16

6

Lua,20个字节

接受命令行参数,并通过STDOUT输出

a=...print((a..a)*a)

和@LeakyNun在评论中问:

a=...       -- alias for the first argument
print(
     (a..a) -- concatenate a with itself, equivalent to a:rep(2)
     *a)    -- multiply the resulting number by a

这可能是类型强制的一个很好的示范...如果你在添加了解释。
漏尼姑

5

Pyke,5个 4字节

`+b*

在这里尝试!

`    -    str(input)
 +   -   ^+input  (convert to string implicitly)
  b  -  int(^)
   * - ^*input

字符串输入也为5个字节

+bRb*
+]mbB

5

PHP,25 24字节

短开标签对于很少有打高尔夫球的挑战很有用,幸运的是,这是其中之一。不幸的是,运算符优先级与您需要用大括号括起来的顺序相反。

<?=($a=$argv[1])*"$a$a";

编辑:我意识到,无论如何我都在使用方括号,通过更改操作的书面顺序,我可以有效地跳过级联运算符。


5

dc,11 10字节

ddZAr^1+**

知道最终我会在Z命令中找到用处!

操作非常简单-计算数字,将10提升至该幂并加一。这提供了一个将数字与其自身连接在一起的乘数。然后乘以。

I / O像往常一样使用堆栈。

完整程序

这是我用于测试的内容:

#!/usr/bin/dc
?
ddZAr^1+**
p

这两个额外的命令为我们提供了管道I / O。

测验

$ for i in 1 2 3 10 174; do printf '%d -> ' $i; ./84712.dc <<<$i; done
1 -> 11
2 -> 44
3 -> 99
10 -> 10100
174 -> 30306276

感谢拜登十七世(1字节)。


您也可以替换A10救一个字节。做得好!

4

腮腺炎,11字节

R I W I_I*I

这是罕见的高尔夫挑战之一,腮腺炎的特质可以派上用场。首先,所有变量都是字符串,并且所有数学方程式都是从左到右严格求值的(例如:不是PEMDAS),因此,在Mumps中1 + 2 * 4 = 12而不是PEMDAS的方式是= 9。因此,(勉强)取消高尔夫球:

R I ;     Read from stdin to variable I
W I_I*I ; Write out I concatenated with I, then multiplied by I.

请注意-因为我正在使用的流行性腮腺炎(InterSystems Ensemble)的风格不会呼应stdin的回车符,因此输入和输出编号将显示为串联。要纠正该错误/提高可读性,您需要添加两个字节并添加一个手动CR / LF,因此:

R I W !,I_I*I

但是,由于我没有在挑战规则中看到该要求,所以我很确定自己对较短的代码很满意。如果我弄错了,请随时告诉我,我将修改答案。:-)


4

PowerShell中,25,18个字节

谢谢TessellatingHeckler提醒我PS非常喜欢管道。

新的18个字节:

process{$_*"$_$_"}

旧的25个字节:

param($a);[int]"$a$a"*$a

说明:

# new
process{$_*"$_$_"}
process{         } # runs code block once for each passed item
        $_*        # multiple the first parameter
           "$_$_"  # concatenate as a string for ease
                   # in this case, the order does the typecasting for us
# old
param($a);[int]"$a$a"*$a
param($a)                 # assigns the first passed parameter to variable $a
         ;                # line terminator
          [int]           # type cast string "$a$a" to int32
               "$a$a"     # convert $a$a to string for easy concatenation
                     *$a  # multiply by $a

测试(另存为boring.ps1):

# new
12 | .\boring.ps1
14544
174 | .\boring.ps1
30306276

# old
.\boring.ps1 12
14544
.\boring.ps1 174
30306276

绝对不是成功的答案,但无论多么有趣!


如果以其他方式放置变量,则int * string将隐式将字符串转换为int,并且可以节省5个字节的转换。process{$_*"$_$_"}是18个字节,并接受来自“ stdin”(即管道)的输入,例如174|script.ps1
TessellatingHeckler

嗯...有趣的一点。我也可以使用相同的结构切换它们并获得相同的结果:param($a);$a*"$a$a"
ThePoShWolf

错误,我收回了,我的长度再增加一个字节!
ThePoShWolf '16

@TessellatingHeckler请谨慎处理该答案,因为PowerShell的REPL环境不符合程序函数 default的条件。像param($n)$n*"$n$n"(达斯所拥有的,不带;)的长度是相同的,并且不是REPL。
AdmBorkBork

@TimmyD为什么不test.ps1从管道读取的文件计数?从stdin读取的bash shell脚本也不算吗?
TessellatingHeckler

4

批处理,27 20 18字节

@cmd/cset/a%1%1*%1

编辑:感谢@TessellatingHeckler,节省了7个字节。感谢@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ,又节省了2个字节。


set /a在提示符下输出分配结果。-> @cmd/c set/a n=%1%1*%122字节。
TessellatingHeckler

@TessellatingHeckler如果要输出,为什么还要麻烦分配?
尼尔

@TessellatingHeckler咦,我已经做了这招我六个星期前,我已经忘了..
尼尔

@cmd/cset/a%1%1*%118
越野选手埃里克

1
@Neil Nope,但我测试了它(在Windows 10上!)该cmd/c部分是必需的,因为批处理文件执行工具本身不是 cmd
暴民埃里克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.