Самый короткий код для написания самого длинного кода


12

Ваша задача состоит в том, чтобы создать самый короткий код на выбранном вами языке, который записывает в .txtфайл самый длинный код для умножения двух чисел, принимая два числа в качестве ввода и вывода ответа .

НИКАКОГО ВВОДА НЕ НУЖЕН ВАШ КОДЕКС, КОТОРЫЙ ДЕЛАЕТ ПИСЬМЕННУЮ РАБОТУ !

Генератор кода и сгенерированный код могут быть на любых языках

НЕ используйте неограниченное количество серий или последовательностей, чтобы сделать текстовый файл большим.
НЕ используйте ненужные заявления, чтобы увеличить счет.

SCORING

( 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
В конце концов я понял, но тот факт, что вы используете форматирование кода для вывода, выглядело так, как будто вы искали буквальную строку «самый длинный код для ...».
подземный

3
Я думаю, что вы можете просто использовать этот ответ Коминтерна , изменив +значение *в программе-генераторе, которую он предоставляет, и вы, вероятно, уже знаете это, так как ответили и на этот вопрос.
Geobits

@Geobits Я пытался держать свой вопрос подальше от этого ответа, но я думаю, что усилий недостаточно, что я должен попросить, чтобы генерировать, так что вопрос не имеет ничего общего с другими вопросами-ответами?
Мукул Кумар

1
Я не знаю, что вы должны спросить, просто кажется, что любой победитель здесь будет очень похож на ответы там.
Geobits

@MukulKumar возможно длинный код должен генерировать короткий код? Но не меняйте этот вопрос на это, изменение слишком существенное. Но это может быть идея для другой проблемы, связанной с квиной (если об этом раньше не спрашивали).
Мартин Эндер

Ответы:


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). Предел 2 * n / log (n), когда n переходит в бесконечность, явно равен бесконечности, поэтому, если я просто подставлю свое любимое большое число, googolplex, я выиграю (пока кто-нибудь не предложит googolplex + 1).


Какой вид продукции? как вы можете дать первые неповторяющиеся строки.
Мукул Кумар

Впервые я смог прочитать Perl. Он генерирует функцию с именем, addкоторая принимает два параметра. Затем он населяет эту функцию с возвратом заявление выглядит как return 39 if ($i == 13) && ($j == 3);, используя все значения от $lдо $hдля $iи $j. Умное изгибание правила «только ненужные высказывания».
Томсминг

Mukul, я отредактировал ответ, чтобы включить пример вывода.
Скибрянски

@skibrianski хорошо, тогда конечно, потому что значение, которое могут иметь переменные i, j, конечно. Но довольно большой.
Мукул Кумар

Mujul. Конечно, но без ограничений. Дайте мне любое число, и я могу выбрать больший размер вывода (или счет), просто подстраивая эти переменные.
Скибрянски

9

С 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

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

Программа вывода имеет длину 190 ГБ. Точнее, 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.