मुद्रण योग्य ASCII से संबंधित प्रफुल्ल परफेक्ट पैंग्राम कार्यक्रम


23

अपडेट: समय सीमा हटा दी गई। आपको आउटपुट का वर्णन करने में सक्षम होना चाहिए - नया नियम देखें।

एक पैंग्राम एक वाक्य है जो वर्णमाला में हर अक्षर का कम से कम एक बार उपयोग करता है, जैसे:

तेज, भूरी लोमडी आलसी कुत्ते के उपर कूद गई।

एक सही पैंग्राम हर अक्षर का एक बार उपयोग करता है।

उस प्रोग्राम को लिखने के बारे में विचार करें, जो 95 मुद्रण योग्य ASCII वर्ण (हेक्स कोड 20 से 7E) वर्णमाला के रूप में उपयोग करते हुए एक परिपूर्ण पैंग्राम है:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

इस तरह के कार्यक्रम में वास्तव में एक बार होने वाले प्रत्येक मुद्रण योग्य ASCII चरित्र के साथ, ठीक 95 वर्ण होने चाहिए, लेकिन किसी भी क्रम में। (इस प्रकार 95 हैं! = 1.03 × 10 148 संभावनाएँ।)

आपका कार्य इस कार्यक्रम को लिखना है, ताकि प्रिंटआउट ASCII वर्णों की संख्या stdout में मुद्रित हो सके, जहां तक ​​संभव हो (यानी विपुल)।

आपका स्कोर मुद्रण योग्य ASCII वर्णों की संख्या है जो आपके प्रोग्राम आउटपुट ( कुल राशि, अलग-अलग राशि नहीं है: AABCस्कोर 4 जबकि ABCस्कोर 3) । सबसे ज्यादा अंक जीते।

विवरण

  • आउटपुट में कोई भी वर्ण (डुप्लिकेट सहित) हो सकता है, लेकिन 95 मुद्रण योग्य ASCII वर्णों के केवल उदाहरण आपके स्कोर की ओर गिनते हैं।
    • आप किसी भी स्ट्रिंग में मुद्रण योग्य ASCII वर्णों की संख्या की गणना करने के लिए इस JSFiddle का उपयोग कर सकते हैं ।
  • यदि आपकी भाषा में स्टडआउट नहीं है, तो सबसे उपयुक्त विकल्प का उपयोग करें।
  • आपका कार्यक्रम ...
    • परिमित रनटाइम होना चाहिए (समय सीमा हटा दी गई है)
    • परिमित उत्पादन होना चाहिए
    • टिप्पणी हो सकती है
    • संकलन करना चाहिए और बिना (अनियोजित) त्रुटियों के चलाना चाहिए
    • इनपुट के लिए संकेत देना चाहिए या नहीं चाहिए
    • समय अपरिवर्तनशील और निर्धारक होना चाहिए
    • बाहरी पुस्तकालयों का उपयोग नहीं करना चाहिए
    • नेटवर्क कनेक्शन की आवश्यकता नहीं होनी चाहिए
    • बाहरी फ़ाइलों का उपयोग नहीं करना चाहिए
      • (आप प्रोग्राम फ़ाइल का उपयोग तब तक कर सकते हैं जब तक कि फ़ाइल का नाम बदलने से प्रोग्राम का व्यवहार बदल न जाए)
  • यदि यह कार्य असंभव है तो कुछ भाषा ऐसी है जो बहुत ही खराब है।
  • आपको अपना सटीक आउटपुट देना होगा या ठीक-ठीक वर्णन करना होगा कि क्या वह किसी पोस्ट में फिट होने के लिए बहुत बड़ी है । आपको वास्तव में अपना प्रोग्राम नहीं चलाना है। जब तक यह होता स्मृति के एक असीम राशि के साथ एक कंप्यूटर पर समय की एक निश्चित राशि में चला यह वैध है।

उदाहरण

यह सरलीकृत पायथन 2 कार्यक्रम एक संभावित समाधान है:

print 9876543210#!"$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjklmoqsuvwxyz{|}~

यह आउटपुट 9876543210करता है जिसमें 10 मुद्रण योग्य ASCII वर्ण होते हैं, इस प्रकार 10 स्कोरिंग होते हैं।


14
जब तक अनुप्रास दिखाई देता है, आश्चर्यजनक रूप से सराहनीय है, पैंग्राम बस एक शक्तिशाली पंच पैक करते हैं, क्योंकि वे काफी अप्रिय हैं।
ज्योबिट्स

