ASCII कला मय अंक


14

यह चुनौती सरल है। एक संख्या को देखते हुए, Mayan Base-20 अंक प्रणाली का उपयोग करते हुए, संख्या का एससी-आर्ट प्रतिनिधित्व प्रस्तुत करता है।

माया तंत्र क्या है?

Mayans ने संख्याओं को संग्रहीत करने के लिए आधार 20 का उपयोग किया, इसलिए पहली स्थिति 1s स्थान, अगले 20s स्थान, फिर 400s, आदि थी।

तो माया संख्या 1है 1आधार 10 में है, लेकिन 10वास्तव में है 20आधार 10 में, 207है 807आधार 10, आदि में ..

और उन्होंने एक विशेष प्रतीक के साथ, चित्र के रूप में अपनी संख्या का प्रतिनिधित्व किया 0

 -------------------
|    |    |    |    |
|    |    |    |    |
|-------------------|
|                   |
|                   |
 ------------------- 

वह उनका शून्य था। (कम से कम आधा पिकासी आधा मेरा कलात्मकता आस्की कला संस्करण)

यह माया शून्य प्रतीक की एक वास्तविक तस्वीर है। 1

यह उनका पाँच था:

--------------------------------
|                              |
--------------------------------

और एक 4:

 ----   ----   ----   ----  
|    | |    | |    | |    | 
|    | |    | |    | |    | 
 ----   ----   ----   ----  

अंत में, इसे एक साथ रखने के लिए:

 ----   ----   ----  
|    | |    | |    | 
|    | |    | |    | 
 ----   ----   ----  
--------------------------------
|                              |
--------------------------------
--------------------------------
|                              |
--------------------------------

इसलिए उनके पास x//5बार हैं, और सलाखों के x%5ऊपर डॉट्स हैं। और अगर x=0, वे खाली जगह के बजाय शेल / पाव का उपयोग करते हैं।

अधिक छवियों के लिए, माया संख्या छवियों के विकिमीडिया कॉमन्स पृष्ठ का प्रयास करें

लेकिन यह केवल संख्या तक है 19। हमें एक ही 'कहानी' में4 बार और 4डॉट्स से अधिक की अनुमति नहीं है ... इसलिए हम ऊपर जाते हैं!

20 के लिए आउटपुट है:

 ----
|    |
|    |
 ----



 -------------------
|    |    |    |    |
|    |    |    |    |
|-------------------|
|                   |
|                   |
 ------------------- 

ध्यान दें कि यह सामान्य रूप से अमान्य होगा, क्योंकि 1एक 0ही समय में एक और एक है । लेकिन 3(ध्यान दें कि, आपके उत्तर को कम से कम 3 की आवश्यकता है) 0नई जगह से पहले नए मान।

नीचे की कहानी में डॉट्स, अर्थ 1और बार अर्थ हैं 5। लेकिन यह वास्तव में डॉट्स अर्थ 20^0और बार अर्थ है 20^0 * 5

प्रत्येक कहानी एक शक्ति बनती है। दूसरी कहानी डॉट्स का मतलब 20( 20^1) और 100( 20^1 * 5) है।

तो संख्या 506का प्रतिनिधित्व किया जा सकता है:

 ----  
|    | 
|    | 
 ----  




--------------------------------
|                              |
--------------------------------




 ----  
|    | 
|    | 
 ----  
--------------------------------
|                              |
--------------------------------

यह वह जगह है (20^0) * 1 + (20^0 * 5) * 1 + (20^1 * 5) * 1 + (20^2) * 1 = 1 + 5 + 100 + 400 = 506

आपका मिशन, आपको चुनना चाहिए या नहीं चुनना चाहिए (इससे कोई फर्क नहीं पड़ता), बेस -10 नंबर की एक एससीआई कला प्रतिनिधित्व का उत्पादन करना है।

