这很简单。
编写尽可能短的程序,同时产生最多的输出。
为了使它有趣,产生无限输出的程序将被取消资格。
获胜者是具有最大输出大小/代码大小比率的程序。
结果基于我的计算机上的运行情况,该计算机是运行Mac OS X 10.7.5的Mac,带有Intel Core i5和8GB内存。
\n
这很简单。
编写尽可能短的程序,同时产生最多的输出。
为了使它有趣,产生无限输出的程序将被取消资格。
获胜者是具有最大输出大小/代码大小比率的程序。
结果基于我的计算机上的运行情况,该计算机是运行Mac OS X 10.7.5的Mac,带有Intel Core i5和8GB内存。
\n
Answers:
'a'*9**9
通过添加更多**9
s 可以使比率趋于无穷大:
'a'*9**9**9
'a'*9**9**9**9
etc.
例如:
'a'*9**9**9**9**9**9
其具有一个比〜10 10 10 10 10 8.568(难以想象的大的数字)。
**9
s,它最终不会变成Infinity
吗?
**9
在输出变为之前,找出可以放入的最大s 数Infinity
。
因此,这些都是很好的程序,只需要很少的代码就可以产生大量输出,但是它们都不是真正短的...
Brainfuck,5个字符,255个字节的输出
-[.-]
我认为这是Brainfuck真正出色的唯一用例。我知道这不会赢,但是我认为我们不可能比Python示例做得更好。不仅如此,而且...
Brainfuck,4个字符,无限输出
-[.]
我猜想这是那里最短的无限输出程序。
其实,等一下,我的伴侣提出了一个非常好的人。
Python,80个字节,输出量未知
from datetime import datetime
while datetime.now()!=datetime.max()
print "This will probably get disqualified"
该程序最终肯定会终止,但是只有在大约8,000年后才会终止。输出的确切字符数取决于计算机产生字符的速率。
.
输出0个字符的无限流。
print+($]x9e7)x26e7
带有单个打印语句的166个petabyes,使用的内存不超过1.7GB。
有一些事情使这个挑战比我想的要有趣。Perl似乎拒绝为任何单个列表分配超过1GB的内存。因此,对内部字符串的4字节标量引用只能重复26e7≈2 28次。$]
是“旧的perl版本”数字,作为字符串,长度为8个字节,类似于5.016002
。
随着更多的系统内存,它应该可以更高。假设完整的8GB实际可用,那么您应该可以使用$]x9e8
内部字符串代替,内部字符串将输出1.62艾字节。
999999**99999
只需将一个很大的数提高到另一个很大的数的幂即可。大约需要20秒钟才能运行。我不能增加数字,因为那会使数字变成无穷大。
(我之前做了这个,我目前正在做一个循环以获取更长的输出)
编辑:我做到了!
a=999999**99999;a.times{p a}
未经测试(出于明显的原因),但我很确定第一个数字约为1e599994,乘以599994约为6e599999。从理论上讲,它可以工作,但是我不确定它是否会使您的计算机崩溃,因此免责声明:如果它以任何方式损害您的计算机,我概不负责:P
当然,您可以继续:
a=999999**99999;a.times{a.times{p a}}
依此类推,但我怀疑任何计算机都可以处理:P
如果允许无限输入,
cat /dev/random
既然不是
head -99 /dev/random
(25128输出:20输入= 1256.4:1)
我不在Linux机器上,但我想您可以做类似的事情
timeout 99d cat /dev/random
并获得巨大的产出。(通过GigaWatt的回复)
timeout 99d
。是的,运行时间为99天。另外,我不确定这一点,但是最终您将使用清空熵池/dev/random
并将其阻塞,因此/dev/urandom
可能更合适。(使用,我设法获得40 MB / s的速度,urandom
而使用则只有128 KB / s random
)
9
实际字符数因翻译而异,但是大概10000左右是正确的吗?
for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new WebClient().DownloadString(@"http://bit.ly/dDuoI4"));}
它只是下载并打印Wikipedia的美国最高法院书记员清单(4344904个字符)18446744073709551615次。
for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new string('a',int.MaxValue));}
2147483647字符* 18446744073709551615次= 39614081238685424720914939905/81 =>比率:489062731341795366924875801
'=~~~~,~~~~,~~~~:''=|*<%[%]'=',',',':''&*-~|:'''=|*<%[%]''&',',',':'''&*-~|:''''=|*<%[%]'''&',',',':''''&*-~|:''''&':''=|*<%[%]@~~~~,~~~~,~~:''&*-~|:''&':
工作原理:首先,将其设置'
为4 ^ 3或64。然后,使它''
的功能设置'
为'
^ 4 *倍(其中*为输入)。'''
然后使函数成为调用''
输入为'
^ 4 的函数。然后,''''
创建一个函数,'''
以'
^ 4作为输入进行调用。''''
然后使用输入64进行调用。最后,''
将其更改为打印空格*次的函数;然后使用输入调用此函数'
。
最后,结果'
是 64 4 4 4 64,我程序的长度是154;将其冲入Wolfram | Alpha,然后吐出10 10 10 10 10 1.583328920493678,甚至不必费心计算。我什至不知道它包含多少个数字,但是64 4 4包含463。对于只支持一元显式数字并且没有指数函数的语言而言,这是相当不错的; 3
我本可以把它做大很多,但是过大了。
for(s=i=61;s=btoa(s),i--;)s
此代码将输入递归编码61
为Base64 61次。将length的任何输入编码n
为Base64会产生length 的输出n * 8/6
,四舍五入为4的倍数。
这必须从本地支持Base64编码功能的JavaScript控制台环境中运行btoa
。(任何现代浏览器,但不是Node.js。)请注意,Chrome不能运行高于i=61
,而Firefox只能达到i=60
。还要注意,Chrome的控制台实际上无法显示输出,因为它太大了,但是您可以通过运行来验证结果的大小
for(s=i=61;s=btoa(s),i--;)s.length
如果允许该程序最大化运行i=99
,它将产生大小为14,566,872,071,840(14.5万亿,14.5e12)个字符的假设输出,假设比率约为5400亿(5.39e11)。
a=1e99.times;a{a{a{a{a{puts'a'*99}}}}}}}}}}
不是很短,但是它补偿了输出,这是我尚无法测量的。
1e127
chars输出有关。无论如何,分配给变量将使代码大小减少一半左右。同样,1e99
更大的数字占用更少的空间。此外,使用map
替代each
,使用puts
替代print
,删除之间的额外的空格print
和"ier...
。您也可以将大字符串替换为'a'*999
(或什至?a*999
),后者是更长的字符串,占用的空间更少。摘要:这根本不是打高尔夫
(0..1e99).map
一个变量?喜欢a=(0...1e99).map;a{a{a{a{a{puts'a'*99}}}}}
a=(0...1e99).map
。您可能需要将其调回一点。0..1e9
将使用约4GB。
以下是Mathematica输入的图片。我还没有想出如何在SE中渲染它。
这是显示输出中位数的屏幕截图。IntegerDigits
将输出转换为数字列表。Length
计算数字位数。
击键进入:9,ctrl6,9,ctrl6,9,ctrl6,9,ctrl6,9...
main(){for(int i=1<<31;i<~0;)puts("!");main();}
请注意,65090并不精确,取决于堆栈大小。该程序最终将在崩溃时停止。另外,我可以在puts()中放置一个越来越长的字符串,以使定量方法趋于无穷大,但这似乎很不明智。
编辑:ymbirtt击败了我。
我知道,这并不是很短,而且我知道其他Python答案要长得多,但是我决定尝试一下。
该程序运行约8000年,如您所知,这是一个相当长的时间。
它所做的是使用datetime.datetime.now()
函数连续获取当前时间,并将其与进行比较9999-12-31 24:59:59.999999
,据我所知,这是Python中的最大日期。
如果是是平等的,程序停止。如果不是,它将连续输出a
。
import datetime
while 1:
if str(datetime.datetime.now())=="9999-12-31 24:59:59.999999":exit
else:print("a")