क्रिसमस क्रैकर रहस्य कैलक्यूलेटर


25

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

यहाँ छवि विवरण दर्ज करें

इस ट्रिक में 6x कार्ड होते हैं, जिन पर 4x8 ग्रिड छपे होते हैं। प्रत्येक कार्ड में पूर्णांकों का एक अलग उपसमूह होता है [1,63]। जादूगर आपको एक कार्ड से एक नंबर लेने और उस नंबर को गुप्त रखने के लिए कहेगा। जादूगर तब पूछेगा कि किस कार्ड में कितनी संख्या है। उस ज्ञान के साथ, जादूगर जादुई रूप से अनुमानित मूल संख्या को निर्धारित और प्रकट करने में सक्षम होगा ।


आउटपुट 6 मिस्ट्री कैलकुलेटर कार्ड्स का पूरा सेट निम्नानुसार है:

 1  3  5  7  9 11 13 15
17 19 21 23 25 27 29 31
33 35 37 39 41 43 45 47
49 51 53 55 57 59 61 63
 - - - - - - - - - - -
 2  3  6  7 10 11 14 15
18 19 22 23 26 27 30 31
34 35 38 39 42 43 46 47
50 51 54 55 58 59 62 63
 - - - - - - - - - - -
 4  5  6  7 12 13 14 15
20 21 22 23 28 29 30 31
36 37 38 39 44 45 46 47
52 53 54 55 60 61 62 63
 - - - - - - - - - - -
 8  9 10 11 12 13 14 15
24 25 26 27 28 29 30 31
40 41 42 43 44 45 46 47
56 57 58 59 60 61 62 63
 - - - - - - - - - - -
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
 - - - - - - - - - - -
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63

आउटपुट में एक अंतिम अनुगामी न्यूलाइन हो सकती है या नहीं भी हो सकती है। कोई अनुगामी व्हॉट्सएप नहीं होना चाहिए। प्रत्येक कार्ड को 11 -छिद्रों से अलग किया जाता है ।

  • अंतिम न्यूलाइन के साथ md5sum: 7aa2d9339b810ec62a2b90c5e11d6f4a
  • अंतिम न्यूलाइन के बिना md5sum: e9abe4e32dca3e8fbfdaa4886fc5efd2

आप में से अधिक एक विंडोज़ ओरिएंटेशन के लिए, मैं CRLFस्टाइल लाइन एंडिंग्स की भी अनुमति दूंगा । उस स्थिति में, md5s हैं:

  • अंतिम न्यूलाइन के साथ md5sum: e4f16ff9752eee2cedb5f97c7b5aec6d
  • अंतिम न्यूलाइन के बिना md5sum: 78c560eed3b83513e3080117ab5dc5fa

2
मुझे बस बबलगम जवाब का इंतजार है।
माइक ब्यूफेरेसी


क्या अग्रणी स्थान स्वीकार्य हैं?
टाइटस

@Titus क्षमा करें, नहीं, md5s दिए गए हैं, और अतिरिक्त व्हाट्सएप उन लोगों को गड़बड़ करेगा।
डिजिटल ट्रामा

जवाबों:


10

पायथन 2 , 99 96 93 91 बाइट्स

k=1
while 1:print('%2d '*7+'%2d\n')*4%tuple(n for n in range(64)if k&n),11/(k<32)*' -';k*=2

एक त्रुटि के साथ बाहर निकलता है, जिसे डिफ़ॉल्ट रूप से अनुमति दी जाती है

इसे ऑनलाइन आज़माएं! या MD5 हैश का सत्यापन करें

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

K को 1 के रूप में प्रारंभ करने के बाद , हम एक अनंत लूप दर्ज करते हैं जो निम्नलिखित कोड को निष्पादित करता है।

print('%2d '*7+'%2d\n')*4%tuple(n for n in range(64)if k&n),11/(k<32)*' -';k*=2

tuple(n for n in range(64)if k&n)नीचे दिए गए सभी गैर नकारात्मक पूर्णांक के एक टपल बनाता है 64 कि वहाँ जे वें बिट सेट, जहां j पाश की पुनरावृत्ति संख्या है, यानी, 2 j = k