अन्य नियम:

  • लीडिंग / ट्रेलिंग स्पेस ठीक है, जब तक डॉट्स, बार और शेल बरकरार हैं।
  • बार, डॉट्स, और गोले बिल्कुल वही होने चाहिए जो परीक्षण के मामले हैं। कोई आकार नहीं।
  • अग्रणी '0 ठीक हैं। (आउटपुट पर प्रमुख गोले)
  • आपके पास प्रत्येक स्थान मान या कहानी के बीच बिल्कुल 3 नई सीमाएँ नहीं होनी चाहिए, बस कम से कम 3।

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

15

--------------------------------
|                              |
--------------------------------
--------------------------------
|                              |
--------------------------------
--------------------------------
|                              |
--------------------------------  

12

 ----   ----  
|    | |    | 
|    | |    | 
 ----   ----  
--------------------------------
|                              |
--------------------------------
--------------------------------
|                              |
--------------------------------



4

 ----   ----   ----   ----  
|    | |    | |    | |    | 
|    | |    | |    | |    | 
 ----   ----   ----   ----  


0

 -------------------
|    |    |    |    |
|    |    |    |    |
|-------------------|
|                   |
|                   |
 ------------------- 


24

 ----  
|    | 
|    | 
 ----  




 ----   ----   ----   ----  
|    | |    | |    | |    | 
|    | |    | |    | |    | 
 ----   ----   ----   ----  



33



 ----  
|    |  
|    | 
 ----  




 ----   ----   ----  
|    | |    | |    | 
|    | |    | |    | 
 ----   ----   ----  
--------------------------------
|                              |
--------------------------------
--------------------------------
|                              |
--------------------------------



20



 ----  
|    | 
|    | 
 ----  




 -------------------
|    |    |    |    |
|    |    |    |    |
|-------------------| 
|                   |
|                   |
 -------------------  

1: उन्होंने प्रतीकों के लिए देवताओं के सिर का भी उपयोग किया, लेकिन इस चुनौती के लिए शेल / ब्रेड / ज़ेल्डा चेस्ट का उपयोग किया जाएगा।


but for this challenge the shell/bread will be used.। खोल नहीं, रोटी नहीं। पिछले छाती के लिए LOZ लिंक।
बाल्ड बंता


@epicTCK .... जो वास्तव में उल्लेखनीय है ...
R ....

जवाबों:


4

रूबी, 223 180 177 179 बाइट्स

बेनामी फ़ंक्शन, एक बहुस्तरीय स्ट्रिंग लौटाता है।

जरूरत पड़ने पर कुछ अतिरिक्त रिक्ति जोड़ना भूल गए, और पुनरावृत्ति भी। इसके अलावा चीजों को इधर-उधर करने से थोड़ा अधिक गोल्फ हो जाता है।

