एक स्ट्रिंग की एक googol प्रतियां आउटपुट


63

मुझे उन कार्यक्रमों को देखने में दिलचस्पी है जो किसी भी इनपुट के लिए नहीं पूछते हैं, कुछ गैर-रिक्त स्ट्रिंग की एक googol प्रतियां प्रिंट करें , कोई कम नहीं, अधिक नहीं, और फिर बंद करें। एक googol को 10 ^ 100 के रूप में परिभाषित किया गया है, अर्थात, दशमलव में सौ 0 के बाद 1।

उदाहरण आउटपुट:

111111111111111111111111111111111111111111111111111111111111111111111111...

या

Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
...

स्ट्रिंग पूरी तरह से सफेद स्थान या विशेष प्रतीकों से बना हो सकता है। निश्चित स्ट्रिंग की समान प्रतियों के लिए एकमात्र अपवाद यह है कि यदि आपकी भाषा आउटपुट को किसी तरह से सजाती है, जिसे रोका नहीं जा सकता है, लेकिन एक आवरण स्क्रिप्ट में तुच्छ रूप से पूर्ववत किया जा सकता है, जैसे प्रत्येक पंक्ति के लिए एक पंक्ति संख्या को प्रस्तुत करना। ऐसे मामलों में आवरण स्क्रिप्ट प्रदान करने की आवश्यकता नहीं है।

आप मान सकते हैं कि आपका कंप्यूटर कभी भी समय से नहीं चलेगा, लेकिन इसके अलावा, आपके कार्यक्रम में संसाधनों की उचित मांग होनी चाहिए। इसके अलावा, आपको किसी भी प्रतिबंध का सम्मान करना चाहिए कि आपकी पसंद की प्रोग्रामिंग भाषा बन गई है, उदाहरण के लिए, आप इसके पूर्णांक प्रकारों के लिए अनुमत अधिकतम मान से अधिक नहीं हो सकते हैं, और किसी भी बिंदु पर 4 जीबी से अधिक मेमोरी की आवश्यकता नहीं होनी चाहिए।

दूसरे शब्दों में, प्रोग्राम को आपके कंप्यूटर पर चलाकर सिद्धांत रूप में परीक्षण योग्य होना चाहिए । लेकिन इस संख्या की सीमा के कारण आपको यह साबित करने की उम्मीद की जाएगी कि स्ट्रिंग की प्रतियों की संख्या यह आउटपुट 10 ^ 100 है और यह कार्यक्रम बाद में बंद हो जाता है। रोकना किसी त्रुटि के कारण छूटना या रोकना या समाप्त करना भी हो सकता है, लेकिन यदि ऐसा है, तो त्रुटि को किसी भी आउटपुट का उत्पादन नहीं करना चाहिए जो आसानी से प्रोग्राम के आउटपुट से अलग नहीं किया जा सकता है।

यह , इसलिए सबसे कम बाइट जीतता है।

उदाहरण समाधान (सी, अनगुल्ड, 3768 बाइट्स)

#include <stdio.h>

int main() {
  int a00, a01, a02, a03, ..., a99;
  for(a00 = 0; a00 < 10; a00++)
  for(a01 = 0; a01 < 10; a01++)
  for(a02 = 0; a02 < 10; a02++)
  for(a03 = 0; a03 < 10; a03++)
  ...
  for(a99 = 0; a99 < 10; a99++)
    puts("1");
  return 0;
}

10
अगली बार सैंडबॉक्स पर विचार करें ।
बिल्ली

9
जब आप एक नया प्रश्न पोस्ट करते हैं , तो आपको इसे सैंडबॉक्स में पोस्ट करने के लिए कहा जाता है ।
दोष

1
@KritiiLithos यह उस विचार के साथ अग्रणी था, लेकिन मैं जल्दी से एक नमूना समाधान के साथ नहीं आ सका। सीक्वल बनाने के लिए बेझिझक :-)
Vee

3
@closevoter क्या आपको यकीन है कि यह बहुत व्यापक है? सामान्य ज्ञान स्वचालित रूप से इसे "एक गैर-रिक्त स्ट्रिंग 10 ^ 100 गुना" से "एक वर्ण 10 ^ 100 बार प्रिंट" करने के लिए कहता है।
dorukayhan

जवाबों:


34

जेली , 6 4 बाइट्स

³Ȯ*¡

यह एक niladic लिंक (ओ तर्क डब्ल्यू / समारोह) कि प्रिंट है 10 200 स्ट्रिंग की प्रतियां 100 , जिसका अर्थ है कि यह प्रिंट 10 100 स्ट्रिंग है जो होते हैं की प्रतियां 10 100 स्ट्रिंग की प्रतियां 100

इसे ऑनलाइन आज़माएं!

ध्यान दें कि ऑनलाइन दुभाषिया व्यावहारिक कारणों से 100 केबी पर आउटपुट में कटौती करता है। कोड एक पूर्ण प्रोग्राम के रूप में भी काम करता है, लेकिन निहित आउटपुट के कारण, यह प्रोग्राम एक कॉपी को बहुत अधिक प्रिंट करता है।

यह काम किस प्रकार करता है

³Ȯ*¡  Niladic link. No arguments.

³     Set the left argument and initial return value to 100.
 Ȯ    Print the current return value.
  *   Compute 100 ** 100 = 1e200.
   ¡  Call Ȯ 1e200 times. 

3
खैर ... वाह ... 10^100मूल आउटपुट ( 10^100एक स्ट्रिंग की प्रतियां) की मुद्रण प्रतियां इसे थोड़ी दूर ले जा रही हैं, यहां तक ​​कि दो पूरे बाइट्स के लिए भी। क्या आपने इसे "स्कोर आउटपुट / प्रोग्राम-लेंथ, उच्चतम जीत" चुनौती के लिए प्रस्तुत किया है?
17

1
सुनिश्चित नहीं हैं कि आप किस चुनौती का उल्लेख कर रहे हैं (हमारे पास इस प्रकार का कुछ था), लेकिन 3e200 शायद वैसे भी प्रतिस्पर्धी नहीं है।
डेनिस

2
@ wizzwizz4 यदि आप मानक अंकन में अपना नंबर व्यक्त कर सकते हैं तो यह शायद बहुत छोटा है।
orlp

1
"फॉल ओवर" = विफल / दुर्घटना
लोरेन Pechtel

4
@LorenPechtel जेली पायथन में लागू की गई है, जो 665-बिट पूर्णांकों को आसानी से संभालती है।
डेनिस

60

फजी ऑक्टो गुआकामोल, 13 12 11 10 बाइट्स

9+ddpp![g] 

व्याख्या:

9+ddpp![g]
9+           # push 9 and increment, giving 10
  dd         # duplicate, twice. now you have [10,10,10]
    pp       # raise a 10 to the 10th power, then raise that to the 10th again. That ends up being 10^100.
      ![ ]   # for loop, `!` sets the counter to the top of stack
        g    # prints an ASCII art goat. 

