最短のコードで最長のコードを記述


12

あなたの課題は、選択した言語で最短のコード作成し、2つの数字を入力として使用して2つの数字を乗算し、答えを出力する最長のコードを.txtファイルに書き込むことです。

書き込みジョブを実行するコードに入力は不要です!

ジェネレーターコードと生成されたコードは、どの言語でも使用できます。

テキストファイルを大きくするために無制限のシリーズまたは進行を使用しないでください
しないでくださいスコアを高めるために、不要なステートメントを使用しています。

得点

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

勝者

1週間後最高スコアで勝者が選ばれます。

編集: 2つの数字を掛けるコードの入力範囲は、-32768〜32767の範囲でなければなりません


3
最終的にはわかりましたが、出力にコードの書式設定を使用しているという事実から、リテラル文字列 "theest long code to ..."を探しているように見えました。
地下

3
あなたはCominternによるこの答えを使用することができ、彼が提供するジェネレータプログラムの+to *を変更することができると思います。おそらくあなたもその質問に答えたので、おそらくこれを知っています。
ジオビット14

@Geobits私は質問をその答えから遠ざけようとしましたが、その努力は十分ではないと思います。
ムクルクマール

1
私はあなたがを尋ねるべきわからない、ただここの勝者はそこの答えに不気味に似ているようだ。
ジオビット14

@MukulKumarおそらく長いコードが短いコードを生成するはずですか?しかし、この質問をそれに変更しないでください。変更はあまりにも重要です。しかし、それは別の馬に関連した挑戦のアイデアかもしれません(それが以前に尋ねられていない場合)
マーティンエンダー14

回答:


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 ...です。

勝てないコードがいくつかあります-最初の2行を除いて同じプログラムです:

$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を提案するまで)。


出力の種類は何ですか?あなたが最初の非反復的な行を与えるかもしれないように。
ムクルクマール14

初めて、実際にPerlを読むことができました。add2つのパラメーターを受け取るという名前の関数を生成します。その後のように見えるのreturn文でその機能を移入return 39 if ($i == 13) && ($j == 3);からすべての値を使用して、$lする$hため$i$j。「不要なステートメントのみ」ルールのSmartass曲げ。
tomsmeding

Mukul、回答を編集してサンプル出力を追加しました。
skibrianski 14

変数i、jが保持できる値は有限であるため、@ skibrianskiは有限です。しかし、かなり大きい。
ムクルクマール14

ムジュル。有限ですが、無制限です。任意の数を指定すると、これらの変数を調整するだけで、より大きなサイズの出力(またはスコア)を選択できます。
skibrianski 14

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");}

コマンドラインで2つの整数引数を使用してコンパイルおよび実行すると、製品の計算に必要なコードを含む別のCファイルが生成され、-Eフラグ付きでコンパイルされます。このフラグは、コンパイラが前処理段階の後に停止し、処理されたソースコード(stdio.hおよびの内容全体を含む)を出力することを指定しますstdlib.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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.