('%2d '*7+'%2d\n')*4पहले प्रारूप स्ट्रिंग बनाता है '%2d %2d %2d %2d %2d %2d %2d \n', फिर इसे चार बार दोहराता है। यह प्रत्येक कार्ड के लिए एक टेम्प्लेट है, जो ट्यूल में प्रत्येक पूर्णांक को दो वर्णों (पूर्वस्पर्शी रिक्त स्थान) में रखता है, प्रत्येक स्थान को 8 पूर्णांकों के समूह को अलग करता है , और समूह स्वयं को लाइनफीड द्वारा।

अब, पायथन 2 का printकथन एक जिज्ञासु जानवर है। यह कई भाव लेता है, कॉमाटा द्वारा अलग किया जाता है, और उन्हें एक-एक करके प्रिंट करता है। यह पहली अभिव्यक्ति का मूल्यांकन करता है, इसे प्रिंट करता है, अगले भावों का मूल्यांकन करता है, इसे प्रिंट करता है, आदि जब तक कि अधिक अभिव्यक्ति नहीं रह जाती। जब तक कि अंतिम अभिव्यक्ति अल्पविराम द्वारा नहीं की जाती है, तब तक वह इसे एक पंक्तिबद्ध फ़ीड करता है। इसके अलावा, यह सभी अभिव्यक्तियों के लिए एक स्थान तैयार करता है, जब तक कि वे एक पंक्ति की शुरुआत में मुद्रित न हों।

प्रत्येक पुनरावृत्ति में, हम सबसे पहले प्रारूप स्ट्रिंग को ट्यूपल पर लागू करने का परिणाम प्रिंट करते हैं। हम एक पंक्ति की शुरुआत में हैं, इसलिए कोई स्थान नहीं है।

फिर, हम (प्रयास) का परिणाम प्रिंट करते हैं 11/(k<32)*' -'। यदि k <32 , यह भाव मूल्यांकन करता है ' - - - - - - - - - - -'। फिर से, हम एक पंक्ति की शुरुआत में हैं, इसलिए कोई स्थान नहीं है। इस अभिव्यक्ति के बाद कोई अल्पविराम नहीं है, इसलिए printएक लाइनफीड को जोड़ता है। हालाँकि, छठे पुनरावृत्ति में, k = २ = ३२ , इसलिए मूल्यांकन करने की कोशिश 11/(k<32)*' -'एक अनियोजित ZeroDivisionError उठाती है । यह लूप से बाहर निकलता है और प्रोग्राम को तुरंत समाप्त करता है।


7

सी (जीसीसी), 105 बाइट्स

o;main(i){for(;i<384;i++%64||puts(" - - - - - - - - - - -"))i&1<<i/64&&printf("%2d%c",i%64,++o%8?32:10);}

5

पायथन 2, 132 बाइट्स

for c in range(6):s=" ".join("%2d"%n for n in range(64)if n&1<<c);print"\n".join([s[24*i:24*i+23]for i in range(4)]+[" -"*11]*(c<5))

बंटवारे के दृश्यों पायथन में गुस्सा है।

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


5

जेली , 27 26 बाइट्स

Ts8GW
⁾ -ẋ11W
63RBUz0Ñ€j¢Y

इसे ऑनलाइन आज़माएं! या MD5 हैश का सत्यापन करें

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

63RBUz0Ñ€j¢Y  Main link. No arguments.

63R           Range 63; yield [1, ..., 63].
   B          Binary; convert each integer to base 2.
    U         Upend; reverse the binary representations.
     z0       Zip with filler 0; transpose rows and columns, filling gaps in
              the (non-rectangular) matrix with zeroes.
       р     Map the first helper link over the new rows.
          ¢   Yield the return value of the second helper link.
         j    Join the left result, separating by the right result.
           Y  Join the results, separating by line feeds.

Ts8G          First helper link. Argument: A (array of 1's and 0's)
T             Truth; get all indices of 1's.
 s8           Split the indices into chunks of length 8.
   G          Grid; convert the 2D array into a string, separating row items
              by spaces, rows by linefeeds, and left-padding each integer
              with spaces to equal lengths.
    W         Wrap the generated string in an array.