मुद्रित बकरी का नमूना:

                  ___.
                 //  \\
                ((   ""
                 \\__,
                /6 (%)\,
               (__/:";,;\--____----_
                ;; :";,:";`;,";,;";`,`_
                  ;:,;;";";,;":,";";,-Y\
                   ;,;,;";";,;":;";"; Z/
                   / ;,";";,;";,;";;"
                  / / |";/~~~~~\";;"
                 ( K  | |      || |
                  \_\ | |      || |
                   \Z | |      || |
                      L_|      LL_|
                      LW/      LLW/

2
बकरी के सिर को समझने में मुझे थोड़ा समय लगा। यह आसानी से पहचानने योग्य नहीं है।
mbomb007

गोट ने मुझे ASCII कला दी, उसके बारे में पूछा।
R

9
आप क्या बात कर रहे हैं, मुझे कुछ नहीं मालूम। +1।
djechlin

15
@djechlin Downgoat ने मुझे एक बकरी की छपाई के लिए बिलिन जोड़ने को कहा। मैंने विवश किया।
R

21

पायथन, 28 बाइट्स

-1 जोनाथन एलन को धन्यवाद!

अजगर 2:

i=10**100
while i:print;i-=1

पायथन 3 (30 बाइट्स):

i=10**100
while i:print();i-=1

2
i=10**100newline while i:print();i-=1एक बाइट बचाता है। अजगर 2 का उपयोग करके दो और बचाएंwhile i:print;i-=1
जोनाथन एलन

@JonathanAllan -1 बाइट के लिए धन्यवाद। अजगर 2 समाधान के रूप में, मैं आपको पोस्ट करने के लिए छोड़ दूँगा :)
FlipTack

अच्छा पहला जवाब! :)
डैनियल

क्या अजगर वास्तव में एक पूर्णांक में 10 से 100 स्टोर कर सकता है?
आर्टुरो टॉरेस सैंचेज़

7
@ ArturoTorresSánchez हां, अजगर में इंट के आकार की कोई ऊपरी सीमा नहीं है :)
FlipTack

18

हास्केल, 28 बाइट्स

main=putStr$[1..10^100]>>"1"

स्ट्रिंग की 10 ^ 100 प्रतियों को समेटता है "1"और उसे प्रिंट करता है।


क्या मुद्रण शुरू होने से पहले स्ट्रिंग का संघटन किया जाता है? अगर ऐसा है तो मुझे लगता है कि यह नियम "4 जीबी मेमोरी से अधिक नहीं" के बारे में तोड़ता है ...
डेनियरो

8
@ डानिएरो: हास्केल के आलस्य मुद्रण के लिए धन्यवाद तुरंत शुरू होता है। मेरे कंप्यूटर पर प्रोग्राम को 2MB से कम मेमोरी (रन टाइम सिस्टम आरटीएस सहित) की आवश्यकता है।
नमि

है s=[1..10^100]>>"1"एक की अनुमति दी जवाब प्रारूप?
23:25 पर user253751

अनंत पूर्णांक? अन्यथा यह 10 ^ 100 पर गिर जाता है
लोरेन Pechtel

@ इमिबिज़: चुनौती "प्रिंट" कहती है, जिसका अर्थ आमतौर पर "प्रिंट टू स्टैडआउट" होता है। sआपके उदाहरण से प्रिंट नहीं होता है - या यदि आप REPL का उपयोग करते हैं तो 1साथ में घेरता है "। मुझे लगता है कि putStr$[1..10^100]>>"1"बिना main=ठीक होगा, लेकिन मैं एक पूरा कार्यक्रम प्रस्तुत करना चाहता था।
निमि

17

Brainfuck, 480 188 114 106 98 बाइट्स

सिर्फ इसलिए कि इसे करने की जरूरत है।

रैपिंग के साथ 8-बिट कोशिकाओं को मानता है। 250 255 NUL बाइट्स प्रिंट करता है, जो कि 10 100 गुना 10 155 गुना 25 255 NUL बाइट्स है।

>>>>>>-[[->>>+<<<]------>>>-]<<<[<<<]+[+[>>>]<<<->+[<[+>-]>[-<<<<->+>>------>>]<<<<]>>-[<<<].>>>-]

व्याख्या:

>>>>>> काम करने की जगह छोड़ने के लिए आवश्यक है।

- 255 का उत्पादन करता है।

[[->>>+<<<]------>>>-] यह मान 250 की 255 प्रतियों में बदल जाता है, एक टेप देता है जो दिखता है:

0 0 0 0 0 0 250 0 0 250 0 0 ... 250 0 0 [0]

<<<[<<<]+ डेटा पॉइंटर को वापस ले जाता है और प्रारंभिक डेटा को पूरा करता है:

0 0 0 [1] 0 0 250 0 0 250 0 0 ...

फिर लूप आता है: [+...-]शुरू में 1 से 2 सेट करता है, जो लूप के अंत में 1 पर सेट हो जाता है। लूप समाप्त हो जाता है जब लूप शरीर पहले से ही 2 से 1 सेट करता है।

अब, संख्या 2 250 250 250 ... 250 एक काउंटर का प्रतिनिधित्व करता है, बेस 250 में, प्रत्येक संख्या उस अंक की तुलना में अधिक होती है, जिसका वह प्रतिनिधित्व करता है।

  • [>>>]<<<सही करने के लिए सभी तरह से चलता है। चूंकि प्रत्येक अंक एक गैर-शून्य संख्या द्वारा दर्शाया जाता है, यह तुच्छ है।

  • ->+[<[+>-]>[-<<<<->+>>------>>]<<<<]>>-काउंटर को 1. से घटाता है। अंतिम अंक से शुरू होता है: अंक घट जाता है। यदि यह सकारात्मक रहता है, तो हम कर रहे हैं। यदि यह शून्य हो जाता है, तो इसे 250 पर सेट करें, और पहले अंक के साथ जारी रखें।

  • [<<<].>>>पॉइंटर को लेफ्ट-डिजिट से पहले वापस ले जाता है, और NUL बाइट प्रिंट करने के लिए यह एक अच्छा पल है। फिर बायीं ओर सबसे अधिक अंक के लिए फिर से स्थिति, यह देखने के लिए कि क्या हम कर रहे हैं।

शुद्धता को सत्यापित करने के लिए, 250 1 एनयूएल बाइट्स को प्रिंट -करने के +लिए प्रारंभिक बदलें , 250 2 के लिए , आदि।++


16

सी, 51 बाइट्स

फ़ंक्शन 99 की गहराई तक g()पुनरावर्ती फ़ंक्शन f()को कॉल करता है।

स्पष्टता के बीच f()और बीच में जोड़े गए अनावश्यक न्यूलाइन g()को छोड़कर।

f(n,i){for(i=10;i--;)n?f(n-1):puts("");}
g(){f(99);}

//call like this
main(){g();}

प्रिंट 1E100 नई सुर्खियाँ।

सी के सभी संस्करणों में काम करने की गारंटी नहीं के iदूसरे पैरामीटर के रूप में घोषणा f()मेरी मशीन पर परीक्षण किया गया (साइग्विन पर जीसीसी) और ideone.com पर (मेरा मानना ​​है कि वे भी जीसीसी चलाते हैं), लेकिन एफ (99) तक नहीं कारणों!


1
4 GiB स्मृति सीमा का अनुपालन करता है?
डेनिस

3
@ डेनिस यह करना चाहिए, यह केवल स्टैक पर f, n और i की गहराई 99 पुनरावृत्ति संग्रहीत करता है, इस तथ्य के आसपास हो रहा है कि C कोई 100 अंकों की संख्या दशमलव संख्या को संभाल नहीं सकता है। मैं f()1980 बाइट्स के प्रत्येक उदाहरण के लिए अधिकतम 20 बाइट्स का अनुमान लगाऊंगा। putsएपीआई को नई-पंक्तियों उदासीनता और एपीआई उत्पादन करना चाहिए और आवश्यक के रूप में बफर फ्लश।
लेवल रिवर सेंट

3
स्थानीय स्तर पर इसका परीक्षण किया गया और मेमोरी उपयोग 1 MiB से आगे नहीं बढ़ा।
डेनिस

) च का दूसरा पैरामीटर (के रूप में मैं की घोषणा सी के सभी संस्करणों में काम करने के लिए गारंटी नहीं : यह या एक ढेर-आर्ग बुला सम्मेलन जहां कॉल प्राप्त करने वाला ढेर (से आर्ग पॉप के साथ टूट सकता है, तो fराईट अंतरिक्ष कि फोन करने वाले नहीं दिया ढेर 'यह उम्मीद नहीं)। clang "f 'में कॉल करने के लिए" बहुत कम तर्क "के बारे में चेतावनी देता है, -std=c89और -std=c99, इसलिए परिभाषा एक विशिष्ट संख्या में args के साथ एक घोषणा के रूप में कार्य करती है। लेकिन मैं भूल जाता हूं; मुझे लगता है कि इसका मतलब यह हो सकता है कि संकलक जानता है कि फ़ंक्शन 2 आर्ग्स की अपेक्षा करता है, और हमेशा 2 आरजी के लिए जगह छोड़ देगा।
पीटर कॉर्डेस

1
@FelixDombek समुदाय ने कुछ समय पहले निर्णय लिया था कि "कार्यक्रम" का अर्थ है कि आप एक कार्यक्रम या कार्य लिख सकते हैं जब तक कि "पूर्ण कार्यक्रम" स्पष्ट रूप से निर्दिष्ट नहीं किया जाता है। meta.codegolf.stackexchange.com/a/6912/15599 । इसलिए मेरा सबमिशन सम्‍मिलित है gऔर इसका सहायक कार्य है fmainलंबा होगा। यहाँ कुछ अन्य फ़ंक्शन सबमिशन हैं, यदि आप देखते हैं।
लेवल रिवर सेंट

14

कमोडोर VIC 20 मशीन कोड (40 बाइट्स)

... यहाँ हेक्साडेसिमल के रूप में दिखाया गया है:

1040   A9[64]A2 00 9D 68 10 E8  E0[32]D0 F8 A9 00 9D 68
1050   10 A9[31]20 D2 FF A2 00  A9[64]DE 68 10 30 08 D0
1060   F0 9D 68 10 E8 D0 F3 60

(का उपयोग शुरू किया: SYS 4160)

मीनिंग ऑफ कोष्ठक में बाइट्स

  • 0x64 (दो बार होता है) आधार (100) है; (मान 2 से 127 तक काम करना चाहिए)
  • 0x32 घातांक है (50) (कोई भी गैर-शून्य मान (1-255) काम करना चाहिए)
  • ध्यान दें कि 100 ^ 50 = 10 ^ 100; कार्यक्रम को 100 ^ 50 बार चलाने पर 10 ^ 100 बार करने की तुलना में अधिक रैम कुशल है
  • 0x31 मुद्रित होने वाला ASCII वर्ण है

और किसी भी बिंदु पर 4 जी बी से अधिक मेमोरी की आवश्यकता नहीं होनी चाहिए।

क्या यह टाइपिंग की गलती है?

हमारे पास वर्ष 1981 है।

एक सामान्य घरेलू कंप्यूटर में 1 से 16 K B RAM होती है! और आपको शायद ही पेशेवर मॉडल मिलेंगे जिनके पास 1 एम बी या अधिक है।

(ठीक है। बस एक मजाक है।)

दूसरे शब्दों में, प्रोग्राम को आपके कंप्यूटर पर चलाकर सिद्धांत रूप में परीक्षण योग्य होना चाहिए। लेकिन इस संख्या की सीमा के कारण आपको यह साबित करने की उम्मीद की जाएगी कि यह स्ट्रिंग की प्रतियों की संख्या 10 ^ 100 है और यह कार्यक्रम बाद में बंद हो जाता है।

कार्यक्रम को अन्य ठिकानों और प्रतिपादकों के साथ परीक्षण किया गया है। मुझे कोई संदेह नहीं है कि यह 100 और 50 के साथ भी काम करेगा।

कम से कम यह इन संख्याओं के साथ दुर्घटना नहीं करता है (लेकिन औसत समय में समाप्त नहीं होता है)।

मेमोरी का आकार 50 के घातांक के लिए पर्याप्त है और 100 127 से कम है, इसलिए 100 का आधार समस्या नहीं होना चाहिए।

मूल विचार है

50 अंकों का एक काउंटर है जो 100-प्रणाली में गिना जाता है। बाइट्स 0x01-0x64 अंक 0-99 का प्रतिनिधित्व करते हैं। काउंटर में पहला बाइट सबसे कम अंक है। काउंटर में अंतिम बाइट (उच्चतम अंक) 0x00 के मान के साथ बाइट है।

काउंटर का प्रारंभिक मूल्य 100 ^ 50 है।

एक बाहरी लूप आधुनिक सिस्टम पर "वर्तमान चैनल" ("मानक आउटपुट"; आमतौर पर स्क्रीन) पर एक बाइट लिख रहा है और फिर काउंटर को घटाता है।

घटाव एक आंतरिक लूप द्वारा किया जाता है: यह एक अंक घटाता है और 1 से 99 तक अंडरफ्लो के मामले में यह अगले अंक के लिए आगे बढ़ता है। यदि काउंटर के अंत में बाइट 0x00 है तो प्रोग्राम रुक जाता है।

विधानसभा कोड है

    ; Some constants
    base=10
    exponent=100
    character=0x32

    ; Initialize the content of the counter to 100^50
    ; (Fill the first 50 bytes with the value 100)
    lda  #base
    ldx  #0
initLoop:
    sta  counter,x
    inx
    cpx  #exponent
    bne  initLoop
    ; (The terminating 0 at the end of the counter)
    lda  #0
    sta  counter,x

    ; Now do the actual job
outerLoop:
    ; Output a character
    lda  #character
    jsr  (0xFFD2)
    ; Prepare for the inner loop
    ldx  #0
    lda  #base
innerLoop:
    ; Decrement one digit
    dec  counter,x
    ; Result is negative -> must have been the terminating
    ; NUL byte -> Exit
    bmi  progEnd
    ; Result is not zero -> Print the next byte
    bne  outerLoop
    ; Result is zero -> Was 0x01 before -> As 0x01 represents
    ; digit 0 this is an underflow -> set the digit to
    ; "exponent" (100) again (which represents digit 99)
    sta  counter,x
    ; Go to the next digit and...
    inx
    ; ... repeat the inner loop (decrement next digit)
    ; (Note that this conditional branch is ALWAYS taken)
    bne  innerLoop

progEnd:
    rts

counter:
    ; The memory used by the counter is here...

संपादित करें

कार्यक्रम कमोडोर C64 पर भी चलता है!


मैंने अपने x86-64 मशीन-कोड कार्यान्वयन के लिए @ LevelRiverSt के पुनरावर्तन विचार को उधार लिया , जो 30B पर आ रहा है (प्रिंटिंग के लिए libc से putchar का उपयोग करके)। मैंने एक विस्तारित-सटीक लूप काउंटर पर विचार किया, और यह x86 में भी काम करेगा। (और इसी तरह बहुत सस्ते में इनिशियलाइज़ किया जा सकता है)। शायद मैं इसे कभी-कभी कोशिश करूँगा ...
पीटर कॉर्ड्स

1
योग्य वाह, मैं .... <गोल्फ ताली> ... मैंने 6502 विधानसभा में नहीं देखा है ... ठीक है, एक लंबा समय।
एलेक्स हॉवानस्की

12

नोड, 89 बाइट्स

for(i="0".repeat(100)+1;+i;i=i.replace(/0*./,x=>"9".repeat(x.length-1)+~-x))console.log()

आउटपुट 10 100 newlines। (सैद्धांतिक रूप से, कि है, के स्थान पर परीक्षा 100के साथ 110 उत्पादन के लिए 1 नई-पंक्तियों के बजाय।)

यह iस्ट्रिंग पर सेट करके काम करता है

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

(100 शून्य और एक 1; एक गोगोल उलट), फिर बार-बार "एक्सट्रैक्टिंग 1" एक रेगेक्स के साथ बदलकर एक नई रेखा का उत्पादन करता है जब तक कि स्ट्रिंग सभी शून्य न हो जाए।

C ++ उत्तर का एक पोर्ट 49 बाइट्स होगा:

(f=n=>{for(i=10;i--;)n?f(n-1):console.log()})(99)

1
यह प्रतिभा है! या तो वह या आप रेटिना के एक विशेषज्ञ हैं, जो जरूरी नहीं कि "जीनियस" का शासन करता है ...
पैट्रिक रॉबर्ट्स

7

05AB1E , 6 बाइट्स

Tn°F1?

व्याख्या

Tn°    # push 10^100
   F   # 10^100 times do
    1? # print 1

5
@MartinRosenau: सौभाग्य से 05AB1E अजगर 3 पूर्णांक का उपयोग करता है जिसकी कोई सीमा नहीं है।
एमिग्ना

1
@JDDvorak: पायथन 3 डॉक्स के अनुसार पूर्णांकों के मान की कोई सीमा नहीं है
एमिग्ना

1
@JDDvorak: वास्तव में। मैंने बिना मुद्दों के कुछ बहुत बड़ी संख्याओं का उपयोग किया है (हालांकि इतना बड़ा नहीं)। हमें केवल 1e100 को यहाँ संभालना होगा और अजगर निश्चित रूप से संभाल सकता है :)
Emigna

1
@JDDvorak पायथन पूर्णांकों का अधिकतम आकार केवल उपलब्ध मेमोरी की मात्रा पर निर्भर है।
Mego

4
मैं एक लंबी संख्या में बाधा डालने की कोशिश करते हुए पहले सीमा पर पहुंच गया। मैं जिस मशीन का उपयोग कर रहा था वह पूर्णांक ओवरफ्लो से पहले 10 ^ 3000 से बड़ी संख्या को संभालने में सक्षम थी।
फल

6

रूबी, 20 बाइट्स

(10**100).times{p 1}

प्रिंट्स 1 के बाद एक नई लाइन 1 ई 100 बार।

1E100 काम नहीं करता है क्योंकि यह एक फ्लोट का मूल्यांकन करता है, न कि एक मनमाना सटीक पूर्णांक।


क्या आप कोष्ठक हटा सकते हैं?
OldBunny2800

1
@ OldBunny2800 सं। विधियाँ ऑपरेटरों पर प्राथमिकता लेती हैं, इसलिए इसकी व्याख्या इस प्रकार की जाएगी10**(100.times{p 1})
लेवल रिवर सेंट

1
उन उत्सुक लोगों के लिए, 1E100.to_iमेरे कंप्यूटर पर 1000000000000000015902891109759918046836080856394528138978132755834787872170386081346998585686815104 का मूल्यांकन किया गया।
एंड्रयू ग्रिम

6

/// , 36 ASCII वर्ण (4 अलग)

/t./.ttttt//.t/t\..........//t//t...

.चरित्र 3 * 10 ^ 125 बार आउटपुट करता है , जिसका अर्थ है कि यह स्ट्रिंग को 3 * 10 ^ 25 .वर्ण के दोहराव से युक्त करता है, 10 ^ 100 बार।

व्याख्या:

  1. /t./.ttttt/: कार्यक्रम के बाकी हिस्सों के t.साथ बदलें .ttttt, जब तक कि कोई उदाहरण न हो तब तक दोहराते t.रहें। यह बदल देता है t...के साथ ...125 के द्वारा पीछा किया tहै।
  2. /.t/t\........../: कार्यक्रम के बाकी हिस्सों के .tसाथ बदलें t.........., जब तक कि कोई उदाहरण न हो तब तक दोहराते .tरहें। इसके ...बाद 125 ts का स्थान आता है, और इसे 125 ts में बदल दिया जाता है और इसके बाद 10 ^ 125 घटनाएँ होती हैं ...
  3. /t//: शेष सभी निकालें t
  4. t...: इसे 3 * 10 ^ 125 .s से बदल दिया जाता है । उन्हें आउटपुट दें।

अब, आउटपुट 10 ^ 100 रिपीटिशन ऑफ 3 * 10 ^ 25 चीटिंग की तरह कुछ महसूस करता है। यह कार्यक्रम .45 ASCII वर्णों का उपयोग करते हुए चरित्र को 10 ^ 100 बार ठीक करता है:

/T/tttttttttt//.t/t..........//t//.TTTTTTTTTT

इस एक की व्याख्या:

  1. /T/tttttttttt/: कार्यक्रम के बाकी हिस्सों के Tसाथ बदलें tttttttttt। यह TTTTTTTTTT100 पुनरावृत्ति के साथ बदल देता है t
  2. /.t/t........../: कार्यक्रम के बाकी हिस्सों के .tसाथ बदलें t..........। इसके .बाद 100 ts का स्थान आता है, और इसे t10 ^ 100 के बाद 100 s में बदल देता है. एस होता है।
  3. /t//: शेष सभी निकालें t
  4. .TTTTTTTTTT: इसे 10 ^ 100 .s से बदल दिया जाता है । उन्हें आउटपुट दें।

अंत में, यहां एक समझौता कार्यक्रम है, जो .40 वर्णों का उपयोग करते हुए चरित्र 2 * 10 ^ 100 बार आउटपुट करता है :

/t./.tttttttttt//.t/t\..........//t//t..

6

बेफुज 93, 33 बाइट्स

1>01g0`#@!# _01v
d^.1 **52p10-1g<

दुर्भाग्य से, Befunge में एक पावर फ़ंक्शन नहीं है, इसलिए लगभग सभी कोड मेरे द्वारा पावर फ़ंक्शन का कार्यान्वयन है। मैं अभी भी इस पर काम कर रहा हूं।

व्याख्या:

1 > 01g 0` #@!# _ 01g 1- 01p 25** 1. v
d ^                                  <

1: 1शीर्ष बाईं ओर से प्रारंभ करें ताकि जब हम गुणा करें, तो हमें 0हर बार न मिले ।

01g: स्थिति (0, 1) पर चरित्र प्राप्त करें, जो है d, जिसका ASCII कोड 100 है।

0`: देखें कि क्या (0, 1) में संग्रहीत मान 0 से अधिक है; यह मान बदल जाएगा।

#@!# _: तार्किक नहीं ! कि हम अंतिम चरण (0 या 1) से प्राप्त करते हैं, ताकि यदि यह 1 था, तो अब हमारे पास 0 है, और हम ध्यान दें #कि आप कोड में अगले वर्ण को छोड़ दें।

01g 1- 01p: (0, 1) में संग्रहीत मान को फिर से लें, उसमें से 1 घटाएं, और इस नए मान को (0, 1) पर संग्रहीत करें

25**: स्टैक के शीर्ष मूल्य को 10 से गुणा करें

1.: प्रिंट 1 हर बार इस लूप को करें

1 (सिद्धांत रूप में) googol समय मुद्रित होता है, लेकिन यह उस पृष्ठ से जल्दी से चलता है जिसे मैंने इस पर परीक्षण किया था।

आप यहां Befunge 93 कोड चला सकते हैं । किसी कारण से, स्टैक का शीर्ष मान 1.0000000000000006e+100तब होता है जब यह होना चाहिए 1.0e+100। मुझे नहीं पता कि यह 6कहां से आया है, लेकिन मुझे नहीं लगता कि यह होना चाहिए और यह कुछ राउंडिंग त्रुटि या ऐसा कुछ हो सकता है।


4

ABCR , 56 बाइट्स

++++++++++AAAAAAAAAA7a*A!(x4bBBBBBBBBBB7b+B@(xa(Ax5b(Box

ट्यूरिंग टारपिट्स मज़ेदार हैं, खासकर जब उनके पास आसान गुणा या घातांक नहीं है। दूसरी ओर, मुझे केवल दो तीन कतारों का उपयोग करने की आवश्यकता थी!

व्याख्या:

++++++++++                                             Set register to 10
          AAAAAAAAAA                                   Queue 10 to queue A 10 times
                    7a*A!(x                            Sum up all of queue A by:
                    7     x                             While the register is truthy:
                     a*                                 Dequeue two elements of A, sum them...
                       A                                ...and queue the result back to A.
                        !(                              If there's only one element left,
                                                        i.e. !(A.len - 1),
                                                        break from the loop.  A now has 100, our exponent.

                             4                        While A's front is truthy:
                              bBBBBBBBBBB              Clone the front of B 10 (our base) times.  (The first iteration fills it up with ten 1s)
                                         7b+B@(x       Sum up all of queue B like we did with A
                                                a(A    Decrement a (so that the loop actually ends. Runs 101 times like it should) x   

                                                       B now contains 10^100 only.

                                                   5b(B x   10^100 times:
                                                       o     print the front of queue A (0)

4

बैच, 574 242 बाइट्स

@echo off
set t=for /l %%a in (2,1,33554432)do call:
set f=for /l %%a in (2,1,9765625)do call:
%t%a
:a
%t%b
:b
%t%c
:c
%t%d
:d
%f%e
:e
%f%f
:f
%f%g
:g
%f%h
:h
%f%i
:i
%f%j
:j
%f%k
:k
%f%l
:l
%f%m
:m
%f%n
:n
echo

इसलिए प्रत्येक लूप एक अतिरिक्त पुनरावृत्ति निष्पादित करता है। 32-बिट पूर्णांक सीमा के कारण लूप्स ~ 2³² तक सीमित हैं। पहले चार छोरों में से प्रत्येक 2 four की कुल संख्या के लिए 2 ten है जबकि शेष दस छोरों की गिनती प्रत्येक 5¹⁰ के लिए कुल 5 each है।

संपादित करें: @ ConorO'Brien के लिए एक अकल्पनीय 58% धन्यवाद बचा।



1
@ ConorO'Brien रुको, आप ऐसा कर सकते हैं? मैं कभी नहीं जानता था!
नील

4

टीआई-बेसिक, 20 बाइट्स

सीधा। केवल आठ लाइनें एक बार में प्रदर्शित की जाती हैं, और पिछली लाइनें स्मृति में नहीं रहती हैं। क्योंकि ᴇ100असमर्थित है, हम से पाश चाहिए -ᴇ99करने के लिए 9ᴇ99। फिर, यदि I!=0, स्ट्रिंग प्रदर्शित करें (जो, वैसे, 3 है)। इस तरह, हम इसे सटीक ᴇ100बार प्रिंट करते हैं ।

For(I,-ᴇ99,9ᴇ99:If I:Disp 3:End

क्या आप सुनिश्चित हैं कि चर "I" 99 अंकों को संग्रहीत करने के लिए पर्याप्त सटीक है?
मार्टिन रोसेनौ

ठीक है, हां, मुझे इसे धारण करने के लिए पर्याप्त होना चाहिए, हालांकि यह केवल "डिसप" का उपयोग करने पर 14 तक प्रदर्शित होगा, लेकिन हम वास्तव में इसे आउटपुट नहीं करते हैं, केवल यह जांचें कि क्या यह शून्य के बराबर नहीं है। इसके अलावा, आप प्रतीक के बारे में सही हैं, लेकिन मुझे लगा कि आप समझेंगे कि मेरा क्या मतलब है। अब मैं इसे अपनी पोस्ट में कॉपी करूँगा।
टिमटेक

मुझे अनंत पूर्णांकों के साथ BASIC के संस्करण का सामना नहीं करना पड़ा है, लेकिन इससे भी कोई फर्क नहीं पड़ता है क्योंकि आपका लूप लगभग पर्याप्त समय को निष्पादित नहीं करता है।
लोरेन Pechtel

1
उम्म हाँ, यहाँ कोई अनंत पूर्णांक नहीं है।
इंटेगर को

4

x86-64 मशीन कोड फ़ंक्शन, 30 बाइट्स।

@Level River St द्वारा C उत्तर के समान पुनरावृत्ति तर्क का उपयोग करता है । (अधिकतम पुनरावृत्ति गहराई = 100)

puts(3)फ़ंक्शन को libc से उपयोग करता है , जो सामान्य निष्पादनयोग्य वैसे भी जुड़े हुए हैं। लिनक्स या OS X पर C से x86-64 सिस्टम V ABI का उपयोग करके इसे कॉल किया जा सकता है, और ऐसा कोई भी रजिस्टर्ड नहीं करता है जिसे यह नहीं माना जाता है।


objdump -drwC -Mintel आउटपुट, स्पष्टीकरण के साथ टिप्पणी की

0000000000400340 <g>:  ## wrapper function
  400340:       6a 64                   push   0x64
  400342:       5f                      pop    rdi       ; mov edi, 100  in 3 bytes instead of 5
  ; tailcall f by falling into it.

0000000000400343 <f>:  ## the recursive function
  400343:       ff cf                   dec    edi
  400345:       97                      xchg   edi,eax
  400346:       6a 0a                   push   0xa
  400348:       5f                      pop    rdi       ; mov edi, 10
  400349:       0f 8c d1 ff ff ff       jl     400320 <putchar>   # conditional tailcall
; if we don't tailcall, then eax=--n = arg for next recursion depth, and edi = 10 = '\n'

  40034f:       89 f9                   mov    ecx,edi   ; loop count = the ASCII code for newline; saves us one byte


0000000000400351 <f.loop>:
  400351:       50                      push   rax       ; save local state
  400352:       51                      push   rcx
  400353:       97                      xchg   edi,eax   ; arg goes in rdi
  400354:       e8 ea ff ff ff          call   400343 <f>
  400359:       59                      pop    rcx       ; and restore it after recursing
  40035a:       58                      pop    rax
  40035b:       e2 f4                   loop   400351 <f.loop>
  40035d:       c3                      ret    
# the function ends here

000000000040035e <_start>:

0x040035e - 0x0400340 = 30 bytes

# not counted: a caller that passes argc-1 to f() instead of calling g
000000000040035e <_start>:
  40035e:       8b 3c 24                mov    edi,DWORD PTR [rsp]
  400361:       ff cf                   dec    edi
  400363:       e8 db ff ff ff          call   400343 <f>
  400368:       e8 c3 ff ff ff          call   400330 <exit@plt>    # flush I/O buffers, which the _exit system call (eax=60) doesn't do.

के साथ बनाया गया yasm -felf64 -Worphan-labels -gdwarf2 golf-googol.asm && gcc -nostartfiles -o golf-googol golf-googol.o । मैं मूल NASM स्रोत को पोस्ट कर सकता हूं, लेकिन यह अव्यवस्था की तरह लग रहा था क्योंकि asm निर्देश सही disassembly में हैं।

putchar@pltसे कम से कम 128 बाइट्स है jl, इसलिए मैं 6-बाइट के बजाय कूद के पास 2-बाइट छोटी कूद का उपयोग कर सकता था, लेकिन यह केवल एक छोटे से निष्पादन में सच है, एक बड़े कार्यक्रम के हिस्से के रूप में नहीं। इसलिए मुझे नहीं लगता कि मैं एफबीआईसी के पुट को लागू करने के आकार की गणना नहीं कर सकता, अगर मैं इसे हासिल करने के लिए शॉर्ट जेक एन्कोडिंग का लाभ उठाता हूं।

रिकर्सन के प्रत्येक स्तर में 24B स्टैक स्पेस (2 पुश और CALL द्वारा दिया गया वापसी पता) का उपयोग किया जाता है। हर दूसरी गहराई putcharकेवल 8 द्वारा संरेखित स्टैक के साथ कॉल करेगी , 16 नहीं, इसलिए यह एबीआई का उल्लंघन करता है। एक stdio कार्यान्वयन जो स्टैक गलती करेगा xmm रजिस्टरों को फैलाने के लिए संरेखित स्टोर का उपयोग करता है। लेकिन glibc putcharऐसा नहीं करता है, पूर्ण बफरिंग के साथ एक पाइप पर लिखना या लाइन बफरिंग के साथ टर्मिनल पर लिखना है। उबंटू 15.10 पर परीक्षण किया गया। यह एक डमी पुश / पॉप के साथ तय किया जा सकता है .loop, पुनरावर्ती कॉल से पहले एक और 8 से स्टैक को ऑफसेट करने के लिए।


सबूत है कि यह नई संख्या की सही संख्या प्रिंट करता है:

   # with a version that uses argc-1  (i.e. the shell's $i)  instead of a fixed 100
$ for i in {0..8}; do echo -n "$i: "; ./golf-googol $(seq $i) |wc -c; done
0: 1
1: 10
2: 100
3: 1000
4: 10000
5: 100000
6: 1000000
7: 10000000
8: 100000000
... output = 10^n newlines every time.

इस का मेरा पहला संस्करण 43B था, और इसका इस्तेमाल किया गया था puts() 9 नईलाइनों (और एक 0 बाइट) के बफर पर , इसलिए पुट 10 वें स्थान पर होगा। वह रिक्रिएशन बेस-केस सी प्रेरणा के भी करीब था।

फैक्टरिंग 10 ^ 100 एक अलग तरीका शायद बफर को छोटा कर सकता है, शायद 4 नईलाइन्स तक, 5 बाइट्स बचा सकता है, लेकिन पुचर का उपयोग करना अब तक बेहतर है। इसमें केवल एक पूर्णांक arg की आवश्यकता होती है, एक सूचक की नहीं, और किसी भी बफर की नहीं। सी मानक कार्यान्वयन की अनुमति देता है जहां यह एक मैक्रो है putc(val, stdout), लेकिन glibc में यह एक वास्तविक फ़ंक्शन के रूप में मौजूद है जिसे आप asm से कॉल कर सकते हैं।

10 के बजाय प्रति कॉल केवल एक न्यूलाइन को प्रिंट करने का मतलब है कि हमें 10 मिनट की सुर्खियों में आने के लिए 1 से पुनरावृत्ति अधिकतम गहराई बढ़ाने की आवश्यकता है। चूंकि 99 और 100 दोनों को एक संकेत-विस्तारित 8-बिट तत्काल द्वारा दर्शाया जा सकता है,push 100 अभी भी केवल 2 बाइट्स है।

इससे भी बेहतर, 10एक रजिस्टर में एक न्यूलाइन और लूप काउंटर दोनों के रूप में काम करता है, एक बाइट को बचाता है।

बाइट बचाने के लिए विचार

एक 32-बिट संस्करण के लिए एक बाइट को बचा सकता है dec edi, लेकिन स्टैक-आर्ग्स कॉलिंग कन्वेंशन (पुश्तैनी जैसे पुस्तकालय कार्यों के लिए) टेल-कॉल काम को आसानी से कम कर देता है, और संभवतः अधिक स्थानों में अधिक बाइट्स की आवश्यकता होगी। मैं निजी के लिए रजिस्टर-आर्ग कन्वेंशन का उपयोग कर सकता हूं f(), केवल इसके द्वारा बुलाया जाता है g(), लेकिन तब मैं पुटचार्च नहीं कर सकता था (क्योंकि f () और putchar () स्टैक-आर्ग्स की एक अलग संख्या ले जाएगा)।

यह संभव होगा कि कॉलर में सेव / रिस्टोर करने के बजाय, कॉलर की स्थिति को सुरक्षित रखें। वह शायद बेकार है, हालांकि, क्योंकि यह संभवतः शाखा के प्रत्येक पक्ष में अलग से प्राप्त करने की आवश्यकता होगी, और टेलकॉलिंग के साथ संगत नहीं है। मैंने इसे आजमाया लेकिन कोई बचत नहीं मिली।

स्टैक पर एक लूप काउंटर रखने के बजाय (लूप में पुश / पॉपिंग आरसीएक्स के बजाय) या तो मदद नहीं की। यह उस संस्करण के साथ 1B बदतर था जो पुट का उपयोग करता था, और शायद इस संस्करण के साथ नुकसान भी अधिक है जो कि आरसीएक्स को अधिक सस्ते में सेट करता है।


2
विधानसभा जवाब के लिए हुर्रे! :)

4

PHP, 44 बाइट्स

for($i=bcpow(10,1e2);$i=bcsub($i,print 1););

यह स्निपेट 1गोगोल समय का उत्पादन करेगा । यह स्मृति से बाहर नहीं चलेगा, लेकिन यह बहुत धीमा है। मैं लंबे पूर्णांकों को संभालने में सक्षम होने के लिए BCMath का उपयोग कर रहा हूं।

थोड़ा बेहतर प्रदर्शन, लेकिन उतना छोटा नहीं (74 बाइट्स):

for($m=bcpow(10,100);$m;$m=bcsub($m,$a))echo str_repeat(a,$a=min(4e9,$m));

पत्र agoogol बार आउटपुट करेगा । यह लगभग 4GB मेमोरी का उपभोग करेगा, जो एक समय में लगभग 4e9 वर्णों का उत्पादन करता है।


अगर सिर्फ एक 'ए' लगभग 4GB लेता है, तो 'आआ' क्या करेगा? यह अधिक कोड लेगा, लेकिन ob_flush () के साथ; आप बहुत आगे जा सकते हैं
Martijn

उम्म, यह एक नहीं है a, यह 4 * 10 ^ 9 aएस की एक स्ट्रिंग है । वहाँ 4GB से अधिक नहीं जाने के लिए कोई रास्ता नहीं है अगर आप aवहाँ के रूप में 3 गुना करने जा रहे हैं । Ob_flush का इससे कोई लेना-देना नहीं है, दूसरे उदाहरण का बिंदु हर बार छोटी मात्रा में वर्णों के आउटपुट के बजाय एक बार में बड़े तार का उत्पादन करना है, जिसके परिणामस्वरूप प्रोग्राम अधिक मेमोरी उपयोग की कीमत पर बहुत तेज़ी से चल रहा है।
चोकोचोस

जहाँ तक मुझे पता है "> =" बड़े पूर्णांक को संभालने में सक्षम नहीं है, तो आपको
Crypto

आप सही हैं, यह तार की तुलना करते समय सही परिणाम नहीं देता है। मैं इसे एक मिनट में ठीक कर दूंगा।
चोकोचोस

कुछ अलग लेकिन काम करने वाले समाधान के साथ संपादित करें :)
chocochaos

3

हास्केल, 45 43 बाइट्स

r 0=[]
r i='1':r(i-1)
main=putStr.r$10^100

3

Pyke, 6 5 बाइट्स

TTX^V

यहाँ कोशिश करो!

जब तक यह मेरे ब्राउज़र को क्रैश नहीं करता है पहले 4 वर्ण 10 ^ 100 उत्पन्न करते हैं और Vकई नई रूपरेखाएँ छापते हैं। के साथ टेस्ट करें100V


3

रैकेट 36 बाइट्स

(for((i(expt 10 100)))(display "1"))

आउटपुट:

1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

3

JAISBaL , 4 बाइट्स

˖Q

क्रोम सभी प्रतीकों को नहीं पढ़ सकता है, और मैं अन्य ब्राउज़रों के बारे में निश्चित नहीं हूं, इसलिए यहां एक तस्वीर है:

व्याख्या:

# \# enable verbose parsing #\
10^100       \# [0] push 10^100 onto the stack #\
for          \# [1] start for loop #\
    space    \# [2] print a space #\

बहुत आसान .... बस एक googol रिक्त स्थान प्रिंट करता है। तीन निर्देश, लेकिन गोगोल स्थिरांक दो बाइट्स है।

(संस्करण 3.0.5 में लिखा गया है)


यह 6 UTF-8 बाइट्स है। कौन सा एन्कोडिंग आप उपयोग कर रहे हैं?
कॉनर ओ'ब्रायन

"बाइट्स" इससे लिंक करता है ...
सुकराती फीनिक्स

गह, क्षमा करें। मेरे पास एक उपयोगकर्ता नाम है जो लिंक को नियमित पाठ की तरह दिखता है।
कॉनर ओ'ब्रायन

ओह, मुझे नहीं पता था कि यह संभव है, ठीक है :)
सुकराती फीनिक्स

@ ConorO'Brien उम, क्यों?
साइओस

3

जावास्क्रिप्ट ईएस 6, 85 83 बाइट्स

बच निकले 2 बाइट्स ETHproductions की बदौलत!

eval([...Array(i=100)].map(_=>`for($${--i}=0;$${i}++<10;)`).join``+"console.log()")

यह 1e100 नई सुविचारों को प्रिंट करता है।

आंतरिक भाग इस कार्यक्रम को उत्पन्न करता है, जिसके बाद इसका मूल्यांकन किया जाता है।

for($0=0;$0++<10;)for($1=0;$1++<10;)for($2=0;$2++<10;)for($3=0;$3++<10;)for($4=0;$4++<10;)for($5=0;$5++<10;)for($6=0;$6++<10;)for($7=0;$7++<10;)for($8=0;$8++<10;)for($9=0;$9++<10;)for($10=0;$10++<10;)for($11=0;$11++<10;)for($12=0;$12++<10;)for($13=0;$13++<10;)for($14=0;$14++<10;)for($15=0;$15++<10;)for($16=0;$16++<10;)for($17=0;$17++<10;)for($18=0;$18++<10;)for($19=0;$19++<10;)for($20=0;$20++<10;)for($21=0;$21++<10;)for($22=0;$22++<10;)for($23=0;$23++<10;)for($24=0;$24++<10;)for($25=0;$25++<10;)for($26=0;$26++<10;)for($27=0;$27++<10;)for($28=0;$28++<10;)for($29=0;$29++<10;)for($30=0;$30++<10;)for($31=0;$31++<10;)for($32=0;$32++<10;)for($33=0;$33++<10;)for($34=0;$34++<10;)for($35=0;$35++<10;)for($36=0;$36++<10;)for($37=0;$37++<10;)for($38=0;$38++<10;)for($39=0;$39++<10;)for($40=0;$40++<10;)for($41=0;$41++<10;)for($42=0;$42++<10;)for($43=0;$43++<10;)for($44=0;$44++<10;)for($45=0;$45++<10;)for($46=0;$46++<10;)for($47=0;$47++<10;)for($48=0;$48++<10;)for($49=0;$49++<10;)for($50=0;$50++<10;)for($51=0;$51++<10;)for($52=0;$52++<10;)for($53=0;$53++<10;)for($54=0;$54++<10;)for($55=0;$55++<10;)for($56=0;$56++<10;)for($57=0;$57++<10;)for($58=0;$58++<10;)for($59=0;$59++<10;)for($60=0;$60++<10;)for($61=0;$61++<10;)for($62=0;$62++<10;)for($63=0;$63++<10;)for($64=0;$64++<10;)for($65=0;$65++<10;)for($66=0;$66++<10;)for($67=0;$67++<10;)for($68=0;$68++<10;)for($69=0;$69++<10;)for($70=0;$70++<10;)for($71=0;$71++<10;)for($72=0;$72++<10;)for($73=0;$73++<10;)for($74=0;$74++<10;)for($75=0;$75++<10;)for($76=0;$76++<10;)for($77=0;$77++<10;)for($78=0;$78++<10;)for($79=0;$79++<10;)for($80=0;$80++<10;)for($81=0;$81++<10;)for($82=0;$82++<10;)for($83=0;$83++<10;)for($84=0;$84++<10;)for($85=0;$85++<10;)for($86=0;$86++<10;)for($87=0;$87++<10;)for($88=0;$88++<10;)for($89=0;$89++<10;)for($90=0;$90++<10;)for($91=0;$91++<10;)for($92=0;$92++<10;)for($93=0;$93++<10;)for($94=0;$94++<10;)for($95=0;$95++<10;)for($96=0;$96++<10;)for($97=0;$97++<10;)for($98=0;$98++<10;)for($99=0;$99++<10;)console.log()

अब, शुद्धता के प्रमाण के लिए, हम कुछ प्रेरण का उपयोग करेंगे। आइए अन्य मूल्यों के लिए प्रारंभिक 100 को प्रतिस्थापित करें, उदारता से एन । मेरा दावा है कि एन डालने से 10 एन न्यूलाइन्स निकलेगी। आइए इसके परिणाम को पाइप करें wc -l, जो इनपुट में नईलाइन्स की संख्या को गिनता है। हम इस संशोधित लेकिन समकक्ष स्क्रिप्ट का उपयोग करेंगे जो इनपुट N लेता है :

eval([...Array(+process.argv[2])].map(_=>`for($${i}=0;$${i++}++<10;)`,i=0).join``+"console.log()")

अब, यहाँ कुछ उत्पादन है:

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 1 | wc -l
10

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 2 | wc -l
100

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 3 | wc -l
1000

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 4 | wc -l
10000

हम देख सकते हैं कि यह इनपुट एन को छोटे मानों के लिए 10 एन न्यूलाइन्स में बदल देता है।

यहाँ N = 1 के लिए एक उदाहरण आउटपुट है :

C:\Users\Conor O'Brien\Documents\Programming
λ node googol.es6 1











C:\Users\Conor O'Brien\Documents\Programming
λ

अच्छा लगा। कुछ बाइट्स बचाएंeval([...Array(i=100)].map(_=>`for($${--i}=0;$${i}++<10;)`).join``+"console.log()")
ETHproductions

@ETHproductions धन्यवाद! : डी
कॉनर ओ'ब्रायन

पीएस I 83 बाइट्स गिनता है;)
ETHproductions

एक और उदाहरण यहाँ । यकीन नहीं होता कि यह किसी और के लिए उपयोगी है, लेकिन मुझे पूरा यकीन नहीं था कि यह कैसे काम करता है और इसके साथ खेलने के लिए eval'd फ़ंक्शन के लिए एक आवरण फ़ंक्शन लिखा है। आप कार्यक्रम को स्पष्ट रूप से 10 ^ n तक गिन सकते हैं, जहां n मूल्यांकन किए गए छोरों की संख्या है। मैंने वापसी की स्थिति निर्धारित की है, इसलिए यह गोगोल से पहले अच्छी तरह से टूट जाता है; अलग-अलग लूप स्तरों के माध्यम से गिनती करने के लिए उस स्थिति में उपयोग किए गए चर को बदलें। इसके अलावा, एक नाइटपिक: आपके दूसरे कोड के नमूने में बाहरी लूप $ 0 होना दिखाया गया है, जो $ 99 तक जा रहा है; इसे उलट दिया जाना चाहिए, जिसमें $ 99 बाहरी लूप है।
माइकल ऑक्ट

@ मिचेल सच। मुझे जो मौका मिलेगा, मैं उसे बदल दूंगा।
कॉनर ओ'ब्रायन

3

गणितज्ञ, ४hem ३० 25 बाइट्स

For[n=1,n++<Echo@1*^100,]

आउटपुट:

>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
etc.

अभी परीक्षण नहीं कर सकता, लेकिन कैसे For[n=0,n++<10^100,Echo[]]?
मार्टिन एंडर

मैं >>आउटपुट के प्रमुख भाग पर विचार करूंगा । यदि आप Echoकंसोल पर उपयोग करते हैं तो वे मुद्रित हैं ।
मार्टिन एंडर

@MartinEnder वूप्स, फिक्स्ड
लीजनमैमल 978

Echo@0&~Array~10^100;21 बाइट्स के लिए कैसे ?
ग्रेग मार्टिन

3

फोरट्रान 95, फ्री-फॉर्म, रिकर्सिव, 117 बाइट्स

Program M
Call R(99)
END
Recursive Subroutine R(L)
IF(L)3,1,1
1 DO 2 I=1,10
2 Call R(L-1)
RETURN
3 PRINT*,0
END

प्रिंट वाली रेखाओं का गोगोल बनाता है

          0

फोरट्रान 90, पुनरावर्ती, 149 बाइट्स

     CallR(99)
     END
     RecursiveSubroutineR(L)
     IF(L)3,1,1
   1 DO2I=1,10
   2 CallR(L-1)
     RETURN
   3 PRINT*,0
     END     

पुनरावर्ती रूप से 100 नेस्टेड लूप, प्रत्येक 10 पुनरावृत्तियों को कॉल करना, बिल्कुल एक गोगोल बनाता है। एन, एल, और लूप काउंटर सभी बाइट-आकार के पूर्णांक में फिट होते हैं।

99 को 1, 2, 3, 4, 5 के साथ बदलकर परीक्षण किया गया और ध्यान दिया कि प्रत्येक मामले में "wc" से परिणामी पंक्ति की संख्या n + 1 शून्य है।

फोरट्रान II, IV, 66 या 77, 231 बाइट्स:

      N=2*10**9
      DO1I0=1,5**10
      DO1I=1,N
      DO1J=1,N
      DO1K=1,N
      DO1L=1,N
      DO1M=1,N
      DO1I1=1,N
      DO1J1=1,N
      DO1K1=1,N
      DO1L1=1,N
      DO1M1=1,N
1     PRINT2
2     FORMAT(X)
      END

नई सुर्खियों का गोगोल बनाता है।

ये सभी कार्यक्रम 32-बिट मशीनों पर चलेंगे; वास्तव में, पुनरावर्ती संस्करण 16-बिट मशीन पर ठीक काम करेंगे। कोई अपने 60-बिट पूर्णांकों के साथ पुराने क्रे पर चलकर जानवर-बल संस्करण में कम छोरों का उपयोग कर सकता है। यहां, 5 * 10 (9765625) के एक लूप के अंदर 2 * 10 ^ 9 के दस नेस्टेड लूप 10 ^ 100 कुल पुनरावृत्तियों के बराबर होते हैं।

कोई भी संस्करण ऑब्जेक्ट कोड के अलावा अन्य से बोलने के लिए किसी भी मेमोरी का उपयोग नहीं करता है, काउंटर, आउटपुट स्ट्रिंग की एक प्रति और, पुनरावर्ती संस्करण में, 100-स्तरीय रिटर्न स्टैक।

तुलना करके कारकों की जाँच करें

bc<<<2000000000\^10*5\^10
bc<<<10\^100

3

ट्यूरिंग मशीन सिम्युलेटर, 1082 बाइट्स

0 * 6 r 1
1 * E r 2
2 * C r 3
3 * 1 r 4
4 * B r 5
5 * C r 6
6 * F r 7
7 * 4 r 8
8 * 6 r 9
9 * 8 r A
A * 8 r B
B * 3 r C
C * 0 r D
D * 9 r E
E * G r F
F * H r G
G * 8 r H
H * 0 r I
I * 6 r J
J * H r K
K * 9 r L
L * 3 r M
M * 2 r N
N * A r O
O * D r P
P * C r Q
Q * C r R
R * 4 r S
S * 4 r T
T * E r U
U * E r V
V * G r W
W * 6 r X
X * D r Y
Y * E r Z
Z * 0 r a
a * F r b
b * E r c
c * 9 r d
d * F r e
e * A r f
f * H r g
g * D r h
h * E r i
i * 6 r j
j * 6 r k
k * D r l
l * G r m
m * H r n
n * 1 r o
o * 0 r p
p * 8 r q
q * C r r
r * 9 r s
s * G r t
t * 3 r u
u * 6 r v
v * 2 r w
w * 3 r x
x * E r y
y * 0 r z
z * 4 r +
+ * 5 r /
/ * A r =
= * 0 r -
- * H r \
\ * 7 r !
! * A r @
@ * 9 r #
# * 5 r $
$ * A r %
% * B r ^
^ * 5 r &
& * 9 r ?
? * 4 r (
( * C r )
) * E r `
` * 9 r ~
~ * 9 r _
_ * A * .
. 0 I l *
. 1 0 r <
. 2 1 r <
. 3 2 r <
. 4 3 r <
. 5 4 r <
. 6 5 r <
. 7 6 r <
. 8 7 r <
. 9 8 r <
. A 9 r <
. B A r <
. C B r <
. D C r <
. E D r <
. F E r <
. G F r <
. H G r <
. I H r <
. _ * r ]
< _ * r >
< * * r *
> _ = l [
> * * r *
[ _ * l .
[ * * l *
] _ * * halt
] * _ r *

ट्यूरिंग मशीन सिम्युलेटर

मुझे नहीं पता कि यह सही आउटपुट के रूप में गिना जाता है, क्योंकि इसमें 82 प्रमुख स्थान हैं।

मुझे नहीं पता कि यह 4 जीबी की सीमा का सम्मान करता है, इसलिए, यदि ऐसा नहीं होता है, तो यह गैर-प्रतिस्पर्धी है और सिर्फ प्रदर्शन के लिए है। आउटपुट 1e100 बाइट्स है, इसलिए इसे मेमोरी बाइट काउंट से घटाया जाना चाहिए। अंतिम बाइट की गिनती 82 बाइट्स है।

यहाँ एक स्पष्टीकरण है:

कोड की पहली 80 लाइनें 80 अलग-अलग राज्य हैं जो आधार -19 1 लूप काउंट उत्पन्न करते हैं 6EC1BCF4688309GH806H932ADCC44EEG6DE0FE9FAHDE66DGH108C9G3623E045A0H7A95AB594CE99A

कोड की अगली 19 पंक्तियां काउंटर स्टेट होती हैं, जो हर बार एक वर्ण छपने पर गिनती को घटा देती हैं।

अगली 6 पंक्तियाँ प्रिंटर स्थिति हैं, जो एक संलग्न करती है =

अंत में, अंतिम 2 लाइनें क्लीनर स्थिति हैं, जिन्हें यह सुनिश्चित करने के लिए आवश्यक है कि केवल आउटपुट है =====...=====। अग्रणी / अनुगामी स्थान आउटपुट के रूप में नहीं गिने जाते हैं, क्योंकि वे अपरिहार्य साइड-इफेक्ट हैं।

तब कार्यक्रम रुक जाता है।

1 मैंने उसके लिए गणित किया।


2

पायथ, 7 बाइट्स

नई (प्रतिस्पर्धा)

V^T*TTG

व्याख्या

G=The alphabet
Repeat 10^(10*10) times
    print(G)

पुरानी (गैर प्रतिस्पर्धा) 7 बाइट्स

*G^T*TT

व्याख्या

G=The alphabet
G*(10^(10*10))==G*10^100

1
यह 4 GiB रीमोरी सीमा का अनुपालन नहीं करता है।
डेनिस

@ डेनिस मैंने इसे ठीक किया
डिग्निसिमस - स्पैमी

एक गोल्फ सलाह नहीं है, लेकिन मुझे नहीं लगता कि *TTयह किसी सादे से कम है 100
बाहर निकलना

2

पायथन 3, 32 बाइट्स

for i in range(10**100):print()

वैकल्पिक समाधान, 33 बाइट्स:

[print()for i in range(10**100)]

पायथन 2 में यह विशेष रूप से शानदार उत्तर है।

1
इतना नहीं, @Lembik पायथन 2 में, range(10**100)संख्याओं की एक सूची बनाता है [1, 2, 3, 4, ...], जिसके परिणामस्वरूप OverflowError: range() result has too many items। इसके xrange()बजाय एक कॉल के साथ अजगर 2 में काम करेगा , और पायथन 3 में काम करता है क्योंकि xrange()इसका नाम बदल दिया गया था range(), और range()एक सूची उत्पन्न करने वाले मूल को हटा दिया गया था।
जेम्स मर्फी

2
@JamesMurphyb हाँ मुझे पता है कि। मैं कोडगॉल्फ उत्तरों की अयोग्यता के बारे में मजाकिया बनने की कोशिश कर रहा था।

1
माफ़ करना। मुझे बहुत से एसई टिप्पणियों में हास्य पढ़ने में परेशानी होती है।
जेम्स मर्फी

2

जावा, 198 179 155 बाइट्स

import java.math.*;class a{void A(a[]x){for(BigInteger b=BigInteger.ZERO;!(b=b.add(BigInteger.ONE)).equals(BigInteger.TEN.pow(100));)System.out.print(x);}}

प्रिंटों ( x== null? null: एक स्ट्रिंग है साथ शुरू होता है [La;@या ऐसा ही कुछ) 10 100 हे में बार (हमेशा के लिए) समय।


3
आपके पास एक है class, लेकिन कोई public static void main(String[]a)विधि नहीं है। गोल्फ टिप्स के लिए के रूप में: आप की जगह ले सकता new BigInteger("0"), new BigInteger("1")और new BigInteger("10")साथ BigInteger.ZERO, BigInteger.ONEऔर BigInteger.TEN; आप के import java.math.BigInteger;साथ बदल सकते हैं import java.math.*;
केविन क्रूज़सेन

1
आयात की आवश्यकता नहीं: इसके समान कुछ काम करना चाहिए: java.math.BigInteger b=null;for(b=b.ZERO;!(b=b.add(b.ONE)).equals(b.TEN.pow(100);)System.out.print(x);
ओलिवियर ग्रेगोइरे

@ OlivierGrégoire जो मुझे NullReferenceException देता है, संभवतः इसलिए bअशक्त है।
Xanderhall

@Xanderhall आपने शायद C # में यह कोशिश की थी (क्योंकि आपने NRE कहा था, NPE नहीं)। मैं अभी जावा संस्करण का परीक्षण नहीं कर सकता, इसलिए मैं नहीं बता सकता कि क्या गलत है। किसी भी मामले में, मैंने कहा "काम करना चाहिए", "काम नहीं करेगा"। लेने के लिए विचार यह है कि आप उदाहरण के संदर्भों पर स्थिर विधि कॉल कर सकते हैं, यहां तक ​​कि अशक्त भी।
ओलिवियर ग्रेजायर

@ ओलिवियरग्रेगायर मैंने इसे जावा में आजमाया। मैं C # में कोड नहीं करता।
Xanderhall

2

जावा, 153 बाइट्स

import java.math.*;interface M{static void main(String[]a){for(BigInteger i=BigInteger.ZERO;!i.add(i.ONE).equals(i.TEN.pow(100));)System.out.print(1);}}

आउटपुट: 1e100 1s

मुझे पता है कि एक और जावा उत्तर है जो बहुत करीब है। मेरा एक मुख्य है और हालांकि अभी भी छोटा है।

यह मेरी पहली कोड-गोल्फ प्रविष्टि है। टिप्स की सराहना की।


यह लंबोदा का उपयोग करके 117 बाइट्स के लिए गोल्फ हो सकता है। आपको फिर भी आयात को शामिल करना होगा।import java.math.*;()->{for(BigInteger i=BigInteger.ZERO;!i.add(i.ONE).equals(i.TEN.pow(100));)System.out.print(1);};
शॉन वाइल्ड

@BasicallyAlanTuring वास्तव में मेरी javac मुझे यह संकलन नहीं करने देगा।
निकल्स एम।

अपने जावा को तब अपडेट करें। इसके अलावा, यह पूर्ण संकलन कोड नहीं है। बस नंगे न्यूनतम प्रवेश के लिए अनुमति दी।
शॉन वाइल्ड

@BasicallyAlanTuring गॉट जावा 8. मुझे लगता है कि कार्यों को ओपी द्वारा अनुमति नहीं है।
निकलैस एम

जो कोड मैंने आपको दिया है, वह पूरा कार्यक्रम नहीं है .. यह सिर्फ एक वैध सीजी उत्तर होने के लिए आवश्यक है।
शॉन वाइल्ड

2

पायथ, 8 7 बाइट्स

V^T100G

संपर्क

समाधान का परीक्षण छोटे आउटपुट के साथ किया जाता है, लेकिन इसे प्रिंट करना चाहिए abcdefghijklmnopqrstuvwxyz 1e100 बार ।

किसी कारण के लिए, p31343 (माल्टीसेन) ने कहा कि यह अनावश्यक था ।


पी की आवश्यकता क्यों है?
माल्टीसेन

@ मैल्टीसेन मुझे लगता है कि 4 जीबी की सीमा के कारण।
आउटगॉल्फ

क्यों? बफर के Cuz? स्वचालित रूप से फ्लश नहीं करता है?
माल्टेसन

@ माल्टीनेस मुझे पता नहीं है, ऑनलाइन दुभाषिया में तत्काल आउटपुट कार्यक्षमता नहीं है। यह फ्लश हो सकता है, यह नहीं हो सकता ...
एरिक आउटगोल्फर

इसके बिना स्थानीय रूप से काम कर रहा हैp
माल्टीसेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.