가장 긴 코드를 작성하는 가장 짧은 코드


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

@Geobits 나는 내 대답을 그 대답에서 멀리하려고 노력했지만 노력이 충분하지 않다고 생각합니다. 그러면 무엇을 생성해야하므로 질문은 다른 질문-답변과 관련이 없습니까?
Mukul Kumar

1
나는 당신이 무엇 을 요구 해야할지 모르겠다. 여기서 어떤 승자가 거기에있는 답변과 엄청나게 유사 할 것 같습니다.
Geobits

@MukulKumar 어쩌면 긴 코드가 짧은 코드를 생성해야합니까? 그러나이 질문을 그렇게 바꾸지 마십시오. 그러나 다른 quine 관련 도전에 대한 아이디어 일 수 있습니다 (이전에 요청하지 않은 경우).
Martin Ender

답변:


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

처음에는 실제로 Perl을 읽을 수있었습니다. add두 개의 매개 변수를 사용하는 명명 된 함수를 생성합니다 . 그런 다음 반환 문처럼 찾고 그 기능 웁니다 return 39 if ($i == 13) && ($j == 3);에서 모든 값을 사용 $l$h대한 $i과를 $j. "불필요한 진술 만"규칙의 Smartass 굽힘.
tomsmeding

Mukul, 샘플 출력을 포함하도록 답변을 편집했습니다.
skibrianski

@skibrianski 글쎄, 그것은 유한합니다. 왜냐하면 변수 i, j가 가질 수있는 값은 유한하기 때문입니다. 그러나 꽤 큽니다.
Mukul Kumar

무줄. 유한하지만 무제한. 숫자를 알려 주시면 간단히 변수를 조정하여 더 큰 크기의 출력 (또는 점수)을 선택할 수 있습니다.
skibrianski

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.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

펄, 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,000pt

코드 : 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.