गिनती की छड़ें; अपनी छड़ें गिनें


9

कुछ पृष्ठभूमि

गिनती की छड़ें छोटी सलाखों (3-14 सेमी लंबी) होती हैं जो किसी भी संपूर्ण संख्या या अंश का प्रतिनिधित्व करने के लिए 2000 से अधिक वर्षों के लिए कई एशियाई संस्कृतियों के गणितज्ञों द्वारा उपयोग की जाती थीं। (हालांकि इस chqllenge में हम अहस्ताक्षरित पूर्णांक पर ध्यान केंद्रित करते हैं) एक लिखित संस्करण भी था, जिसे रॉड अंक कहा जाता है।

यहां देखिए यह कैसे काम करता है:

(यदि किसी भी बिंदु पर आप भ्रमित हो जाते हैं, तो प्रत्येक अंक के एएससीआई प्रतिनिधित्व की जांच करें और कुछ उदाहरण जो मैंने नीचे दिए हैं)

रॉड अंक 1-9 के लिए अंकों और 0. के लिए रिक्त के साथ एक सही स्थितिगत अंक प्रणाली है। अंक क्षैतिज और ऊर्ध्वाधर लाइनों से मिलकर होते हैं; जितनी अधिक रेखाएँ, उतना अधिक अंक। एक बार जब आप पिछले पांच हो जाते हैं, तो आप नीचे की रेखाओं के 5 में जोड़ने के लिए शीर्ष पर एक क्षैतिज रेखा डालते हैं। एक ऊर्ध्वाधर रेखा 1, दो ऊर्ध्वाधर रेखाएं 2, पांच ऊर्ध्वाधर रेखाएं 5 हैं, शीर्ष पर एक क्षैतिज रेखा के साथ एक ऊर्ध्वाधर रेखा 6 है, शीर्ष पर एक क्षैतिज रेखा के साथ चार ऊर्ध्वाधर रेखाएं 9 (उच्चतम अंक) हैं।

एक ऊर्ध्वाधर 3 अंक:

 ||| 
 ||| 
 ||| 
 ||| 
 ||| 

हालांकि, रॉड अंक को पढ़ना आसान बनाने के लिए, उन्होंने प्रत्येक वैकल्पिक अंक के लिए अलग-अलग अंकन का उपयोग किया। दूसरी अंकन क्षैतिज और ऊर्ध्वाधर रेखाओं की भूमिका को बदल देता है। ताकि 3 को तीन क्षैतिज रेखाओं द्वारा और 8 को तीन क्षैतिज रेखाओं द्वारा शीर्ष पर खड़ी रेखा के साथ दर्शाया जाए।

एक क्षैतिज 8 अंक:

  |  
  |  
__|__
_____
_____

यह जानते हुए कि किस संकेतन का उपयोग करना आसान है, जैसा कि पहले कहा गया था, बारी-बारी से इस्तेमाल किया जाता है और सन त्ज़ु ने लिखा है कि "एक ऊर्ध्वाधर है, दस क्षैतिज है"। तो सबसे सही अंक ऊर्ध्वाधर है और हम वहां से वैकल्पिक रूप से।

चुनौती