2
मैं सिर्फ कुल-विशिष्ट नियम को भी फिर से लिखता हूं। मैं पहले इस पर स्किम कर चुका था, यह स्पष्ट रूप से एक अलग-कुल-कुल नियम नहीं था क्योंकि विकल्प में aछह चतुर्भुज बार पत्र को प्रिंट करने जैसे बेतुके निर्माण हो सकते हैं , जहां पर एक सटीक ऊपरी सीमा प्राप्त करना भी संभव नहीं है। अक्षर गणना। वैसे भी, मुझे अपने 95 पर अब भी गर्व है, भले ही यह एक प्रकार का छोटा ही क्यों न हो। आकार सब कुछ नहीं है, आप जानते हैं।
सीओटीओ

आपको क्या लगता है कि HQ9 + में यह कार्य असंभव है?
पीटर टेलर

मैं FORTRAN में प्रयास करने और ऐसा करने जा रहा हूं (इसलिए मैं मामले का उपयोग असंवेदनशीलता कर सकता हूं)। --- और वह। मुझे 4 बार ओ अक्षर की आवश्यकता है: कार्यक्रम की घोषणा के लिए 2 बार और मेरी लूप घोषणा के लिए 2 बार।
नजल्ल

1
@ डेनिस नंबर ५ ममोर
केल्विन के

जवाबों:


12

गोल्फस्क्रिप्ट, 2 ↑↑↑ (9871 char 2) से अधिक

2 9871.?,{;0$[45)63]n+*~}/
#!"%&'(-:<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ\^_`abcdefghijklmopqrstuvwxyz|

एक पूर्णांक प्रिंट करता है। असीमित सीपीयू रजिस्टर आकार (जो रूबी में अधिकतम स्ट्रिंग लंबाई निर्धारित करता है), मेमोरी और रन टाइम का लाभ उठाएं । लाइनफीड पूरी तरह से पठनीयता के लिए है।

कोड

2             # Push 2.
9871.?        # Push b := 9871↑↑2 = 9871↑9871 = 9871**9871.
,{            # For each i from 0 to b - 1:
  ;0$         #   Discard i and duplicate the integer on the stack.
  [45)63]n+*  #   Replicate ".?\n" that many times.
  ~           #   Evaluate.
 }/           #

स्कोर

परिभाषित करें b = 9871 ( 2 ( नुथ के अप-एरो नोटेशन देखें )।

  • ।? एफ निष्पादित करता है: x ↑ x ↦ x

  • आंतरिक ब्लॉक g: x x f x (x) निष्पादित करता है ।

    चूँकि f (x) = x = x = x f 2 , f 2 (x) = (x ↑ x) ↑ (x ↑ x)> x ↑ x ↑↑ x = x , 3 ,
    f 3 (x) = ((x (x) ↑ (x) x)) (((x ↑ x) ↑ (x (x))> (x ↑ x ↑ x) ↑ (x ↑ x) x) x x x ↑ x ↑ x ↑ x = x = 4 और इसके बाद, हमारे पास
    g (x)> x x (x + 1)> x ↑↑ x है

  • बाहरी ब्लॉक h: x b g b (x) निष्पादित करता है ।

    चूंकि g (x) = x = x = x g 2 , g 2 (x) = (x ↑↑ x) ↑↑ (x ↑↑ x)> x ↑↑ x = x = x = 3 ,
    g 3 (x) = (((x ↑↑ x) x (x) x)) ↑↑ ((x ↑↑ x) ↑↑ (x) x))> (x ↑↑ x x) x)) (x ↑↑ x ↑↑ x)> x ↑↑ x ↑↑ x = x = x ↑↑↑ 4 और इसके बाद, हमारे पास h (x)> x ↑↑↑ (b + 1) है

  • हम स्टैक पर पूर्णांक 2 से शुरू करते हैं , इसलिए कोड h (2)> 2 ↑↑↑ (b + 1) की गणना करता है

  • स्कोर h (2) के दशमलव अंकों की संख्या है , जो लॉग (h (2)) + 1> लॉग (2 1 (b + 1))> 2। B है

इस प्रकार, स्कोर 2 ↑↑↑ (9871। 2) से बड़ा है ।

2 n n बड़े होने पर एक हास्यास्पद गति से बढ़ता है । 2 ↑↑ 4: = 2 ↑↑ 2 ↑↑ 2 2 2 = 2 ↑↑ 2 = 4 = 2 which 65536 , जो 2 की 65536 प्रतियों का एक सही-सहयोगी शक्ति टॉवर है :

                                                                2 ↑↑↑ 4                                                                 

