Mã ngắn nhất để viết mã dài nhất


12

Thách thức của bạn là tạo ra một mã ngắn nhất trong ngôn ngữ bạn chọn, ghi vào một .txttệp mã dài nhất để nhân hai số bằng cách lấy hai số làm đầu vào và xuất câu trả lời .

KHÔNG CẦN ĐẦU VÀO MÃ SỐ CỦA BẠN MÀ ĐANG LÀM CÔNG VIỆC VIẾT !

Mã trình tạo và mã được tạo có thể bằng bất kỳ ngôn ngữ nào

KHÔNG sử dụng chuỗi hoặc tiến trình không giới hạn để làm cho tệp văn bản lớn.
KHÔNG sử dụng các tuyên bố không cần thiết để tăng điểm.

KIẾM

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

Người chiến thắng

Người chiến thắng sẽ được chọn sau 1 tuần kể từ bây giờ với số điểm cao nhất .

EDIT: phạm vi đầu vào trong mã nhân hai số phải nằm trong khoảng từ -32768 đến 32767


3
Cuối cùng tôi đã tìm ra, nhưng thực tế là bạn sử dụng định dạng mã cho đầu ra làm cho có vẻ như bạn đang tìm chuỗi ký tự "mã dài nhất để ...".
undergroundmonorail

3
Tôi nghĩ rằng bạn chỉ có thể sử dụng câu trả lời này của Comiinter , thay đổi +thành *trong chương trình trình tạo mà anh ấy cung cấp và có lẽ bạn đã biết điều này, vì bạn cũng đã trả lời câu hỏi đó.
Geobits

@Geobits Tôi đã cố gắng giữ câu hỏi của mình tránh câu trả lời đó, nhưng tôi nghĩ rằng nỗ lực là không đủ, tôi nên yêu cầu gì để tạo ra sau đó, để Câu hỏi không có gì liên quan đến câu trả lời câu hỏi khác?
Mukul Kumar

1
Tôi không biết những gì bạn nên tự hỏi, nó chỉ có vẻ giống như bất kỳ người chiến thắng ở đây sẽ là một cách kỳ quái tương tự như câu trả lời đó.
Geobits

@MukulKumar có lẽ mã dài nên tạo mã ngắn? Nhưng đừng thay đổi câu hỏi này, thay đổi là quá lớn. Nhưng nó có thể là một ý tưởng cho một thách thức khác liên quan đến quine (nếu nó chưa được hỏi trước đó).
Martin Ender

Câu trả lời:


11

perl / perl, điểm không giới hạn theo quy tắc ban đầu với phạm vi không giới hạn

Đây là một số mã không thắng:

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

Đầu ra có dạng này:

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

tệp đầu ra dài 181030 byte, nhưng sau khi tước khoảng trắng và dòng mới, nó chỉ dài 133109 byte. vì vậy, điểm số là 133109/248 = 536.7289 ...

Đây là một số mã khác không thắng - đó là cùng một chương trình ngoại trừ 2 dòng đầu tiên:

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

tệp đầu ra dài 718138 byte, nhưng sau khi tước khoảng trắng và dòng mới, nó chỉ dài 532233 byte. vì vậy, điểm số là 532233/248 = ~ 2146. tốt hơn! sử dụng 7 mang lại số điểm ~ 8750, 8 sản lượng ~ 35347, 9 sản lượng ~ 149129, 10 mang lại 151100000 phi không gian / 250 = 604,400 ....

tất nhiên chúng ta có thể làm điều này miễn là chúng ta muốn. kích thước của chương trình nguồn, n, sẽ tăng lên là O (log (n)). kích thước của chương trình đầu ra là O (2 * n). Giới hạn 2 * n / log (n) khi n đi đến vô cùng rõ ràng là vô cùng, vì vậy nếu tôi chỉ thay thế số lượng lớn yêu thích của mình, một googolplex, tôi sẽ thắng (cho đến khi ai đó gợi ý googolplex + 1).


Các loại đầu ra là gì? như bạn có thể đưa ra dòng không lặp lại đầu tiên.
Mukul Kumar

Lần đầu tiên tôi thực sự có thể đọc Perl. Nó tạo ra một hàm có tênadd hai tham số. Sau đó, nó điền vào hàm đó với các câu lệnh return trông giống như return 39 if ($i == 13) && ($j == 3);, sử dụng tất cả các giá trị từ $lđến $hcho $i$j. Smartass uốn cong của quy tắc "chỉ những tuyên bố không cần thiết".
tomsmeding

Mukul, tôi chỉnh sửa câu trả lời để bao gồm một số đầu ra mẫu.
skibrianski

@skibrianski đó là hữu hạn sau đó, bởi vì giá trị các biến i, j có thể giữ là hữu hạn. Nhưng, khá lớn.
Mukul Kumar

Mujul. Hữu hạn, nhưng không giới hạn. Hãy cho tôi bất kỳ số nào và tôi có thể chọn đầu ra kích thước lớn hơn (hoặc điểm số) bằng cách điều chỉnh các biến đó.
skibrianski

9

C, 27297/245 = 111,4

Mã nguồn (245 byte)

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

Khi được biên dịch và chạy với hai đối số nguyên trên dòng lệnh, điều này tạo ra một tệp C khác chứa mã cần thiết để tính toán sản phẩm của họ và biên dịch nó với -Ecờ. Cờ này xác định rằng trình biên dịch sẽ dừng sau giai đoạn tiền xử lý và xuất mã nguồn được xử lý (sẽ bao gồm toàn bộ nội dung của stdio.hstdlib.h).

Tệp đầu ra (27297 byte)

# 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ết quả của việc chạy mã đầu ra

Tệp đầu ra được lưu dưới dạng add.c, có thể được biên dịch và chạy bình thường:

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

4

perl, 125 ký tự, điểm 1.630.326.497.312

Cách tiếp cận cơ bản giống như câu trả lời khác của tôi, nhưng lần này giới hạn trong khoảng từ -32768 đến 32767 cho mỗi quy tắc được cập nhật và tất cả các khoảng trắng không cần thiết bị loại bỏ hoàn toàn:

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

Chương trình đầu ra bắt đầu như vậy:

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

và kết thúc:

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

Chương trình đầu ra dài 190GB. Chính xác hơn, 203790812164 byte. Điểm = 203790812164/125 = 1630326497.312


3

Tập lệnh lệnh Windows: ~ 1.000.000.000 điểm

Mã: 158 byte

Đầu ra: ~ 158000000000 byte

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

Đầu ra khá nhiều bao gồm:

@goto :%1_%2
:-32768_-32768
@echo.1073741824&exit/b0
:-32768_-32767
@echo.1073709056&exit/b0
...
:32767_32767
@echo.1073676289&exit/b0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.