इन छड़ों का उपयोग ऋणात्मक संख्याओं और भिन्नों को दर्शाने के लिए किया गया था (जैसा कि उन पर विकिपीडिया लेख में बताया गया है । इस चुनौती के उद्देश्य के लिए हम केवल सकारात्मक पूर्णांकों पर ध्यान केंद्रित करेंगे। उद्देश्य सरल है:

एक फ़ंक्शन या पूर्ण प्रोग्राम लिखें जो किसी भी तरह से पूर्णांक मान को इनपुट के रूप में लेता है और इस पूर्णांक के रॉड अंकन प्रतिनिधित्व को STDOUT में प्रिंट करता है (यदि आप बेहतर तरीके से काम करते हैं तो आप एक फ़ाइल भी लिख सकते हैं)। बाइट्स में सबसे छोटा कोड जीतता है।

हर अंक 5x5 ascii वर्णों द्वारा दर्शाया जाएगा और 5 रिक्त स्थान के दो कॉलम द्वारा अलग किया जाएगा। प्रत्येक अंक के लिए आपके द्वारा उपयोग किया जाने वाला सटीक प्रतिनिधित्व निम्नानुसार है:

space between two digits (two colums):





0 digit, both vertical and horizontal (five columns):






1 digit, vertical:
  |  
  |  
  |  
  |  
  |  

2 digit, vertical:  
 | | 
 | | 
 | | 
 | | 
 | | 

3 digit, vertical:
 ||| 
 ||| 
 ||| 
 ||| 
 ||| 

4 digit, vertical:
|| ||
|| ||
|| ||
|| ||
|| ||

5 digit, vertical:
|||||
|||||
|||||
|||||
|||||

6 digit, vertical:
_____
  |  
  |  
  |  
  |  

7 digit, vertical:
_____
 | | 
 | | 
 | | 
 | | 

8 digit, vertical:
_____
 ||| 
 ||| 
 ||| 
 ||| 

9 digit, vertical:
_____
|| ||
|| ||
|| ||
|| ||

1 digit, horizontal:




_____

2 digit, horizontal:



_____
_____

3 digit, horizontal:


_____
_____
_____

4 digit, horizontal:

_____
_____
_____
_____

5 digit, horizontal:
_____
_____
_____
_____
_____

6 digit, horizontal:
  |  
  |  
  |  
  |  
__|__

7 digit, horizontal:
  |  
  |  
  |  
__|__
_____

8 digit, horizontal:
  |  
  |  
__|__
_____
_____

9 digit, horizontal:
  |  
__|__
_____
_____
_____

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

मानक खामियां लागू होती हैं।

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

से शुरू होने वाली लाइनों की >व्याख्या इनपुट के रूप में की जानी है।

>12
        | | 
        | | 
        | | 
        | | 
_____   | | 

>8037
  |                  _____
  |                   | | 
__|__         _____   | | 
_____         _____   | | 
_____         _____   | | 

>950
_____  _____       
|| ||  _____       
|| ||  _____       
|| ||  _____       
|| ||  _____       

"अनुगामी रिक्त स्थान" से, क्या आपका मतलब केवल अंतिम अंक के बाउंडिंग बॉक्स से है, या अंतिम अंक के अंत में भी है?
जॉन ड्वोरक

@JanDvorak पिछले अंक के बाउंडिंग बॉक्स को ही पार करते हैं। यदि एक अंक के पूरे बाउंडिंग बॉक्स का प्रतिनिधित्व करने के लिए ट्रेलिग स्पेस की आवश्यकता होती है, तो वे आवश्यक हैं।
ओवरएक्टर

उदाहरणों को देखते हुए, अग्रणी स्थान भी निषिद्ध हैं। क्या वो?
edc65

@ edc65 हाँ, यह इंगित करने के लिए धन्यवाद।
ओवरएक्टर

जवाबों:


3

अजगर 2 - 216

मेरा पहला शॉट, बाहर निकालने के लिए कुछ सामान हो सकता है, लेकिन मेरा दिमाग दर्द करता है, इसलिए यह अभी के लिए काफी अच्छा है

x=raw_input()
for l in range(5):print'  '.join((' '*7+'|   | |  ||| || '+'|'*7+'__|'+'_'*7)[[7*(4-l<n%6+n/6)+(n>5)*(l<10-n)-(l==10-n),n%6+n/6+(l<1)*(n>5)*(12-n)][(len(x)-i)%2]*5:][:5]for i,n in enumerate(map(int,x)))

2

जावास्क्रिप्ट (ईएस 6) 223

सांख्यिक पैरामीटर के साथ फ़ंक्शन, कंसोल के लिए आउटपुट। NB यदि इनपुट पैरामीटर एक स्ट्रिंग हो सकता है, तो कोड 5 चार छोटा और जेएस संख्या के 17 महत्वपूर्ण अंकों की सीमा के बिना होगा।

F=n=>{
  for(r=s='',n+=s;r<5;r++,s+=q)
    for(f=q='\n',p=n.length;f=!f,p--;q=(p?'  ':'')+'     1  |  1 | | 1 ||| 1|| ||1|||||1_____1__|__'.split(1)[d]+q)
      if(d=~~n[p])e=d+r,d=d>5?f?e<10?1:e>10?6:7:r?d-5:6:f?e>4?6:0:d;
  console.log(s)
}

परीक्षा

फ़ायरफ़ॉक्स कंसोल में टेस्ट करें।

F(12)

उत्पादन

        | | 
        | | 
        | | 
        | | 
_____   | | 

F(8037)

उत्पादन

  |                  _____
  |                   | | 
__|__         _____   | | 
_____         _____   | | 
_____         _____   | | 

F(950)

उत्पादन

_____  _____       
|| ||  _____       
|| ||  _____       
|| ||  _____       
|| ||  _____       

Ungolfed

F=n=>{
  z='     1  |  1 | | 1 ||| 1|| ||1|||||1_____1__|__'.split(1);
  s='';
  n+=s;

  for (r = 0; r < 5; r++)
  {
    for(q='\n',f=1,p=n.length;f=!f,p--;)
    {
      d = ~~n[p];
      if (d)
      {
        e=d+r;
        if (d > 5)
        {
          if (f)
          {
            d = e < 10 ? 1 : e >10 ? 6 : 7;
          }
          else
          {
            d = r ? d-5 : 6;
          }
        }
        else
        {
          if (f)
            d = e > 4 ? 6 : 0;
        }
      }
      q = (p ? '  ' : '') + z[d] + q;
    }
    s+=q
  }

  console.log(s)
}

1

पॉवरशेल , 229 बाइट्स

$n="$args"
0..4|%{$l=$_;$h=$n.Length%2
($n|% t*y|%{(' '*7+'|   | |  ||| || '+'|'*7+'_'*7+'|__')|% S*g(5*(('0123456666'+'0123451234'*4+'00000611110000661117000666117600666617660666667666')[50*($h=!$h)+10*$l+"$_"]-48))5})-join'  '}

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

जहां यह स्ट्रिंग वर्तमान अंक है:

# 0       1       2       3       4       5       6       7
# '     '.'  |  ',' | | ',' ||| ','|| ||','|||||','_____','__|__'

ऊर्ध्वाधर छड़:

"       |   | |  ||| || |||||||____________________"+   # 0123456666
"       |   | |  ||| || |||||||  |   | |  ||| || ||"+   # 0123451234
"       |   | |  ||| || |||||||  |   | |  ||| || ||"+   # 0123451234
"       |   | |  ||| || |||||||  |   | |  ||| || ||"+   # 0123451234
"       |   | |  ||| || |||||||  |   | |  ||| || ||"    # 0123451234

क्षैतिज छड़:

"                         _____  |    |    |    |  "+   # 0000061111
"                    __________  |    |    |  __|__"+   # 0000661117
"               _______________  |    |  __|_______"+   # 0006661176
"          ____________________  |  __|____________"+   # 0066661766
"     ___________________________|_________________"    # 0666667666

अनियंत्रित स्क्रिप्ट:

$digits=' '*7+'|   | |  ||| || '+'|'*7+'_'*7+'|__'
$positions = '0123456666'+'0123451234'*4+'00000611110000661117000666117600666617660666667666'

$n="$args"
0..4|%{
    $line=$_
    $horizontal=$n.Length%2
    $chunks=$n|% toCharArray|%{
        $horizontal=!$horizontal
        $startFrom = 5*($positions[50*$horizontal+10*$line+"$_"]-48)
        $digits|% Substring $startFrom 5
    }
    $chunks-join'  '
}


नियम में or कोई भी तरीका ’क्या है एक फ़ंक्शन या पूर्ण प्रोग्राम लिखें जो किसी भी तरह से इनपुट के रूप में पूर्णांक मान लेता है ? मैंने 'एक पूर्णांक' को 'एक स्ट्रिंग' के रूप में व्याख्या करने की हिम्मत नहीं की। :)
माज़ी

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