इसी तरह, 2 ↑↑↑ 5: = 2 ↑↑ (2 ↑↑↑ 4) , के एक ऊर्जा टावर है जो 2 ↑↑↑ 4 की प्रतियां 2

अब, स्कोर 2 or 4 या 2 it's 5 नहीं है , यह 2 where b से बड़ा है , जहाँ b> 2 × 10 39 428 है । यह एक बड़ी संख्या है ...


@DigitalTrauma - आपको मेरी जांच करनी चाहिए;)
ऑप्टिमाइज़र

@ डेनिस - यह लगभग कितना है?
ऑप्टिमाइज़र

@Optimizer तुम मुझे मिल गया ;-)
डिजिटल ट्रॉमा

बहुत बढ़िया! यह मुझे ग्राहम की संख्या की याद दिलाता है ... यह बड़ा है!
फिर से लिखा

3
ध्यान दें कि, जबकि यह सैद्धांतिक रूप से बहुत बड़ी संख्या में शून्य को प्रिंट करना चाहिए, व्यवहार में यह सिर्फ दुभाषिया को क्रैश करता है in `*': bignum too big to convert into `long' (RangeError)
इल्मरी करोनें

22

पर्ल, 70 * 18446744073709551615 * 10 ^ 987654320

say q{!"#%&'+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\]^_`bcdfghijklmnoprtuvwz|}x(1e987654320*~$[)

आउटपुट:

!"#%&'+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\]^_`bcdfghijklmnoprtuvwz|

बार-बार 18446744073709551615 * 10 ^ 987654320 बार।

$[डिफ़ॉल्ट रूप से है 0, इसलिए ~$[इसके बराबर है 18446744073709551615

एक साइड नोट के रूप में, मैं नंबर बनाने की कोशिश करते हुए मेमोरी से बाहर चला गया 10^987654320


पुराना उत्तर (7703703696):

say qw(!"#$%&'*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdefghijklmnoprtuvz{|}~10)x98765432

आउटपुट है:

!"#$%&'*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdefghijklmnoprtuvz{|}~10

98765432 बार दोहराया।

नोट: सभी नमूनों को चलाएं perl -Mbignum -E


अच्छा! लेकिन मुझे आश्चर्य है कि अगर कोई पुनरावृत्ति का उपयोग कर सकता है ... (अपने आप को कॉल करने के लिए संभव नहीं है अगर आपको अपने नाम का उपयोग करना है, क्योंकि यह नाम में वर्णों के नीचे होगा ... लेकिन आपके फ़ंक्शन का नाम $ _ में समाप्त नहीं हो सकता है या पर्ल के अन्य चर?) .. या $ 0 कॉल का उपयोग चतुराई से (ढेर को भरे बिना)
ओलिवियर डुलैक

यदि आपके पास पर्याप्त मेमोरी है, तो आप कर सकते हैंperl -E'say qw{m}x(9876543210*ord$")'
hmatt1

2
यदि यह मदद करता है तो अब समय या मेमोरी सीमा नहीं है।
केल्विन के शौक

2
यह दुर्भाग्यपूर्ण है कि प्रतिक्षेप के लिए पर्ल ^ के बजाय ** का उपयोग करता है।
मार्क

11

बैश + कोर्यूटिल्स, 151,888,888,888,888,905 (1.5 * 10 ^ 17)

seq 9E15;#\!%*+,-./2346780:=@ABCDFGHIJKLMNOPQRSTUVWXYZ]^_abcdfghijklmnoprtuvwxyz~"'$&()?<>`{}|[

आउटपुट पूर्णांक 1 से 9x10 15 , एक प्रति पंक्ति। लम्बा समय लगाया।

क्यों 9E15? यह पता चला है कि जीएनयू seqआंतरिक रूप से 64-बिट फ्लोट्स (डबल) का उपयोग करता है। सबसे बड़ी पूरी संख्या हम इस प्रकार के साथ प्रतिनिधित्व कर सकते हैं, एक की कमी के कारण वेतन वृद्धि से पहले, सटीक की कमी के कारण काम करना बंद हो जाता है, 2 53 या 9007199254740992 है। घातांक संकेतन के साथ हम निकटतम हो सकते हैं 9E15 या 9000000000000000।

स्कोर की गणना करने के लिए, मैं दिए गए अंकों की संख्या के साथ सभी संख्याओं को जोड़ने और 9E15 को जोड़ने का उपयोग कर रहा हूं, क्योंकि प्रत्येक संख्या के बीच एक नई रेखा है:

8000000000000001*16 + 900000000000000*15 + 90000000000000*14 + 9000000000000*13 + 900000000000*12 + 90000000000*11 + 9000000000*10 + 900000000*9 + 90000000*8 + 9000000*7 + 900000*6 + 90000*5 + 9000*4 + 900*3 + 90*2 + 9 + 9000000000000000

मैं इस आउटपुट odको परिमाण के अतिरिक्त क्रम के लिए पाइप कर सकता हूं , लेकिन इससे स्कोर गणना बहुत कठिन हो जाती है।


नियम-पूर्व परिवर्तन का उत्तर:

बैश + कोर्यूटिल्स, 18,926,221,380

seq 1592346780;#\!%*+,-./:=@ABCDEFGHIJKLMNOPQRSTUVWXYZ]^_abcdfghijklmnoprtuvwxyz~"'$&()?<>`{}|[

आउटपुट 1 से 1592346780. मेरी मध्य 2012 की मैकबुक पर (जो लिंक बेंचमार्क से बहुत दूर नहीं है), इसमें लगभग 9m45 लगते हैं।

मैं इसे और अधिक अनुकूलित करने का विरोध नहीं कर सका, भले ही इसका अर्थहीन हो।

आउटपुट:

$ time ./pangram.sh | wc
 1592346780 1592346780 18926221380

real    9m46.564s
user    11m7.419s
sys 0m10.974s
$ 

तुम क्यों नहीं कर रहे seq 9876543210;हो
डुर्रोन 597

@ durron597 क्योंकि इसमें बहुत समय लगता है - शायद एक घंटे के बारे में। इसे 10 मिनट के भीतर पूरा करना होगा।
डिजिटल ट्रॉमा

लेकिन निश्चित रूप से इस कार्यक्रम का एकमात्र सीमित कारक i / o है ... किसी भी अन्य भाषा में कोई भी अन्य कार्यक्रम वास्तव में इसे हरा नहीं सकता है।
डुर्रोन 597

@ durron597 हाँ, मुझे लगता है कि यह सही है। हालांकि मुझे आश्चर्य नहीं होगा अगर इस समुदाय में कोई व्यक्ति एक चालाक तरीका पाता है ...
डिजिटल ट्रॉमा

1
@DigitalTrauma मैं वास्तव में यह सुनिश्चित करने के लिए समय सीमा को हटा रहा हूं कि यह उत्तर नहीं है (कोई अपराध नहीं है जो मैं चाहता हूं कि प्रतियोगिता इतनी जल्दी खत्म न हो: पी), इसलिए उपयोग करने के लिए स्वतंत्र महसूस करें 9876543210। आप नया अंतिम नियम पढ़ना चाह सकते हैं।
केल्विन के शौक

6

गोल्फस्क्रिप्ट, Script 3 * 10 ^ (2 * 10 ^ 7) अर्थात 200 3x10 20000000

 87 9654321?,`0${;.p}/#!"%&'()*+-9:<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnoqrstuvwxyz|~

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

87 9654321?                "Pushes 87^9654321 to stack";
           ,               "Pushes an array [0, 1, 2 ... (87^9654321) - 1] to stack";
            `              "Creates a string representation of the array like "[0 1 2...]";
             0$            "Copies the string";
               {;.p}/      "Print the string wrapped in quotes X times";
                     #...  "This is all comment";

यहाँ Xसरणी के स्ट्रिंग प्रतिनिधित्व की वर्ण गणना (लंबाई) है [0, 1, 2..,(87^9654321) - 1]जो इस प्रकार होगी[0 1 2 3 4 ... (87^9654321) - 1]

मैं Xयहां गणना करने की कोशिश कर रहा हूं ताकि मेरा स्कोर मिल सके। दशमलव अंकों के साथ (87^9654321) - 1मोटे तौर पर है ।10^(10^7.272415829713899)18724742

Xमोटे तौर पर केवल 3*10^(2*10^7)इतना X*Xही नहीं है। ध्यान दें कि ये मूल्य बहुत कम पक्ष पर हैं क्योंकि (यहां तक ​​कि) वुल्फराम की गणना सीमाओं के कारण , मैं गणना करने में सक्षम नहीं था sum (floor(log10(x)) + 1) for x = 1 to (87^9654321 - 1)जो कि वास्तविक मूल्य हैX


सिद्धांत रूप में, इसे बनाने के कुछ तरीके भी होंगे, लेकिन दुख की बात यह है कि रूबी के बिगनेम की सीमाएं हैं और 87 9654321?बस है Infinity
डेनिस

ओह! ? क्या आप अधिकतम जानते हैं? ;)
ऑप्टिमाइज़र

बिल्कुल नहीं। मशीन पर निर्भर होने लगता है, क्योंकि पूर्णांक को रैम में फिट होना होता है। अनबाउंड मेमोरी के साथ, मुझे नहीं पता कि सीमा कहां होगी। शायद 2**(2**64)-164-बिट रूबी के लिए।
डेनिस

हमारे पास
ऑप्टिमाइज़र

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

4

MATLAB, 95

कोड

char(37-5:126)% !"#$&'*+,./0489;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefgijklmnopqstuvwxyz{|}~

उत्पादन

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

आउटपुट में सभी निर्दिष्ट ASCII वर्ण हैं, प्रत्येक बिल्कुल एक बार, और क्रम में।


1
दर्शकों के लिए ध्यान दें: यह जवाब तब प्रस्तुत किया गया था जब विशिष्ट पात्रों को अधिकतम करने के लिए कहा गया था । यह अब लक्ष्य नहीं है, लेकिन यह ठीक है अगर यह उत्तर वैध है।
केल्विन के शौक

2

रूबी, 89

p %q{!"#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnorstuvwxyz|~}

आउटपुट:

"!\"\#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnorstuvwxyz|~"

सभी ASCII वर्ण सिवाय शामिल हैं, p, , %, q, {, और }


1
दर्शकों के लिए ध्यान दें: यह जवाब तब प्रस्तुत किया गया था जब विशिष्ट पात्रों को अधिकतम करने के लिए कहा गया था । यह अब लक्ष्य नहीं है, लेकिन यह ठीक है अगर यह उत्तर वैध है।
केल्विन के शौक 16

2

गोल्फस्क्रिप्ट, 93

{ !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz|~}

आउटपुट:

{ !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz|~}
}

को छोड़कर सभी ASCII वर्ण हैं "और '


6
आप कार्यक्रम सही पंग्राम नहीं है, हालांकि, क्या यह है? यह "या 'तो शामिल नहीं लगता है ।
मार्टिन एंडर

दर्शकों के लिए ध्यान दें: यह जवाब तब प्रस्तुत किया गया था जब विशिष्ट पात्रों को अधिकतम करने के लिए कहा गया था । यह अब लक्ष्य नहीं है, लेकिन अगर यह वैध बना है तो यह जवाब ठीक है।
केल्विन के शौक

1
नए नियमों के तहत इसे वैध बनाना काफी आसान है: बस #इसकी वर्तमान स्थिति को हटा दें और #"'अंत में संलग्न करें। हालांकि एक-एक करके स्कोर गिर जाएगा।
इल्मरी करोनन

2

गोल्फस्क्रिप्ट - 27 * 2 6543 9870

यह मेरी पहली गोल्फस्क्रिप्ट सबमिशन है! :)

12,`{.+}6543 9870?*#!"$%&'()-/:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz|~

स्पष्टीकरण:

12,                     - Creates an array of ascending numbers from 0 to 11
   `                    - Converts the array to a string
    {.+}                - Duplicates the string on the stack and concatenates the two
        6543 9870?      - Calculates 6543^9870 and pushes it to the stack
                  *     - Repeat the block 6543^9870 times
                   #... - The rest is a comment

आउटपुट संख्याओं की सूचियों का भार है। निम्नलिखित कोड पर विचार करें:

12,`{.+}1*

इसके साथ 12,यह निम्नलिखित सरणी का उत्पादन करता है:

[0 1 2 3 4 5 6 7 8 9 10 11]

बैकटिक एक स्ट्रिंग में बदल जाता है, इसे ब्लॉक में पास करता है {.+}। यह स्ट्रिंग को डुप्लिकेट करता है और फिर दोनों का निर्माण करता है:

[0 1 2 3 4 5 6 7 8 9 10 11][0 1 2 3 4 5 6 7 8 9 10 11]

1*दुभाषिया पिछले ब्लॉक एक बार (2 निष्पादित करने के लिए कहता है 1 = 2)।

तो, उस पर आधारित:

 12,`{.+}n*

12,`2 एन बार के आउटपुट को आउटपुट करता है ।

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