Найкоротший код для написання найдовшого коду


12

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

НЕ ПОТРІБНО НЕ ПОТРІБНО ВАШИЙ КОД, ЯКИЙ РОБИТЬ НАПИСНУЮ РОБОТУ !

Код генератора та згенерований код можуть бути на будь-яких мовах

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

СКОРІННЯ

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

Переможець

Переможець буде обраний через 1 тиждень відтепер із найвищим балом .

EDIT: діапазон введення коду, що множить два числа, повинен знаходитися в межах від -32768 до 32767


3
Зрештою я зрозумів, але той факт, що ви використовуєте форматування коду для виводу, зробив враження, що ви шукали буквальний рядок "найдовший код до ...".
підземниймонорельс

3
Я думаю, ви можете просто скористатися цією відповіддю Комінтерном , змінивши +на *в програмі-генераторі, яку він надає, і ви, мабуть, це вже знаєте, оскільки ви відповіли і на це питання.
Геобіц

@Geobits Я намагався утримати своє запитання подалі від цієї відповіді, але я вважаю, що зусиль недостатньо, що мені потрібно просити, щоб потім генерувати, щоб питання не мав відношення до інших питань-відповідей?
Мукул Кумар

1
Я не знаю, що ви повинні запитати, просто здається, що будь-який переможець тут буде дуже схожим на відповіді.
Геобіц

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

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


Що таке вихід? як ви можете дати перші рядки, що не повторюються.
Мукул Кумар

Перший раз я насправді зміг прочитати Perl. Він генерує функцію, названу, addяка приймає два параметри. Потім вона заповнює цю функцію таким чином, що виклики повернення виглядають так return 39 if ($i == 13) && ($j == 3);, використовуючи всі значення від $lдо $hдля $iі до $j. Smartass згинання правила "тільки непотрібні заяви".
tomsmeding

Мукул, я відредагував відповідь, щоб включити деякий зразок виводу.
skibrianski

@skibrianski добре, що це кінцеве, тому що значення змінних i, j можуть містити кінцеві. Але, досить великий.
Мукул Кумар

Мюджул. Кінцевий, але необмежений. Дайте мені будь-яке число, і я можу вибрати більший розмір виводу (або оцінка), просто скоригувавши ці змінні.
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

perl, 125 символів, оцінка 1630,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.