รหัสที่สั้นที่สุดในการเขียนรหัสที่ยาวที่สุด


12

ความท้าทายของคุณคือการสร้างรหัสที่สั้นที่สุดในภาษาของคุณเลือกที่เขียนบน.txtไฟล์รหัสที่ยาวที่สุดที่จะคูณสองหมายเลขโดยการใช้ตัวเลขสองเป็น input และ output คำตอบ

ไม่จำเป็นต้องใส่รหัสของคุณซึ่งเป็นงานเขียน !

รหัสเครื่องกำเนิดไฟฟ้าและรหัสที่สร้างสามารถเป็นภาษาใดก็ได้

อย่าใช้ซีรีส์หรือความก้าวหน้าที่ไม่ จำกัด เพื่อทำให้ไฟล์ข้อความมีขนาดใหญ่
อย่าใช้ข้อความที่ไม่จำเป็นเพื่อเพิ่มคะแนน

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
ในที่สุดฉันก็ค้นพบ แต่ความจริงที่ว่าคุณใช้การจัดรูปแบบโค้ดสำหรับผลลัพธ์ทำให้ดูเหมือนว่าคุณกำลังมองหาสตริงตัวอักษร "รหัสที่ยาวที่สุดใน ... "
undergroundmonorail

3
ฉันคิดว่าคุณสามารถใช้คำตอบนี้โดย Cominternเปลี่ยน+ไปเป็น*ในโปรแกรมสร้างที่เขาให้และคุณอาจรู้อยู่แล้วตั้งแต่คุณตอบคำถามนั้นเช่นกัน
Geobits

@Geobits ฉันพยายามที่จะทำให้คำถามของฉันอยู่ห่างจากคำตอบนั้น แต่ฉันคิดว่าความพยายามนั้นไม่เพียงพอฉันควรจะสร้างอะไรขึ้นมาดังนั้นคำถามนั้นไม่มีอะไรเกี่ยวข้องกับคำตอบของคำถามอื่น ๆ ?
Mukul Kumar

1
ฉันไม่รู้ว่าคุณควรถามอะไรดูเหมือนว่าผู้ชนะที่นี่จะคล้าย ๆ กับคำตอบที่มี
Geobits

@MukulKumar อาจจะเป็นรหัสยาวควรสร้างรหัสสั้น ๆ ? แต่อย่าเปลี่ยนคำถามนี้เป็นสิ่งที่เปลี่ยนแปลงมากเกินไป แต่มันอาจเป็นความคิดสำหรับความท้าทายที่เกี่ยวข้องกับควิน (ถ้ายังไม่ได้รับการถามก่อน)
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 ...

นี่คือรหัสอื่น ๆ ที่ไม่ชนะ - เป็นโปรแกรมเดียวกันยกเว้น 2 บรรทัดแรก:

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

ไฟล์เอาต์พุตมีความยาว 718138 ไบต์ แต่หลังจากการแยกช่องว่างและการขึ้นบรรทัดใหม่จะมีความยาวเพียง 532233 ไบต์ ดังนั้นคะแนนคือ 532233/248 = ~ 2146 ดีกว่า! ใช้ 7 อัตราผลตอบแทนคะแนน ~ 8750, 8 ผลตอบแทน 35347, 9 ผลตอบแทน 149129, 10 ผลตอบแทน 151100000 non-space / 250 = 604,400 ....

แน่นอนเราสามารถทำได้ตราบใดที่เราต้องการ ขนาดของซอร์สโปรแกรม, n, จะเพิ่มขึ้นเป็น O (log (n)) ขนาดของโปรแกรมเอาต์พุตคือ O (2 * n) ขีด จำกัด ของ 2 * n / log (n) เมื่อ n ไปที่อนันต์นั้นไม่มีที่สิ้นสุดอย่างชัดเจนดังนั้นหากฉันเพิ่งเปลี่ยนเป็นจำนวนมากโปรด googolplex ฉันชนะ (จนกว่ามีคนแนะนำ googolplex + 1)


ชนิดของผลลัพธ์คืออะไร เช่นเดียวกับคุณอาจให้บรรทัดที่ไม่ซ้ำครั้งแรก
Mukul Kumar

ครั้งแรกที่ฉันได้อ่าน Perl จริงๆ มันสร้างฟังก์ชั่นชื่อaddซึ่งใช้เวลาสองพารามิเตอร์ จากนั้นก็ populates ฟังก์ชั่นที่มีงบการกลับมามองเช่นreturn 39 if ($i == 13) && ($j == 3);ใช้ค่าทั้งหมดจาก$lการ$hสำหรับและ$i $jSmartass กำลังดัดของกฎ "คำสั่งที่ไม่จำเป็นเท่านั้น"
tomsmeding

Mukul ฉันแก้ไขคำตอบเพื่อรวมเอาท์พุทตัวอย่างบางส่วน
skibrianski

@skibrianski แล้วก็มี จำกัด เพราะค่าตัวแปร i, j สามารถเก็บได้แน่นอน แต่ค่อนข้างใหญ่
Mukul Kumar

Mujul จำกัด แต่ไม่ จำกัด ให้หมายเลขใดก็ได้และฉันสามารถเลือกเอาท์พุทขนาดใหญ่กว่า (หรือคะแนน) โดยเพียงแค่ปรับตัวแปรเหล่านั้น
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 chars, คะแนน 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 pts

รหัส: 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.