f=->n{s=?|;e=' ';n<20?(n<1?[t=e+d=?-*19,a=s+(e*4+s)*4,a,s+d+s,b=s+e*19+s,b,t]:((r=n%5)>0?[t=" ----  "*r,m="|    | "*r,m,t]:[])+[a=?-*32,s+e*30+s,a]*(n/5))*$/:f[n/20]+$/*5+f[n%20]}

आप गोल्फ वाले हैं। बधाई!
R

6

पायथन 3.5, 404 400 392 312 311 308 290 281 285 281 बाइट्स:

( 9 बाइट बचाने पर एक टिप के लिए अदनान का धन्यवाद 290->281) ( और 4 बाइट बचाने के लिए एक टिप के लिए नील285->281 ! )

def u(z):
 p=[];P=print;S,N,M,X=' -|\n'
 while not p or z:p+=[z%20];z=z//20
 E=lambda i:(S+N*4+S)*i+X+((M+S*4+M)*i+X)*2+(S+N*4+S)*i+X;F=N*32+X+M+S*30+M+X+N*32+X;[P(S+N*19+S+X+M+((S*4+M)*4+X+M)*2+N*19+M+X+(M+S*19+M+X)*2+S+N*19+S+X*3)if y<1else P(E(y%5)+F*(y//5)+X*3)for y in p[::-1]]

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

विश्लेषण

इस विश्लेषण के प्रयोजनों के लिए, हम 0123456789ABCDEFGHIJबेस 20 में प्रत्येक अंक का प्रतिनिधित्व करने के लिए निर्धारित वर्ण का उपयोग करेंगे ।

इसलिए, मैं जा सकता था और मेरे पास मौजूद दो एल्गोरिदम में से बेस 10 को बेस 20 में परिवर्तित कर सकता था। पहला एल्गोरिथ्म जिसका मैंने उपयोग करने के बारे में सोचा था कि मैं शक्तियों के एल्गोरिथ्म को क्या कहता हूं । यह वह नहीं है जिसे मैंने कोड में उपयोग किया है, क्योंकि यह इसे वैसे ही लंबे समय तक बना देगा जैसा कि मुझे होना चाहिए था, इसलिए मैं इस बारे में बात नहीं करने जा रहा हूं। हालाँकि, मैंने एक पायथन स्क्रिप्ट बनाई जो इस विधि का उपयोग करके प्रदान किए गए किसी भी अन्य आधार में किसी भी पूर्णांक को किसी भी आधार में परिवर्तित करती है, जिसे आप यहाँ पर उपयोग कर सकते हैं इस चुनौती के बदले मैंने जो प्रयोग किया , वह है जिसे मैं डिवीजन एल्गोरिथ्म कहता हूं , जो मुझे लगता है कि यहां बहुत अच्छा समझाया गया है। लेकिन मूल रूप से क्या होता है कि यह प्रदान किए गए आधार को 10 नंबर लेता है और इसे आधार द्वारा विभाजित करने के लिए इसे संख्या को बदलने की आवश्यकता होती है, जो कि इस मामले में 20 है, जब तक कि शेष 0 या 1 नहीं है। यह तब भागफल और शेष लेता है उस क्रम में, आखिरी डिवीजन ऑपरेशन से, और फिर अन्य डिवीजन ऑपरेशंस से लेकर पिछले फर्स्ट तक के ऑर्डर में अन्य सभी अवशेष। इन सभी अंकों को फिर एक साथ जोड़ा जाता है, और जो उलटा क्रम जुड़ जाता है, वह आधार 20 में आपका आधार 10 नंबर है! इसे समझने के लिए, मान लें कि आप आधार संख्या 431को आधार 20 में बदलना चाहते हैं । इसलिए, हम यह क्या करेंगे:

[]=list we will put all remainders and the last quotient in
R = Remainder

1. 431/20 = 21 R11 [B (B=11 in base 20)]
2. 21/20 = 1 R1 [Add the remainder and quotient: B11]

फिर, अंत में हम हमारे पास मौजूद सूची लेंगे, जिसमें इस मामले में है B11, और इसे उल्टा कर दें ताकि अब हमारे पास है 11B। ऐसा करने में, हमें अंततः अपना अंतिम उत्तर मिल गया है! बेस 10 में 431 को बेस 20 में परिवर्तित किया गया है 11B, जिसे मेरी पाइथन स्क्रिप्ट का उपयोग करके पुष्टि की जा सकती है जो उन शक्तियों के एल्गोरिथ्म का उपयोग करता है जिन्हें मैंने पहले ही ऊपर एक लिंक साझा किया था, लेकिन मैं इसे फिर से यहां करूंगा । यहाँ एक है जो इस उत्तर में वर्णित विभाजन एल्गोरिथ्म का उपयोग करता है और शक्तियों के समान उत्तर देता है।

यह पूरी प्रक्रिया अनिवार्य रूप से इस whileलूप में मेरी स्क्रिप्ट में क्या होती है while not p or z:p+=[z%20];z=z//20:। फर्क सिर्फ इतना है कि संख्या है >9कर रहे हैं नहीं पत्र के रूप में प्रतिनिधित्व, लेकिन इसके बजाय स्वयं के रूप में।

आगे बढ़ने पर, आधार 10 संख्या को आधार 20 में बदल दिए जाने के बाद, बेस 20 पूर्णांक में प्रत्येक अंक के लिए, जिसे हम कॉल करेंगे g, g mod 5डॉट्स प्रिंट आउट किए जाते हैं और फिर g//5बार प्रिंट आउट किए जाते हैं। फिर प्रोग्राम 3 रिक्त लाइनों को प्रिंट करता है और अगले अंक पर ले जाता है। हालाँकि, यदि अंक है 0, तो 3 नई लाइनों के बाद एक "लोफ" प्रिंट किया जाता है, और फिर प्रोग्राम अगले अंक पर चला जाता है। तो, आधार 20 नंबर को लेते हुए 11B, हम पहले अंक पर जाते हैं। पहला अंक है 1, और इसलिए यह 0 बार प्रिंट करेगा 1//5=0, और 1 डॉट के बाद से 1%5=1। तो, हम इसे पहले प्राप्त करेंगे:

 ---- 
|    |
|    |
 ---- 

और फिर 3 नई लाइनें। दूसरे अंक पर चलते हुए, हम यह भी देखते हैं कि यह 1 है, इसलिए यह एक ही चीज़ को आउटपुट करेगा:

 ---- 
|    |
|    |
 ---- 

और 3 नई लाइनें भी। अंत में, अंतिम अंक पर चलते हुए, हम देखते हैं कि यह एक है B। के बाद से B=11आधार 20 में, कार्यक्रम उत्पादन 1 के बाद से डॉट जाएगा 11%5=1के बाद से और 2 बार 11//5=2। तो अब, हम इसे प्राप्त करते हैं:

 ---- 
|    |
|    |
 ---- 
--------------------------------
|                              |
--------------------------------
--------------------------------
|                              |
--------------------------------

अंत में, यह सब एक साथ रखकर, हमें यह मिलता है:

 ---- 
|    |
|    |
 ---- 




 ---- 
|    |
|    |
 ---- 




 ---- 
|    |
|    |
 ---- 
--------------------------------
|                              |
--------------------------------
--------------------------------
|                              |
--------------------------------

और, यह 431 के लिए मेयन अंक है! अंत में आपके पास आधार 20 मय अंकों में आपका आधार 10 नंबर है।

नोट: आपने lambdaमेरे कोड में उस फ़ंक्शन को देखा या नहीं । बावजूद, इस फ़ंक्शन का उपयोग डॉट्स के निर्माण के लिए किया जाता है क्योंकि कई डॉट्स एक दूसरे के बगल में आउटपुट होने चाहिए।


मुझे यकीन नहीं है कि यह संभव है, लेकिन क्या आप इसके S,N,M,X=' -|\n'बजाय कर सकते हैं S,N,M,X=' ','-','|','\n'?
अदनान

@ अदनान जो संभव है।
R

@ अदनान सच में? वाह, मुझे नहीं पता था कि। धन्यवाद!
आर। काप

401अंदर एक शून्य होता है।
नील

@ नील ओह, सही है। सर उठाने के लिए धन्यवाद। यह अब तय हो गया है।
आर। काप

3

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

s,v,h,x=' |-\n';P=print
t=s+h*19+s+x
def m(n):
 n//20and m(n//20);r=n%20
 if r:
  for a,b,f in[(r%5*' ----  ',r%5*'|    | ',1),('-'*32,'|'+' '*30+'|',r//5)]:P(*((a,b,b,a)*f),sep=x)
 else:P(t+2*(v+(4*s+v)*4+x)+v+h*19+v+x+2*(v+s*19+v+x)+t)
 P(x)

विचार-विमर्श

n//20and m(n//20)m()अगर 20 से अधिक शक्तियां हैं, तो पुनरावर्ती कॉल करें । वर्तमान स्थान मान को मुद्रित करने से पहले पुनरावर्तन किया जाता है, ताकि उच्च शक्तियां पहले मुद्रित हो जाएं।

यदि वर्तमान स्थान मान गैर-शून्य (r! = 0) है, तो for a,b,f-लूप इकाइयों को प्रिंट करता है और फिर फाइव। aपहली / आगे की पंक्ति है और bदूसरी / तीसरी पंक्ति है। चाल में है print(*((a,b,b,a)*f),sep=x)। इकाइयों के लिए, f = 1 परिणामस्वरूप print(*(a,b,b,a),sep=x), जो इकाइयों को प्रतीक बनाने वाली 4 पंक्तियों को प्रिंट करता है (x एक '\ n' है)। फाइव्स के लिए, f = प्रिंट करने के लिए फाइव्स की संख्या (r // 5), इसलिए टपल (a, b, b, a) प्रिंट करने के लिए फाइव्स की संख्या से कई गुना (यानी, बार-बार) मिलती है। यदि f = 2, हम प्राप्त करते हैं print(*(a,b,b,a,a,b,b,a),sep=x), जो पांच के लिए दो प्रतीकों को प्रिंट करता है।

यदि वर्तमान स्थान मान 0 है, तो शून्य चिह्न मुद्रित होता है।


मुझे आर। कप को इनाम देने के लिए पुरस्कृत करना पड़ा, लेकिन यह इसके लायक हो सकता है कि वह खुद इनाम हो! अच्छी नौकरी!
R

2

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

w,m=input(),[]
for i in[20**i for i in range(int(w**0.25))][::-1]:m.append(w/i);w=w%i
for i in m or[0]:print(lambda x,y='\n',w=' ----  ',z='|    | ':w*(x%5)+y+z*(x%5)+y+z*(x%5)+y+w*(x%5)+y+('-'*32+'\n|'+' '*30+'|\n'+'-'*32+y)*(x/5)if x else''' -------------------
|    |    |    |    |
|    |    |    |    |
|-------------------|
|                   |
|                   |
 ------------------- ''')(i),'\n\n\n'

मैंने इसे परीक्षण मामलों को उत्पन्न करने के लिए बनाया है, आप इसे बेंचमार्क के रूप में उपयोग कर सकते हैं। छाँटा हुआ गोल्फ।


आप व्हाट्सएप को हटाकर 26 बाइट्स निकाल सकते हैं, और एक और 4 कर सकते हैं s=math.sqrtऔर s(s(w))इसके बजाय कॉल कर सकते हैंmath.sqrt(math.sqrt(w))
जेम्स

@DrGreenEggsand HamDJ धन्यवाद मुझे नहीं लगता कि मुझे व्हॉट्सएप से 26 बाइट्स मिलीं?
R

ओह, माफ करना, मतगणना में त्रुटि का मतलब मैं 25 था। इसके अलावा, w**0.25इससे भी बेहतर है s(s(w))। हालांकि यह लंबा हो गया?
जेम्स

@DrGreenEggsandWeDJ हाँ, मैं किसी भी तरह फ़ाइल से पारगमन में खोल शून्य स्ट्रिंग खो दिया जवाब देने के लिए।
R

2

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

f=(n,r=(s,n=19)=>s.repeat(n))=>(n>19?f(n/5>>2)+`


`:``)+(n%5?`${r(s=` ----  `,n%5)}
${t=r(`|    | `,n%5)}
${t}
${s}
`:``)+r(`${s=r(`-`,32)}
|${r(` `,30)}|
${s}
`,n/5&3)+(n%20?``:` ${s=r(`-`)}
${t=r(`|    `,4)}|
${t}|
|${s}|
|${t=r(` `)}|
|${t}|
 ${s}
`)

मैं यह काम करने के लिए नहीं मिल सकता है? यह त्रुटियों के साथ Missing } in template expression। मैं बहुत ज्यादा js नहीं जानता, मैं इसे कैसे ठीक कर सकता हूं?
20

@ E @s codeIʀᴋ मेरा बुरा, मैंने कुछ कोड इधर-उधर कर दिए और गलती से उसे गलत जगह चिपका दिया। यह अब तय हो गया है।
नील

1

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

एक अलग दृष्टिकोण का उपयोग कर एक भी छोटे संस्करण के साथ आया:

s,v,h,x=' |-\n'
t=s+h*19+s
k=4*s+v
w=v+4*k
y=v+s*19+v
a=' ----  '
b=v+k+s
c=h*32
d=v+s*30+v
m=lambda n:m(n//20)+([n%5*a,n%5*b,n%5*b,n%5*a][:n%5*4]+n%20//5*[c,d,d,c]if n%20else[t,w,w,v+h*19+v,y,y,t])+[x,x]if n else[]

व्याख्या

पहले 9 लाइनें या तो, स्ट्रिंग का निर्माण करें जो प्रतीकों को बनाने के लिए उपयोग किया जाता है

s,v,h,x = ' |-\n'
k = '    |'

    # parts for a unit
a = ' ----  '
b = '|    | '

    # parts for a five
c = '--------------------------------'
d = '|                              |'

    # parts for a zero
t = ' ------------------- '
w = '|    |    |    |    |'
y = '|                   |'

समाधान का मूल पुनरावर्ती कार्य है m, जो आउटपुट में प्रत्येक पंक्ति के लिए तार की एक सूची बनाता है। योजनाबद्ध रूप से, mजैसा दिखता है:

m(n//20) + (ones + fives if n%20 else zero) + [x,x] if n else []

m इसे फिर से लिखा जा सकता है:

def m(n):
  if n:
    ans = m(n//20)                             # process high digits first

    if n%20:                                   # if there is a base-20 digit
      ans += [n%5*a,n%5*b,n%5*b,n%5*a][:n%5*4] # add strings for the 'ones' if any
      ans += n%20//5 * [c, d, d, c]            # add strings for the 'fives' if any

    else:
      ans += [t,w,w,v+h*19+v,y,y,t]            # otherwise, add strings for a `zero`

    ans += [x,x]                               # blank lines between digit groups

  else:
    ans = []                                   # base case

  return ans

पुनरावर्ती कॉल m(n//20)पहले आता है ताकि सबसे महत्वपूर्ण अंक पहले किए जाएं।

[n%5*a,n%5*b,n%5*b,n%5*a]प्रतीकों के लिए स्ट्रिंग हैं। aएक प्रतीक के लिए शीर्ष पंक्ति है। n%5इस अंक के लिए एक प्रतीकों की संख्या है। तो, n%5*aऊपर (और नीचे) पंक्ति के लिए एक स्ट्रिंग n%5है। इसी तरह, 'n% 5 * b` 2 (और 3rd) पंक्ति के लिए एक स्ट्रिंग है।

आउटपुट में अतिरिक्त रिक्त लाइनों से बचने के लिए अभिव्यक्ति [:n%5*4]एक तरह से कार्य ifकरती है अगर आउटपुट में कोई '' नहीं हैं। इसकी जरूरत नहीं है, लेकिन आउटपुट बेहतर दिखता है।

n%20//5पाँच की जरूरत है कि प्रतीकों की संख्या है। [c,d,d,c]पाँच के लिए एक प्रतीक बनाने के लिए तार हैं।

[t,w,w,v+h*19+v,y,y,t] शून्य प्रतीक बनाने के लिए तार हैं

[x,x] मायन अंकों के समूहों के बीच कम से कम तीन रिक्त लाइनें डालता है


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