सबसे छोटा कोड सबसे लंबा कोड लिखने के लिए


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
मुझे लगता है कि तुम सिर्फ उपयोग कर सकते हैं Comintern द्वारा इस उत्तर , बदल रहा है +करने के लिए *जनरेटर कार्यक्रम वह प्रदान करता है, और आप शायद पहले से ही यह जानता हूँ, जब से तुम उस सवाल के साथ ही जवाब दे दिया।
Geobits

@Geobits मैंने अपने प्रश्न को उस उत्तर से दूर रखने की कोशिश की, लेकिन मुझे लगता है कि प्रयास पर्याप्त नहीं है, फिर मुझे क्या उत्पन्न करने के लिए कहना चाहिए, ताकि प्रश्न का अन्य प्रश्न-उत्तर से कोई संबंध न हो?
मुकुल कुमार

1
मुझे नहीं पता कि आपको क्या पूछना चाहिए, ऐसा लगता है कि यहां कोई भी विजेता वहां के उत्तरों के समान ही होगा।
जियोबिट्स

@ मुकुलकुमार शायद लंबे कोड को शॉर्ट कोड जनरेट करें? लेकिन इस सवाल को उस पर मत बदलो, परिवर्तन बहुत महत्वपूर्ण है। लेकिन यह एक अन्य क्वीन से संबंधित चुनौती के लिए एक विचार हो सकता है (यदि यह पहले नहीं पूछा गया है)।
मार्टिन एंडर

जवाबों:


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 (लॉग (n)) के रूप में बढ़ जाएगा। आउटपुट प्रोग्राम का आकार O (2 * n) है। 2 * n / log (n) की सीमा n के रूप में n अनंत तक जाती है, स्पष्ट रूप से अनंत है, इसलिए अगर मैं सिर्फ अपने पसंदीदा बड़ी संख्या में स्थानापन्न करता हूं, एक googolplex, मैं जीतता हूं (जब तक कि कोई व्यक्ति googolplex + 1 का सुझाव नहीं देता है)।


आउटपुट किस तरह का है? जैसे आप पहले गैर-दोहराव वाली लाइनें दे सकते हैं।
मुकुल कुमार

पहली बार मैं वास्तव में पर्ल को पढ़ सकता था। यह एक फंक्शन उत्पन्न करता है जिसका नाम addहै दो पैरामीटर। यह तो बदले बयान की तरह लग रही के साथ कि समारोह भरता है return 39 if ($i == 13) && ($j == 3);, से सभी मानों का उपयोग $lकरने के लिए $hके लिए $iऔर $j। "केवल अनावश्यक बयान" नियम के स्मार्ट झुकने।
tomsmeding

मुकुल, मैंने कुछ नमूना आउटपुट को शामिल करने के लिए उत्तर संपादित किया।
स्कीब्रींसकी

@skibrianski अच्छी तरह से है कि तब परिमित है, क्योंकि मूल्य मैं चर, जम्मू धारण कर सकते हैं परिमित हैं। लेकिन, काफी बड़ा।
मुकुल कुमार

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

जब कमांड लाइन पर दो पूर्णांक तर्कों के साथ संकलित और चलाया जाता है, तो यह उनके उत्पाद की गणना करने के लिए आवश्यक कोड वाली एक और सी फ़ाइल उत्पन्न करता है, और इसे -Eध्वज के साथ संकलित करता है । इस ध्वज को निर्दिष्ट करता है कि संकलक preprocessing चरण और उत्पादन संसाधित स्रोत कोड (जो की संपूर्ण सामग्री शामिल होंगे के बाद बंद कर देना चाहिए 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

विंडोज कमांड स्क्रिप्ट: ~ 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.