⁾ -ẋ11W       Second helper link. No arguments.

⁾ -           Yield " -".
   ẋ11        Repeat the string 11 times.
      W       Wrap the generated string in an array.

2
यही कारण है कि Gbuiltin गंभीरता से इस चुनौती के लिए जबर्दस्ती कर रहा है। मुझे ऐसा करने के लिए लगभग 10 बाइट्स की जरूरत थी।
DLosc

5

पिप , ४ ९ 48 44 बाइट्स

-Sध्वज के लिए कोड के 43 बाइट्स, +1 ।

Fi,6{IiP" -"X11P(sX2-#_._M2**iBA_FI,64)<>8}

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

व्याख्या

                                             s is space (preinitialized)
Fi,6{                                     }  For i in range(6):
     Ii                                      If i is nonzero (i.e. all except 1st loop):
       P" -"X11                              Print hyphens
                                 FI,64       Range(64), filtered on this function:
                          2**iBA_              2**i bitwise AND with argument (is nonzero)
                         M                   To each remaining number, map this function:
                   2-#_                        2-len(argument)
                 sX                            ^ that many spaces
                       ._                      prepended to argument
                (                     )<>8   Group list into length-8 sublists
               P                             Print (-S flag joins on space then newline)

4

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

1.upto(383){|i|print (j=i%64)<1?' -'*11+$/:"%2d%s"%[j,j+1&15>>i/256>0?' ':$/]*(j>>i/64&1)}

Ungolfed

काफी सरल। केवल एक चीज जिसे अतिरिक्त स्पष्टीकरण की आवश्यकता हो सकती है वह यह है कि किसी स्थान के बजाय एक नई रेखा के साथ एक संख्या का पालन करें। ऐसा तब होता है जब j+1%16==0पहले चार कार्ड और j+1%8अंतिम दो में == 0 होता है। इसलिए अभिव्यक्ति 15>>i/64/4या समकक्ष 15>>i/256यह jनिर्धारित करने के लिए है कि अंतरिक्ष या नई रेखा की आवश्यकता है।

1.upto(383){|i|                              #Count starting at 1 instead of 0 to supress - -  before 1st card
  print (j=i%64)<1?                          #j=number to consider for card. If 0,
    ' -'*11+$/:                              #print - - -... else print
     "%2d%s"%[j,j+1&15>>i/256>0?' ':$/]*     #j formatted to 2 spaces followed by a space (or if j+1 divisible by 16 or 8 depending on card, a newline.) 
     (j>>i/64&1)                             #only print appropriate numbers for this card, i.e. when this expression evaluates to 1
}


2

पर्ल 6 ,  194 116  86 बाइट्स

put join "\n{' -'x 11}\n",map {join "\n",.[^32].rotor(8)».fmt('%2s')},(1,3...63),(2,{|($_ X+1,4)}...*),(4,{|($_ X+1,2,3,8)}...*),(8,{|((1...7,16)X+$_)}...*),(16,{|((1...15,32)X+$_)}...*),32..63

कोशिश करो

for 1..383 {print !($/=$_%64)??"{' -'x 11}\n"!!$/+>($_/64)%2??$/.fmt('%2d')~(($/+1)+&(15+>($_/256))??' '!!"\n")!!''}

कोशिश करो

for 1..383 {$_%64||put ' -'x 11;$_+&(1+<($_/64))&&printf "%2d%c",$_%64,++$/%8??32!!10}

कोशिश करो

( MD5 परिणामों के लिए डीबग अनुभागों की जाँच करें )
पिछले दो को रूबी और सी कार्यान्वयन से प्रेरित / प्रसारित किया गया था


2

05AB1E , 71 बाइट्स

63L©DÉÏ®À2ô®ÉÏ®ÀÀÀ4ô®ÉÏ®Á8ô®ÈÏ63®Á16ô®ÈÏ63D32sŸ)˜32ôvy8ôvy.B}„ -11×})¨»

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

