最短的代码写最长的代码


12

您面临的挑战是用您选择的语言创建最短的代码该代码将最长的代码写在.txt文件上,以将两个数字相乘作为输入并输出答案,从而将两个数字相乘

不需要输入代码来执行写作业

生成器代码和生成的代码可以使用任何语言

请勿使用无限制的序列或级数来放大文本文件。
不要使用不必要的语句来增加分数。

评分

( size of text file generated in bytes )  (without any unnecessary white spaces, tabs or newlines)
-----------------------------------------
     ( size of your code in bytes )  

优胜者

从现在开始的1个星期内将选出最高分数的优胜者

编辑:代码中输入两个数字的范围应介于-32768至32767之间


3
我最终想通了,但是事实是,您对输出使用代码格式设置,这似乎使您似乎在寻找文字字符串“最长的代码...”。
Undergroundmonorail

3
我想,你可以使用这个答案由共产国际,改变+*在生成器程序,他提供的,你可能已经知道这一点,因为你回答了这个问题为好。
Geobits 2014年

@Geobits我试图让我的问题远离那个答案,但是我认为付出的努力还不够,那我该问什么呢,这样该问题就不会与其他问题答案相关了吗?
Mukul Kumar 2014年

1
我不知道您应该问什么,似乎这里的任何赢家都将与那里的答案极为相似。
Geobits 2014年

@MukulKumar也许长代码应该生成短代码?但是不要将此问题更改为该更改,因为更改的方式过于庞大。但这可能是另一个与藜麦相关的挑战的想法(如果以前没有问过的话)。
Martin Ender 2014年

Answers:


11

perl / perl,在原始规则下得分不受限制,范围不受限制

这是一些不成功的代码:

$l=-2**5-1;
$h=2**5;
sub p{print@_}
p"sub add {(\$i,\$j)=\@_;\n";
for($i=$l;$i<=$h;++$i){
  for ($j=$l;$j<=$h;++$j){
    p" return ".($i*$j)." if (\$i == $i) && (\$j == $j);\n";
  }
}
p"}print add(<>,<>)\n";

输出具有以下形式:

sub add {($i,$j)=@_;
 return 1089 if ($i == -33) && ($j == -33);
 return 1056 if ($i == -33) && ($j == -32);
 return 1023 if ($i == -33) && ($j == -31);
 return 990 if ($i == -33) && ($j == -30);
...
 return 928 if ($i == 32) && ($j == 29);
 return 960 if ($i == 32) && ($j == 30);
 return 992 if ($i == 32) && ($j == 31);
 return 1024 if ($i == 32) && ($j == 32);
}print add(<>,<>)

输出文件的长度为181030字节,但是除去空格和换行符后,它的长度仅为133109字节。所以分数是133109/248 = 536.7289 ...

这是其他一些无法取胜的代码-除了前两行外,它是同一程序:

$l=-2**6-1;
$h=2**6;

输出文件的长度为718138字节,但是除去空格和换行符后,它的长度仅为532233字节。因此,分数是532233/248 =〜2146。更好!使用7产生的分数约为〜8750,8产生的分数约为〜35347,9产生的分数约为〜149129,10产生的分数151100000非空格/ 250 = 604,400 ....

当然,我们可以根据需要执行此操作。源程序的大小n将随着O(log(n))的增加而增加。输出程序的大小为O(2 * n)。当n达到无穷大时,2 * n / log(n)的限制显然是无穷大,因此,如果我只用自己喜欢的大数googolplex代替,我就赢了(直到有人建议googolplex + 1为止)。


什么样的输出?就像您可以先给出非重复行。
Mukul Kumar 2014年

我第一次真正可以阅读Perl。它生成一个名为的函数add,该函数带有两个参数。然后,它用return语句看起来像该功能return 39 if ($i == 13) && ($j == 3);,可以使用来自所有值$l$h$i$j。Smartass弯曲了“仅不必要的陈述”规则。
tomsmeding

Mukul,我编辑了答案以包括一些示例输出。
skibrianski 2014年

@skibrianski那么那是有限的,因为变量i,j可以容纳的值是有限的。但是,相当大。
Mukul Kumar 2014年

Mujul。有限,但无限。给我任何数字,我可以通过简单地调整这些变量来选择更大的输出(或分数)。
skibrianski 2014年

9

C,27297/245 = 111.4

源代码(245字节)

#include<stdio.h>
main(int c,char**v){char*s;FILE*f=fopen("/tmp/x.c","w");fprintf(f,"#include<stdio.h>\n#include<stdlib.h>\nmain(){int a=%s,b=%s;printf(\"%s * %s = %%d\\n\",a*b);}",v[1],v[2],v[1],v[2]);fclose(f);system("cc -E /tmp/x.c >add.c");}

编译并在命令行上使用两个整数参数运行时,这将生成另一个C文件,其中包含计算其乘积所需的代码,并使用该-E标志对其进行编译。此标志指定编译器应该预处理阶段和输出经处理的源代码(其中将包括的全部内容后停止stdio.hstdlib.h)。

输出文件(27297字节)

# 1 "/tmp/x.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/tmp/x.c"
# 1 "/usr/include/stdio.h" 1 3 4
# 64 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/_types.h" 1 3 4
# 27 "/usr/include/_types.h" 3 4
# 1 "/usr/include/sys/_types.h" 1 3 4
# 32 "/usr/include/sys/_types.h" 3 4
# 1 "/usr/include/sys/cdefs.h" 1 3 4
# 33 "/usr/include/sys/_types.h" 2 3 4

********* LINES 13-1273 OMITTED *********

long long
  strtoq(const char *, char **, int);
unsigned long long
  strtouq(const char *, char **, int);

extern char *suboptarg;
void *valloc(size_t);







# 3 "/tmp/x.c" 2
main(){int a=6,b=7;printf("6 * 7 = %d\n",a*b);}

运行输出代码的结果

输出文件另存为add.c,可以编译并正常运行:

$ ./a.out 6 7
$ cc add.c -o add
$ ./add
6 * 7 = 42
$ 

4

perl,125个字符,得分1,630,326,497.312

与我的其他答案相同的基本方法,但是这次根据更新的规则,限制在-32768和32767之间,并且所有不必要的空格都被完全剥离:

$l=-($h=32767)-1;print"sub a{";for$i($l..$h){print"return ".$i*$_." if\$_[0]==$i&&\$_[1]==$_;"for$l..$h;}print"}print a<>,<>"

输出程序如下所示开始:

sub a{return 1073741824 if $_[0]==-32768&&$_[1]==-32768;return 1073709056 if $_[0]==-32768&&$_[1]==-32767;

并结束:

return 1073643522 if $_[0]==32767&&$_[1]==32766;return 1073676289 if $_[0]==32767&&$_[1]==32767;}print a<>,<>

输出程序长190GB。更准确地说是203790812164字节。得分= 203790812164/125 = 1630326497.312


3

Windows命令脚本:〜1,000,000,000点

代码:158字节

输出:〜158000000000字节

echo>.txt @goto :%%1_%%2
set,=for /l %%a in (-32768 1 32767) do call :
%,%1 %%a
:1
%,%2 %1 %%a
:2
set/a]=%1*%2
echo :%1_%2>>.txt
echo @echo.%]%^&exit/b0>>.txt

输出几乎包括:

@goto :%1_%2
:-32768_-32768
@echo.1073741824&exit/b0
:-32768_-32767
@echo.1073709056&exit/b0
...
:32767_32767
@echo.1073676289&exit/b0
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.