一个比其短(以字符为单位)的程序可以打印的最小正10基整数是多少?


179

我认为上述问题很明确,但以防万一:

  • 编写一个完整的程序(不仅仅是一个函数),该程序将打印一个以10为基数的正整数,并可以选择后跟一个换行符。

  • 合格程序将是输出比程序源代码长(以字节为单位)的程序,以字节为单位(假定程序源代码为ASCII或UTF-8编码)。

    即,代码必须短于所得数字中的位数。

  • 在任何情况下都不允许前导零。计算前导零使问题变得微不足道;忽略前导零将使这个问题变得不必要。

  • 获胜的程序将是合格程序,该程序将打印出幅度最小的整数。

排行榜摘要


64
热点网络问题排名第一。对于第一个问题来说还不错……
trichoplax

6
@Kslkgh严格小于,否则对于隐式打印其最后一个值的程序来说,这个问题是微不足道的。
阿兰德(Arandur)2015年

6
1.0整数吗?
histocrat

23
对UTF-8的限制是荒谬而有害的。字节是字节,与编码无关。我强烈建议您更改规则,因为它们目前禁止不基于字符的语言(例如Minecraft,Piet,Folders)或UTF-8字节数长于“真实”的语言(根据此问题有效))字节计数(例如APL,TI-BASIC,Severly,Jelly)。
lirtosiast

7
@ZachGates并不是HNQ列表的工作方式。;)
Martin Ender 2015年

Answers:


193

视网膜得分1


空程序会计算输入中空正则表达式的匹配数(即空字符串)。恰好是1个匹配项,因此显示1

在线尝试。


39
...我们有赢家。
阿兰德(Arandur)2015年

9
顺便说一句,我想说比赛的次数是无限的。空字符串可以重复无数次,并且可以无限匹配。
nicael

50
@nicael幸运的是,这不是正则表达式的工作原理。;)
Martin Ender 2015年

8
@MartinBüttner取决于您的正则表达式引擎。我肯定遇到过系统,如果您尝试匹配空字符串,这些系统将淘汰掉。
Sparr

19
@LorenPechtel规则仅适用于在大多数语言中空程序很少是解决方案的quine挑战。我认为这是一个公平的游戏,因为这个空程序实际上具有非平凡的语义,并且Retina不会因为这种挑战而具有这种行为,而是因为它是所有单行程序唯一一致的行为概括。
马丁·恩德

73

珀斯 10

T

首次尝试使用Pyth。在澄清了问题之后,似乎10将会是最小的数字。在Pyth中,字母T以数字10开头,因此仅打印10大于源代码长度的字母。您可以在这里尝试


97
我喜欢你在使用Pyth第一次尝试如何只是字母T
djechlin

8
嗯,我认为将是最可读Pyth节目我看到了一段时间,但是是令人印象深刻容易理解。
Deusovi 2015年

2
这是一个polygot,也适用于05AB1E。05ab1e.tryitonline.net/#code=VA
魔术八爪鱼

60

公元前10

A

幸运的是,bc默认情况下输出最后一个表达式的结果。 A被解释为十六进制数字,因此结果为10


1
但是,是已经(至少)5个类似的答案,包括与解决方案A,因为许多高尔夫球语言要定义为10
nicael

45
@nicael是的,是的。我声称此答案有所不同,因为bc它不是高尔夫语言。实际上,默认情况下,它是Posix定义的语言,几乎可以在您可以找到的任何标准* nix系统上使用。
Digital Trauma 2015年

47

钓鱼,得分7,958,661,109,946,400,884,391,936 1,208,925,819,614,629,174,706,176

在最小化挑战中,这是有史以来最高的非平凡得分吗?(即使它被打了84.8%)

v+CCCCCCCCCC
  `32`nSSSSP

说明

v              Sets the casting direction to down
 +             Increments the casting distance by 1
  CCCCCCCCCC   Casts the rod

`32`         Pushes a string "32" to the stack
    n        Converts the stack from a string to an integer
     SSSS    Repeated squaring of the stack
         P   Prints the stack

该数字是32^16并且有25位数字。该代码长24个字节。先前的答案是6^32


2
给我的眼泪。感谢您的贡献。
阿兰德(Arandur)2015年

30
希望它仍能击败Java。
Arcturus

3
好吧,它胜过了C#...
LegionMammal978

为什么是6而不是9?
immibis

