En uzun kodu yazmak için en kısa kod


12

Buradaki zorluk etmektir en kısa kodu oluşturmak bir yazar seçtiğiniz dilde .txtdosyaya giriş ve çıkış cevap olarak iki sayıyı alarak iki sayıyı çarpmak için en uzun kod .

YAZMA İŞİNİ YAPARAK KODUNUZA GİRİŞ YOKTUR !

Jeneratör kodu ve üretilen kod herhangi bir dilde olabilir

Metin dosyasını büyütmek için sınırsız seri veya ilerleme KULLANMAYIN . Skoru artırmak için gereksiz ifadeler
KULLANMAYIN .

PUANLAMA

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

kazanan

Kazanan seçilecektir 1 hafta sonra birlikte artık yüksek skora .

EDIT: koddaki iki sayıyı çarpan girdi aralığı -32768 ile 32767 arasında olmalıdır


3
Sonunda anladım, ama çıktı için kod biçimlendirme kullanmak gerçeği "en uzun kod ..." tam dize arıyor gibi görünüyordu yaptı.
undergroundmonorail

3
Sanırım bu cevabı Comintern'in+ kullanabileceği *, sağladığı jeneratör programındaki ile değiştirebileceğiniz ve muhtemelen bu soruyu da cevapladığınız için zaten biliyorsunuzdur.
Geobits

@Geobits Sorumu bu cevaptan uzak tutmaya çalıştım, ama bence çaba yeterli değil, o zaman ne üretmem gerektiğini sormalıyım, böylece sorunun diğer soru cevaplarından bir ilgisi yok mu?
Mukul Kumar

1
Bilmiyorum neyi burada herhangi bir kazanan cevapları oraya ürkütücü benzer olacak gibi sormalısınız, sadece görünüyor.
Geobits

@MukulKumar belki uzun kod kısa kodu üretmelidir? Ama bu soruyu bu şekilde değiştirmeyin, değişim çok önemli. Ancak, başka bir kine ile ilgili zorluk için bir fikir olabilir (daha önce sorulmamışsa).
Martin Ender

Yanıtlar:


11

perl / perl, sınırsız aralık ile orijinal kural altında sınırsız puan

İşte kazanamayan bazı kodlar:

$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";

Çıktı şu forma sahiptir:

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

çıktı dosyası 181030 bayt uzunluğundadır, ancak boşlukları ve satırsonlarını sıyırdıktan sonra yalnızca 133109 bayt uzunluğundadır. yani skor 133109/248 = 536.7289 ...

İşte kazanamayan başka bir kod - ilk 2 satır hariç aynı programdır:

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

çıktı dosyası 718138 bayt uzunluğundadır, ancak boşlukları ve satırsonlarını sıyırdıktan sonra yalnızca 532233 bayt uzunluğundadır. yani skor 532233/248 = ~ 2146'dır. daha iyi! 7 kullanarak ~ 8750, 8 verim ~ 35347, 9 verim ~ 149129, 10 verim 151100000 boşluk bırakmaz / 250 = 604,400 verir ...

elbette bunu istediğimiz sürece yapabiliriz. kaynak programın boyutu, n, O (log (n)) olarak artacaktır. çıktı programının boyutu O (2 * n) 'dir. N sonsuza giderken 2 * n / log (n) limiti açıkça sonsuzdur, bu yüzden en sevdiğim büyük sayı, googolplex yerine koyarsam, kazanırım (birisi googolplex + 1 önerene kadar).


Çıktı türü nedir? ilk tekrarlayan olmayan satırlar verebilirsiniz.
Mukul Kumar

İlk defa Perl'i gerçekten okuyabiliyordum. addİki parametre alan bir işlev üretir . Daha sonra dönüş ifadeleri gibi bakarak bu işlevi doldurur return 39 if ($i == 13) && ($j == 3);tüm değerleri kullanarak, $liçin $hiçin $ive $j. Smartass "sadece gereksiz ifadeler" kuralının bükülmesi.
tomsmeding

Mukul, cevabı bazı örnek çıktılar içerecek şekilde düzenledim.
skibrianski

@skibrianski o zaman bu sonludur, çünkü i, j değişkenlerinin tutabileceği değer sonludur. Ancak, oldukça büyük.
Mukul Kumar

Mujul. Sonlu fakat sınırsız. Bana herhangi bir sayı verin ve bu değişkenleri ayarlayarak daha büyük bir boyut (veya puan) seçebilirim.
skibrianski

9

C, 27297/245 = 111.4

Kaynak kodu (245 bayt)

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

Komut satırında iki tamsayı bağımsız değişkeni ile derlendiğinde ve çalıştırıldığında, bu, ürünlerini hesaplamak için gerekli kodu içeren başka bir C dosyası oluşturur ve -Ebayrağı ile derler . Bu bayrak, derleyicinin önişleme aşamasından sonra durması ve işlenen kaynak kodunun ( stdio.hve içeriğinin tamamını içerecek şekilde stdlib.h) çıkması gerektiğini belirtir .

Çıktı dosyası (27297 bayt)

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

Çıkış kodunu çalıştırmanın sonucu

Çıktı dosyası, add.cnormal şekilde derlenip çalıştırılabilecek şekilde kaydedilir:

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

4

perl, 125 karakter, skor 1.630.326.497.312

Diğer cevabımla aynı temel yaklaşım, ancak bu kez güncellenen kurallara göre -32768 ve 32767 arasında sınırlıydı ve tüm gereksiz boşluklar tamamen soyuldu:

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

Çıktı programı şu şekilde başlar:

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

Ve biter:

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

Çıktı programı 190 GB uzunluğunda. Daha kesin olarak, 203790812164 bayt. Puan = 203790812164/125 = 1630326497.312


3

Windows Komut Denetimi: ~ 1.000.000.000 puan

Kod: 158 bayt

Çıktı: ~ 158000000000 bayt

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

Çıktı hemen hemen aşağıdakilerden oluşur:

@goto :%1_%2
:-32768_-32768
@echo.1073741824&exit/b0
:-32768_-32767
@echo.1073709056&exit/b0
...
:32767_32767
@echo.1073676289&exit/b0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.