ASCII माया संख्या


21

एक प्रोग्राम या फ़ंक्शन लिखें, जो इनपुट के रूप में एक सकारात्मक पूर्णांक देता है, माया अंकों में उस पूर्णांक के प्रतिनिधित्व को आउटपुट करता है ।

माया अंक

माया अंक केवल 3 प्रतीकों का उपयोग करके एक विगेसिमल सिस्टम (बेस 20) है:

  • < >के लिए शून्य (सही प्रतीक खोल है कि आसानी से ASCII का उपयोग कर नहीं दर्शाया जा सकता किसी प्रकार का होता है)।
  • .के लिए एक
  • ----के लिए पांच

संख्याओं को 20 की शक्तियों में लंबवत लिखा जाता है, और 0 और 19 के बीच की संख्या को पत्नियों और लोगों के ढेर के रूप में लिखा जाता है । आप अधिक विवरण के लिए विकिपीडिया लेख देखें।

एक उदाहरण के रूप में, यहाँ 0 और 25 के बीच संख्याएँ हैं, जिन्हें अल्पविराम द्वारा अलग किया गया है:

                                                                                 .    ..  ...  ....
                                                        .    ..  ...  .... ---- ---- ---- ---- ----  .    .    .    .    .    .
                               .    ..  ...  .... ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
<  >, .  , .. ,... ,....,----,----,----,----,----,----,----,----,----,----,----,----,----,----,----,<  >, .  , .. ,... ,....,----

इनपुट

  • इनपुट हमेशा 0 और 2147483647 (2 ^ 31 - 1) के बीच सकारात्मक पूर्णांक होते हैं।
  • आप कमांड लाइन तर्क, फ़ंक्शन पैरामीटर या समान कुछ के रूप में STDIN से इनपुट ले सकते हैं।

आउटपुट

  • प्रत्येक पंक्ति अधिकतम 4 वर्णों पर है। < >और ----हमेशा यहां दिए गए के रूप में मुद्रित किया जाना चाहिए (4 अक्षर लंबे प्रत्येक)।
  • प्याज ( .) लाइन पर केंद्रित होना चाहिए। यदि 1 या 3 हैं ., तो सही क्षैतिज संरेखण असंभव है, इससे कोई फर्क नहीं पड़ता कि वे एक स्तंभ बाईं ओर हैं या एक स्तंभ दाईं ओर या केंद्र में हैं।
  • 20 की शक्ति में ढेर की ऊंचाई की परवाह किए बिना, 20 की विभिन्न शक्तियों के बीच बिल्कुल एक खाली रेखा होनी चाहिए। उदाहरण के लिए, 25 और 30 के लिए सही आउटपुट हैं:

            .
     .
           ----
    ----   ----
    
  • कोई अग्रणी या अनुगामी लाइनों की अनुमति नहीं है।

  • आउटपुट बिल्कुल वैसे ही मुद्रित होने चाहिए, जैसे वे दिए गए उदाहरणों में हैं।

परीक्षण के मामलों

  • ऊपर दिए गए उदाहरण के रूप में 0 और 25 के बीच प्रत्येक व्यक्ति संख्या।

  • इनपुट: 42

आउटपुट:

 .. 

 .. 
  • इनपुट: 8000

आउटपुट:

 .  

<  >

<  >

<  >
  • इनपुट: 8080

आउटपुट:

 .  

<  >

....

<  >
  • इनपुट: 123456789

आउटपुट:

 .  

... 
----
----
----

 .  
----
----

 .. 
----
----

 .  

....
----
----
----

....
----
  • इनपुट: 31415

आउटपुट:

... 

... 
----
----
----

----
----

----
----
----
  • इनपुट: 2147483647

आउटपुट:

 .  

... 
----
----

 .  
----
----

 .  

----
----
----

....
----

 .. 

 .. 
----

स्कोरिंग

यह , इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है।


15 और 20 समान प्रतीत होते हैं।
isaacg

@ आइसाकग थैंक्स, मैं वास्तव में 15 सही जगह पर और 19 और 20 के बीच दोनों में दिखाई दिया। फिक्स्ड।
घातक

@ फ़ेटलाइज़ करें क्या आउटपुट को प्रिंट करने की ज़रूरत है (यानी STDOUT) या क्या मेरा फ़ंक्शन सिर्फ आउटपुट वापस कर सकता है?
rink.attenders.6 17

@ rink.attenders.6 को ठीक उसी तरह मुद्रित किया जाना चाहिए जैसे वे पोस्ट में हैं।
घातक