इस दृष्टिकोण, यह कोशिश मत करो। ईमानदार होने के लिए शर्म की बात है। मैट्रिक्स हेरफेर मेरा मजबूत सूट नहीं है इसलिए मैंने सभी 6 दृश्यों को बल देने की कोशिश की और फिर उन्हें एक साथ धीरे से पंप किया।


TFW आप वर्षों पहले you (o_o) / own से अपना जवाब देखते हैं।
मैजिक ऑक्टोपस Urn

1

बैच, 249 बाइट्स

@echo off
set s=
for %%i in (1 2 4 8 16 32)do for /l %%j in (0,1,63)do call:c %%i %%j
exit/b
:c
if %2==0 if %1 gtr 1 echo  - - - - - - - - - - -
set/an=%1^&%2
if %n%==0 exit/b
set n=  %2
set s=%s%%n:~-3%
if not "%s:~23%"=="" echo%s%&set s=

एक अनुगामी CRLF आउटपुट करता है।


1
@DigitalTrauma सबसे अच्छा तरीका है कि इसे आज़माने के लिए वास्तव में वाइन ( askubuntu.com/a/54271 ) की आवश्यकता होती है या आप एक VM ( डेवलपर .microsoft.com/en-us/microsoft-edge/tools/vms ) डाउनलोड करते हैं (मैं आपको सलाह देता हूं) अंतरिक्ष को बचाने के लिए IE8 के साथ विंडोज 7 डाउनलोड करें। या विंडोज एक्सपी + आईई 6 वीएम पर अपने हाथों को प्राप्त करने का प्रयास करें)
इस्माइल मिगुएल

1

जावास्क्रिप्ट (ईएस 6), 103 102 बाइट्स

f=(k=1,n=z=0)=>n>>6?k>>5?'':' -'.repeat(11)+`
`+f(k*2):(n&k?(n>9?'':' ')+n+`
 `[++z&7&&1]:'')+f(k,++n)

MD5: 7AA2D9339B810EC62A2B90C5E11D6F4A

परीक्षा


1

बैश / यूनिक्स उपयोगिताओं, 125 124 बाइट्स

b='- - - - ';for ((x=1;x<33;x*=2));{ for n in {0..63};{ ((x&n))&&printf \ %2d $n;};echo $b$b$b;}|fold -w24|sed -e\$d -es/.//

संपादित करें: अंत में regex से एक अनावश्यक ^ को हटा दिया गया; रेगेक्स हमेशा वैसे भी लाइन की शुरुआत में मैच करेगा।


1

PHP, 102 बाइट्स