@immibis挑战的目标是使分数最小化,所以这不仅仅是使字节数最小。放在9之前会不必要地增加我的分数。
Arcturus

36

MATLAB,1,000,000,000(10 9

也适用于八度

disp(1e9)

永远不会击败esolang,但是只是为了好玩,这是MATLAB / Octave能够完成的最小任务,所以我想无论如何都会发布它。


18
esolang的答案虽然有效,但很无聊。很高兴看到不是的!
阿兰德(Arandur)2015年

1
say 1e9如果您想提高高尔夫成绩,perl 会稍微短一些。(尽管距离这种方法所适用的较小整数并不
遥远

@derobert是。1e1将满足问题陈述,并给出10分(越低越好)(假设char为1个字节)
dberm22 '16

@ dberm22 10(2个字符)不超过1e1(3个字符)
SuperJedi224 '16

@ SuperJedi224啊,我读了一下,因为打印数字的大小必须大于字节数,而不是打印数字的位数。感谢您的澄清。
dberm22

29

TI-84 BASIC,120

5!

ᴇ2如果不是愚蠢的UTF-8要求,则得分会更高。(在计算器的本机标记化编码中只有两个字节,而在UTF-8中为4个字节...)


也许我丢失了一些东西,但是字符串“ E2”在UTF-8中只有两个字节…
jbg 2015年

11
@ JasperBryant-Greene E不是同一字符。在TI-BASIC中, 是科学符号,并且E是变量。
SuperJedi224

4
谢谢:)我应该注意到角色的高度比整体高度小……
jbg

会不会3!得分更高?
dberm22

1
@NobodyNada这次,出于某种原因,这个问题专门说是在UTF8中得分。
SuperJedi224 '16

26

C#,得分10 ^ 72 10 ^ 70 10 ^ 64 10 ^ 63

class A{static void Main(){System.Console.Write($"1{0:D63}");}}

那是1,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000 我想我尝试过...


1
真的很棒。
阿兰德(Arandur)2015年

4
Write(new string('1',70))更好吗?
林恩

1
您可以将它写成双class A{static void Main(){System.Console.Write(1e56);}}
精度字

@goric只是输出1E+56
LegionMammal978 2015年


17

JavaScript,得分为100,000,000,000(或1 * 10 11

alert(1e11)

这是如果使用警报。如果使用控制台,您的得分会降低1亿倍:

1e3

如您所见,得分为1000,但我不确定它是否可以使用控制台计算在内。


我不知道为什么它不算数!
Arandur

6
@Arandur我猜“我不确定它是否有意义”指的是较低的1000分,因为这要求使用控制台作为REPL,而不是完整的程序。
trichoplax

确切地,@ tri进行了澄清。
nicael

11
+1警报,我不允许自动控制台输出
edc65

17

59岁的PlatyPar

#

#开始一个以60为底的数字文字,并且由于未找到数字,因此最终显示为59。最初这是一个快乐的事故,但是由于我已经在另一个答案中使用了这个错误,所以我保留了它。

在线尝试

这是另一种方法,我以每个人和他们的祖母用来应对这一挑战的无聊方式对待。

PlatyPar,100000000(9 digits)

'18Md0+;

说明

'1        ## push "1" (a string) to the stack
  8Md  ;  ## repeat 8 times
     0+    ## add a 0
          ## [implicitly] print the result

在线尝试


16

Brainf ** k,11111111111111111111111111111111111(〜1e34)

另一个减少:

+++++++[>+++++++>+<<-]>>[<.....>-]

给出35个连续的1,或大约1e34。


还小一点

++++++++[>++++++>+<<-]>+>+[<....>-]

给出36 1,其数字比1e35大11%。


感谢@MartinBüttner用这个代码剔除了几个字符,使总输出减少了100倍(产量1e36):

++++++[>++++++++>++<<-]>+.->[<...>-]

我的旧代码(收益1 + e38):

++++++++[>++++++>++<<-]>+.->+++[<..>-]

我一直出于无聊而尝试使用esolangs。这是我在BF中能做的最好的事情。我想知道是否可以缩小它?

您可以在这里在线尝试。


我从头开始写了一个简短的答案:链接
Lynn 2015年

@毛里斯令人印象深刻!
汤姆·卡彭特

16

C,1000000000000000000000000000(28位数字)

main(){printf("1%027d",0);}

与我的C ++答案相似,但没有#include <stdio.h> (忽略有关缺少声明的警告printf。谢谢@Dennis)

换行符需要使用格式增加2个字节 1%029d\n


14

杰普特(Japt),得分10

A

如图所示,分数为10。


这不是代码高尔夫球;目标是打印最小的数字,您的分数是
10。– pppery

@ppp“数字的字节数必须比程序长-数字要多于代码的字符数”-OP刚刚被编辑。
nicael

2
您没有误解;如果Japt程序A打印出10,则这是一个有效的程序,得分为
10。– Arandur

3
oo,我的语言并列第二名。视网膜
怒视

4
有什么不赞成的理由吗?
nicael



9

迷宫,得分10,000,000

1!!!!>@

可以将其降低一个数量级,但是我现在找不到任何东西。

第一1!!!!版画1000。然后>将源代码移至

@1!!!!>

避免提前终止。然后,IP陷入僵局并转身。现在再!!!!打印四个零并@终止程序。

在线尝试。


9

萨摩(42)

A

A将“生命,宇宙和一切终极问题的答案”推入堆栈。然后将自动打印纸叠的顶部。


我认为您的提交消息有问题:P
Doorknob

3
@Doorknob冰我不知道如何编写提交消息,所以我只使用随机表情符号。
alephalpha

5
好的,这是一个真正的问题:Q推什么?
Cyoce

9

Brainfuck,3333333333333333333333333(25三分)

这是“从头开始”写的,所以我认为可以发布一个单独的答案:

-[>+>+<<-----]>-[-->.<]

23个字节长。


我正在考虑一个bf解决方案,当前有没有仅以数字形式输出的解释器?
Rohan Jhunjhunwala

@RohanJhunjhunwala这将输出51(ASCII码为"3")25次。
水平河圣

@LevelRiverSt什么即时消息说的是,有可能存在一个BF解释是没有输入为ASCII和只做整数输出,因此( - )将输出255
罗汉Jhunjhunwala



8

C,11111111111111111111111111111111111(35个)

main(c){while(c++<36)putchar(49);}

也许有更短的方法。缺少在C中打印大数字的简单方法,使其变得棘手。



7

Java,111111111111111111111111111111111111111111111111111111111111111111111111111111111(81个)

interface A{static void main(String[]a){for(A i:new A[81])System.out.print(1);}}
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我在这里强调了实际上是“可变的”部分。对于正常工作的Java程序,其他所有内容都是绝对必要的。

大概这比混入Java的时间短BigInteger


大概...-也许System.out.print(BigInteger.TEN.pow(10));-少一个字符吗?抱歉-还远远不够-而且.pow(10).pow(10)时间更长。
OldCurmudgeon 2015年

您可以替换interfaceclass
LegionMammal978 2015年

2
但是那main将是必须的public
林恩(Lynn)2015年

7
您可以在for循环中删除2个字符:for(A a:new A [81])
Jack Ammo

@OldCurmudgeon .pow(100)由于某些原因无法正常工作?
ETHproductions

7

库比克斯,100100

@'dOu

Cubix是二维的基于堆栈的esolang。Cubix与其他2D lang的不同之处在于,源代码环绕在多维数据集的外部。

在线测试!

说明

解释器要做的第一件事是找出代码将适合的最小立方体。在这种情况下,边长为1。然后用无操作填充代码,.直到所有六个边都填满。在处理之前删除空格,因此此代码与上面的代码相同:

  @
' d O u
  .

现在运行代码。IP(指令指针)从最左边开始指向东方。

IP遇到的第一个字符是',它将下一个字节压入堆栈。这个字节是d100。接下来是O,它以整数形式输出首项(100)。

然后IP命中u,将其向右旋转,将其向前移动,然后再次将其旋转。它切换到指向北的底面,然后向东旋转。这将其O再次包装,输出100,直到@终止该程序。




6

蟒蛇2,107918163081

print 69**6

您可以删除之间的空间print2
2015年

1
@Bakuriu不,你不能
蓝色

69**6只是107918163081
尼尔

2
有趣的是,这在Perl中也适用。
Grimy

6

C ++,1e46

#include <stdio.h>
main(){printf("1%046d",0);}

换行符将需要额外的2个字节,格式为“ 1%048d \ n”


我认为C ++不允许您省略的返回类型main()。太太,这将是一个很好的C答案...
Toby Speight,


5

05AB1E,得分10

T

说明:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
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.