क्या यह ठीक है अगर 1 एक कॉलम दाईं ओर है, लेकिन 3 एक कॉलम बाईं ओर है?
आराघर

जवाबों:


3

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

j+bbm|jb_m.[\ 4kc:*d\.*5\.*4\-4"<  >"jQ20

इसे ऑनलाइन आज़माएँ: प्रदर्शन

स्पष्टीकरण:

                                     jQ20   convert input to base 20
    m                                       map each value d to:
                  *d\.                         string of d points
                 :    *5\.*4\-                 replace 5 points by 4 -s
                c             4                split into groups of 4
         m.[\ 4k                               center each group
        _                                      invert order
      jb                                       join by newlines
     |                         "<  >"          or if 0 use "<  >"
j+bb                                        join by double newlines

5

पर्ल, 125 117 बाइट्स

$-=<>;{$_=($-%20?(""," .
"," ..
","...
","....
")[$-%5]."----
"x($-/5&3):"<  >
").$_;($-/=20)&&($_=$/.$_,redo)}print

8 बाइट बचाने में मेरी मदद करने के लिए डॉम हेस्टिंग्स का धन्यवाद।


1
हे समगक, एक दो से अधिक बाइट बचत परिवर्तन, बजाय redo,if(int($i/=20))आप का उपयोग कर सकते हैं ~~($i/=20)&&redo~~धर्मान्तरित करने के लिए int - आप 0|शुरुआत में भी उपयोग कर सकते हैं (या |0अंत में)। इसके अलावा के substr(".... ... .. . ",20-$i%5*5,5)साथ (' .', ' ..','...','.'x4)[$i%5-1].$/ठीक काम करने के लिए लगता है, लेकिन मैं सभी परीक्षण मामलों का परीक्षण नहीं किया है ... अगर वे काम, आप 114 के लिए नीचे हैं ... अगर मुझे लगता है मैं तुम्हें बता दूँगा साझा करने के लिए कुछ और लगता है!
डोम हेस्टिंग्स 10

1
इसके बारे में सोचकर, यदि आप केवल एक पूर्णांक बनाना चाहते हैं और शेष को अनदेखा करना चाहते हैं, तो आप उस जादुई चर का उपयोग कर सकते हैं $-जो हमेशा एक इंट को काट देगा ... कुछ और बचा सकता है!
डोम हेस्टिंग्स

1
@DomHastings धन्यवाद, अंतर रूपांतरण चाल बाइट्स के एक जोड़े को बचाता है, और रूट से छुटकारा पाने से एक और बचत होती है 4. नई सुइयों को स्ट्रिंग स्थिरांक के अंदर जाने की आवश्यकता होती है क्योंकि उस मामले में कोई नई रेखा नहीं होनी चाहिए जहां कोई डॉट्स नहीं हैं।
samgak

1
@DomHastings वास्तव में यह करता है, फिर से धन्यवाद! मुझे लगता है कि इसका मतलब है कि मुझे दुनिया के अपने अंत से छुटकारा पाना है
samgak

4

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

बाइट्स का भार इसलिए जोड़ा गया क्योंकि console.logइसके बिना एक और 23 बाइट्स बचा सकते थे।

n=>console.log((d=(x,s='',l=1,j=x/l|0)=>s+(j>19?d(x,s,l*20)+`

`:'')+((j=j%20)?(' '+`.`.repeat(j%5)).slice(-4)+`
----`.repeat(j/5):'<  >'))(n))

4

गणितज्ञ 185 182 171 153

अनाम कार्यों का उपयोग करने के लिए आर्किंडे के सुझाव के लिए धन्यवाद, 18 बाइट्स बचाए गए,

c=Column;c[If[#>0,{q,r}=#~QuotientRemainder~5;c@{{""," ."," .."," ...","...."}[[r+1]],c@{{""},{d="----"},{d,d},{d,d,d}}[[q+1]]},"< >"]&/@#~IntegerDigits~20]&

उदाहरण

c[If[# > 0, {q, r} = #~QuotientRemainder~5; c@{{"", " .", " ..", " ...", "...."}[[r + 1]], c@{{""}, {d = "----"}, {d, d}, {d, d, d}}[[q + 1]]}, "< >"] & /@ #~IntegerDigits~20] &[31415]

उत्पादन


जाँच हो रही है

दशमलव संख्या, 31415, को आधार 20 में व्यक्त किया गया है। गणितज्ञ इसके लिए कम मामले को नियोजित करता है।

BaseForm[31415, 20]

आधार २०


दशमलव अंक, उपरोक्त आधार संख्या 20 के अनुरूप है।

IntegerDigits[31415,20]

{3, 18, 10, 15}


एक और उदाहरण

IntegerDigits[2147483607, 20]

{, 13, 11, 1, 15, 9, 0, 7}

c[If[# > 0, {q, r} = #~QuotientRemainder~5;c@{{"", " .", " ..", " ...","...."}[[r + 1]], c@{{""}, {d = "----"}, {d, d}, {d, d, d}}[[q + 1]]},"< >"] & /@ #~IntegerDigits~20] &[2147483607]

ex2


c=Column;c[If[#>0,{q,r}=#~QuotientRemainder~5;c@{{""," ."," .."," ...","...."}[[r+1]],c@{{""},{d="----"},{d,d},{d,d,d}}[[q+1]]},"< >"]&/@#~IntegerDigits~20]&अनाम कार्यों का उपयोग करना।
jcai

@Arcinde, धन्यवाद। अच्छे पुराने अनाम कार्य।
डेविड 13

3

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

Newlines महत्वपूर्ण हैं और प्रत्येक को 1 बाइट के रूप में गिना जाता है। चूंकि STDOUT पर छपाई की आवश्यकता है, इसलिए console.logमुझे वहां कुछ बाइट्स खर्च करने होंगे।

f=i=>console.log([...i.toString(20)].map(j=>(!(j=parseInt(j,20))||j%5?[`<  >`,` .`,` ..`,`...`,`....`][j%5]+`
`:'')+`----
`.repeat(j/5)).join`
`.slice(0,-1))

डेमो

प्रदर्शन प्रयोजनों के लिए मैं एक ES5 संस्करण लिखूंगा ताकि यह सभी ब्राउज़रों में काम करे:

// Snippet stuff
console.log = function(x) {
  O.innerHTML = x;
}
document.getElementById('I').addEventListener('change', function() {
  f(this.valueAsNumber);
}, false);

// Actual function
f = function(i) {
  console.log(i.toString(20).split('').map(function(j) {
    return (! (j = parseInt(j, 20)) || j % 5 ? ['<  >', ' .', ' ..', '...', '....'][j % 5] + '\n' : '') + '----\n'.repeat(j / 5);
  }).join('\n').slice(0,-1));
}
<input type=number min=0 max=2147483647 value=0 id=I>

<pre><output id=O></output></pre>


क्या अंतिम .joinकोष्ठक की आवश्यकता है?
डाउनगोट


@vihan यह कुछ भी आउटपुट नहीं करता है, यह सिर्फ रिटर्न देता है।
rink.attenders.6

नहीं पता था कि एक आवश्यकता है क्योंकि इनपुट एक फ़ंक्शन के माध्यम से हो सकता है। pastebin.com/0pS0XtJa 3 बाइट्स छोटी है
डाउगोएट

2

पायथन 2.x, 142 बाइट्स:

def m(n):
 h=[[""," "*(2-n%5/2)+"."*(n%5)+"\n"][n%5!=0]+"----\n"*(n%20/5),"<  >\n"][n%20==0]
 n/=20
 if n>0:
  h=m(n)+"\n\n"+h
 return h[:-1]

उदाहरण:

>>> print m(2012)
----

<  >

 ..
----
----
>>> 

संपादित करें: अनुगामी रेखा ...


मेरे पास सुझाव देने के लिए कुछ सुधार हैं। सबसे पहले, परिवर्तन [n%20==0]करने के लिए [n%20<1]। दूसरा, परिवर्तन [[""," "*(2-n%5/2)+"."*(n%5)+"\n"][n%5!=0]के h=[(" "*(2-a/2)+"."*a+"\n")*(a>0)+"----\n"*(n%20/5),"< >\n"][n%20<1]साथ a=n%5, जो सभी n%5एस को बाहर निकालता है, और सशर्त को बदलता है *(a>0)जो एक a==0ही प्रभाव के लिए एक खाली स्ट्रिंग लौटाता है।
शर्लक

अंत में, डाल a, hऔर nएक लाइन पर है, तो जैसे: a=n%5;h=[(" "*(2-a/2)+"."*a+"\n")*(a>0)+"----\n"*(n%20/5),"< >\n"][n%20<1];n/=20। यह सब आपको 131 बाइट्स के साथ छोड़ देना चाहिए।
शर्लक

2

CJam, 82 76 बाइट्स

li{_K%[""" .
"" ..
""...
""....
"]1$5%='-4*N+2$5/3&*+"<  >
"?N+L+:L;K/}h;L);

मेरा पहला सीजेएम कार्यक्रम, मूल रूप से सीजेएम के लिए मेरे पर्ल जवाब का सिर्फ एक लिप्यंतरण है।

ऑनलाइन कोशिश करें

टिप्पणियों के साथ बहु-पंक्ति:

li            # read input
{             # start of do-while loop
  _K%         # check if this base-20 digit is a zero
    [""" .
    "" ..
    ""...
    ""....
    "]1$5%=   # push dots for 1s onto stack
    '-4*N+2$5/3&*+    # push lines for 5s onto stack

    "<  >
    "         # push zero on stack
  ?           # ternary if test (for digit equals zero)
  N+L+:L;     # pre-concatenate string with output plus newline
  K/          # divide by 20
}h            # end of do while loop
;L);          # push output string on stack, chop off trailing newline

1

PHP, 220 बाइट्स

मेरे जावास्क्रिप्ट जवाब के रूप में एक ही दृष्टिकोण। PHP में हर चीज के लिए अंतर्निहित कार्य हैं।

कमांड लाइन से 1 इनपुट लेता है (यानी STDIN), जैसा कि देखा गया है $argv[1]:

<?=rtrim(implode("\n",array_map(function($j){return(!($j=base_convert($j,20,10))||$j%5?['<  >', ' .', ' ..', '...', '....'][$j%5]."\n":'').str_repeat("----\n",$j/5);},str_split(base_convert($argv[1],10,20)))));

1

सी - 149

f(v){v/20&&(f(v/20),puts("\n"));if(v%=20)for(v%5&&printf("%3s%s","...."+4-v%5,v/5?"\n":""),v/=5;v--;v&&puts(""))printf("----");else printf("<  >");}

सबसे महत्वपूर्ण संख्याओं को पहले प्रिंट करने के लिए पुनरावर्तन का उपयोग करता है। फिर या तो शून्य को प्रिंट करता है या सभी डॉट्स को एक चतुर के साथ प्रिंट करता है printf और सभी पत्नियों को लूप में करता है। मुझे यकीन नहीं है कि अगर मैं यहाँ-और का उपयोग करने से बच सकता हूँ।

चतुर प्रिंट का नकारात्मक पक्ष यह है कि 1 और 3 एक दूसरे से संरेखित नहीं हैं:

23 के लिए परिणाम है:

  .

...

119 गलत समाधान - अनुगामी न्यूलाइन

f(v){v/20&&(f(v/20),puts(""));if(v%=20)for(v%5&&printf("%3s\n","...."+4-v%5),v/=5;v--;)puts("----");else puts("<  >");}


1

PHP, 202 192 बाइट्स

function m($n){return(($c=($n-($r=$n%20))/20)?m($c)."\n":"").
($r?(($q=$r%5)?substr(" .   .. ... ....",$q*4-4,4)."\n":"").
str_repeat("----\n",($r-$q)/5):"<  >\n");}
echo rtrim(m($argv[1]),"\n");

इसे पहली कमांड लाइन तर्क से इनपुट मिलता है।

टिप्पणियों और परीक्षणों के साथ पूर्ण स्रोत कोड, जीथब पर उपलब्ध है ।


\nदो अक्षर है - लेकिन एक स्ट्रिंग के बीच में एक नई रेखा केवल एक है।
फिशरेबेल

1

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

यह उत्तर जकुबे के पाइथ उत्तर और लोकोलिंस के पाइथन 2 उत्तर पर आधारित है।

def f(n):d,m=divmod(n%20,5);h=[" "*(2-m/2)+"."*m+"\n----"*d,"<  >"][n%20<1];n/=20;return(f(n)+"\n\n"if n else"")+h

0

जेली , 50 49 47 बाइट्स

b5µṪ”.x⁶;$L<3Ɗ¡ṭ⁾--;UW¤ẋ$Ẏ$L¡Ṛø“<  >”WµẸ?
b20Ç€

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

... अब उपयोगकर्ता 202029 के बिंदु के लिए धन्यवाद संरेखित किया गया है।

जब आप खुद को सोच < >में फंसा लेते हैं, तो यह एक अड़चन है ...


आप सही-संरेखित क्यों करते हैं ......
user202729

@ user202729 के लिए .और ..वहाँ एक जगह की जरूरत है तो मैं ...भी एक के लिए डाल दिया । क्या कोई छोटा रास्ता है?
dylnan

मुझे लगता है कि चुनौती के अनुसार कल्पना ...को सही ढंग से संरेखित नहीं किया जाना चाहिए। बस <4करने के लिए बदल <3?
user202729

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