for(;$c<6;$n%32||$c+=print str_pad("
",25," -"),$n%2**$c||$b+=1<<$c)printf("
"[$n++%8]."%3d",++$b%64);

प्रिंट करता है एक प्रमुख लेकिन कोई अनुगामी newline, और प्रत्येक पंक्ति में एक अग्रणी स्थान। इसे ऑनलाइन चलाएं -nrया इसके लिए प्रयास करें

PHP <5.6 के लिए, के 2**$cसाथ बदलें (1<<$c)। PHP 5.5 &~1<<$c?:इसके बजाय उपयोग कर सकता है %2**$c||
PHP <5.5 के लिए, के "\n"[$n++%8]साथ बदलें($n++%8?"":"\n")


अग्रणी स्थान के कारण डैश एक वर्ण बंद है; पहले के लिए एक स्थान संलग्न करेंstr_pad पैरामीटर को ठीक (दूसरी कोड लाइन से पहले एक स्थान डालें)।

इसके बजाय अग्रणी स्थान को हटाने के लिए कुछ फ़िडलिंग और तीन अतिरिक्त बाइट्स की आवश्यकता होती है: printf("%c%2d",$n++%8?32:10,++$b%64);और 23इसके बजाय 25

अग्रणी न्यूलाइन को एक अनुगामी में बदलने से एक और तीन बाइट्स खर्च होंगे:

for(;$c<6;$n%32||$c+=print str_pad("",22," -")."
",$n%2**$c||$b+=1<<$c)printf("%2d%c",++$b%64,++$n%8?32:10);

PHP, 109 बाइट्स

for($c=1;~$c&64;$n%32||$c<<=print str_pad("",22," -")."
",$n%$c||$b+=$c)printf("%2d%c",++$b%64,++$n%8?32:10);

सभी स्पेक्स से मेल खाता है और सभी PHP संस्करणों के साथ काम करता है।


1

पायथन 2 , 89 बाइट्स

i=0;exec"print('%2d '*7+'%2d\\n')*4%tuple(j for j in range(64)if j&2**i)+' -'*11;i+=1;"*6

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

स्पष्टीकरण:

# initialize outer counter variable
i=0
           # generate a formatting string for a single row of numbers
           # %2d will left pad an integer with spaces, up to string length 2
           # the \\n is so that exec will interpret it as a character rather than a literal line break
           '%2d '*7+'%2d\\n'
          # create a formatting string of 4 lines of 8 numbers
          (.................)*4
                               # format the string with a generated tuple of numbers that have a 1 in the current bit slot
                               # (or more literally, bitwise j AND 2^i is not zero)
                               %tuple(j for j in range(64)if j&2**i)
                                                                    # add the perforation break
                                                                    +' -'*11
     # print the generated string, then increment the counter
     print..................................................................;i+=1
# execute the following statements 6 times
exec"............................................................................."*6

अच्छा है, सिवाय `- - -` विभाजक केवल कार्ड के बीच दिखाई देना चाहिए और अंत में एक अतिरिक्त नहीं।
डिजिटल ट्रामा

@DigitalTrauma डांग, और मैं भी डेनिस की तुलना में एक छोटे से बाइटकाउंट पाने का SO PROUD था। यह इंगित करने के लिए धन्यवाद, थो!
त्रिगुटर्नोमेट्री

1

05AB1E , 29 बाइट्स

63L2вíƶ0ζε0K8ô§2j»}„ -11׶.øý

पोर्ट @Emigna के 05AB1E उत्तर से पोर्ट करें , जिसके बाद मैंने इस चुनौती में आवश्यकताओं के अनुसार इसे प्रिंट करने के लिए अतिरिक्त कोड जोड़ा।

इसे ऑनलाइन आज़माएं या md5sum सत्यापित करें

स्पष्टीकरण:

63L          # Create a list in the range [1,63]
   2в        # Convert each number to binary as lists of 0s and 1s
     í       # Reverse each binary list
      ƶ      # Multiply each binary digit by its 1-based index [1,length] (so [1,63])
       0ζ    # Zip/transpose; swapping rows/columns, with "0" as filler
ε            # Map each inner list to:
 0K          #  Remove all 0s
   8ô        #  Split it into (four) lists of size 8
     §       #  Cast each integer to string (bug, shouldn't be necessary..)
      2j     #  And pad leading spaces to make each string size 2
        »    #  Join the inner lists by spaces, and then all strings by newlines
}„ -         # After the map: push string " -"
    11×      # Repeated 11 times to " - - - - - - - - - - -"
       ¶.ø   # Surround it with newlines: "\n - - - - - - - - - - -\n"
          ý  # And join the mapped strings with this delimiter-string
             # (after which the result is output implicitly)

0

जावास्क्रिप्ट, 234 बाइट्स।

for(a=[[],[],[],[],[],[]],i=1;i<64;i++)for(j=0;j<6;j++)i&2**j?a[j].push(i<10?" "+i:i):0;for(j=0;j<6;j++){for(s=[],i=0;i<4;)s.push(a[j].slice(i*8,++i*8).join(" "));b=s.join(n="\n");a[j]=b.substr(0,b.length)};a.join(n+" -".repeat(11)+n)

मैं बाद में स्पष्टीकरण लिखूंगा।

यदि console.logआवश्यक हो, तो बाइट गिनती 247 बाइट होगी।


साइट पर आपका स्वागत है! क्या आप अपना आउटपुट किसी ऐरे में डाल रहे हैं? मैं जावास्क्रिप्ट नहीं जानता, लेकिन आपको लॉग इन करने की आवश्यकता होगी क्योंकि आप एक चर के माध्यम से आउटपुट नहीं कर सकते।
गेहूं जादूगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.