प्रिटीफोंट में एक नंबर आउटपुट


13

मैंने एक नया फॉन्ट डिज़ाइन किया है जिसे मैं PrettyFont कहता हूं। मैंने इसे पूरा करने में बहुत समय लगाया है, लेकिन जब से मैं एक कामकाजी आदमी हूं, मेरे पास इसे खत्म करने का समय नहीं है। इसलिए इसमें अभी 4 अक्षर हैं। एक दिन जब मैं अमीर हो गया तो इसे खत्म करना मेरा जीवन भर का लक्ष्य बन जाएगा, लेकिन अभी के लिए ...

यह है सुंदर: (0, 1, 2, 3)

####  ##  #### ####
#  #   #  #  #    #
#  #   #    #   ###
#  #   #   #      #
####  ### #### ####

प्रत्येक वर्ण 4 पिक्सेल चौड़ा और 5 पिक्सेल ऊँचा है। अभी! मैं चाहता हूं कि आप मुझे एक ऐसा प्रोग्राम लिखें, जो बहुत सुंदर संख्या में आउटपुट करता हो ताकि मैं प्रिंट के लिए डिज़ाइन भेजना शुरू कर सकूं।

नियम:

इनपुट बेस 4 में एक स्ट्रिंग संख्या है (केवल वर्ण 0-3), उदाहरण के लिए "01321"। कार्यक्रम को स्ट्रिंग में कम से कम 10 वर्णों को संभालने में सक्षम होना चाहिए। बोनस अंक उस प्रोग्राम को दिया जाता है जो एक स्ट्रिंग के बजाय वास्तविक आधार 10 पूर्णांक लेता है। EDIT स्पष्टीकरण: पूर्णांक बोनस का मतलब है कि कोई भी 54321 जैसे किसी भी आधार 10 नंबर दर्ज कर सकता है, और कार्यक्रम इसे आधार 4 में बदल देगा और इसे आउटपुट करेगा (इस मामले में 31100301)।

आउटपुट प्रिटीफोंट के साथ मुद्रित संख्या होगी। उदाहरण इनपुट और आउटपुट:

> "321"
####
   #
 ###
   #
####

####
#  #
  # 
 #  
####

 ## 
  # 
  # 
  # 
 ###

इस तरह के एक एकल पंक्ति-फैशन में उत्पादन कर सकते हैं कि कार्यक्रम के लिए विशाल बोनस:

> "321"
#### ####  ## 
   # #  #   # 
 ###   #    # 
   #  #     # 
#### ####  ### 

'#' चरित्र एक आवश्यकता नहीं है, और इसे किसी भी चरित्र द्वारा प्रतिस्थापित किया जा सकता है।

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

यह कोड गोल्फ है, सबसे छोटा कोड जीतता है! (मुझे इसकी आवश्यकता कम है क्योंकि मेरे कार्यालय के कंप्यूटर में सीमित भंडारण है।)


1
यह बिल्कुल डुप्लिकेट नहीं है, लेकिन इसके और codegolf.stackexchange.com/questions/3628/… के बीच एकमात्र मूलभूत अंतर लुकअप टेबल है।
पीटर टेलर

PrettierFont -banner -c '#' 0123
ड्रेक क्लेरिस

1
4 पिक्सेल चौड़े होने से आपको 'M' के साथ समस्याएँ होती हैं
कैमरन मैकफारलैंड

10 आधार संख्या को इनपुट के रूप में लेने के लिए कितने वर्णों का बोनस है?
डिफॉल्ट

मैं बहुत पक्का नहीं हूँ। मुझे यह जानने के लिए कुछ और समाधान देखने की आवश्यकता है कि यह करना कितना कठिन होगा। मैं खुद कोड गोल्फ में बहुत अच्छा नहीं हूँ ... सुझाव की सराहना की!
१at:

जवाबों:


11

k ( 118 117 72 71 69 66 वर्ण)

मैंने इसे अभी तक गोल्फ के लिए बहुत प्रयास नहीं किया है, लेकिन यह बहुत सारे चार्ट में वांछित क्षैतिज उत्पादन को प्राप्त करता है:

-1'" "/:'+(5 4#/:4 20#"# "@,/0b\:'0x066609ddd806db00e8e0)"I"$'0:0;

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

संपादित करें: आउटपुट "बिटमैप" पर संपीड़न का एक रूप लागू करके, मैंने इसे 72 तक घटा दिया है। बिटमैप अब 64 बिट्स को बाइनरी में परिवर्तित करके और 0s और 1s को "#" या "" मैपिंग करके बनाया गया है। मैं इसे हेक्स से कुछ अन्य समाधानों की तरह कर सकता था, लेकिन मुझे लगता है कि यह लंबे समय तक खत्म होगा । हेक्स बेहतर है।

012301 के लिए नमूना उत्पादन:

####  ##  #### #### ####  ##
#  #   #  #  #    # #  #   #
#  #   #    #   ### #  #   #
#  #   #   #      # #  #   #
####  ### #### #### ####  ###

// संपादित करें: -6 चार


प्रभावशाली। सबसे छोटा कोड अभी तक! यह मेरे सीमित स्टोरेज ड्राइव पर फिट हो सकता है। बहुत बढ़िया।
Accatyyc

डाउन टू 71. यह देखते हुए कि संयुक्त kdb + / q / k exe का वजन स्लिम 392kB पर है, यह आपके सीमित स्टोरेज ड्राइव के लिए आदर्श हो सकता है;)
18

10

पायथन 3 (124)

s=input();[print(*["".join(" #"[0xf171ff429f72226f999f>>(20*int(x)+4*y+i)&1]for i in(3,2,1,0))for x in s])for y in range(5)]

क्षमा करें, ऊर्ध्वाधर मेरे लिए दिलचस्प नहीं था।

???/golf.py
1230012301203012030102301230
 ##  #### #### #### ####  ##  #### #### ####  ##  #### #### #### ####  ##  #### #### #### ####  ##  #### #### #### ####  ##  #### #### ####
  #  #  #    # #  # #  #   #  #  #    # #  #   #  #  # #  #    # #  #   #  #  # #  #    # #  #   #  #  # #  #    # #  #   #  #  #    # #  #
  #    #   ### #  # #  #   #    #   ### #  #   #    #  #  #  ### #  #   #    #  #  #  ### #  #   #  #  #   #   ### #  #   #    #   ### #  #
  #   #      # #  # #  #   #   #      # #  #   #   #   #  #    # #  #   #   #   #  #    # #  #   #  #  #  #      # #  #   #   #      # #  #
 ### #### #### #### ####  ### #### #### ####  ### #### #### #### ####  ### #### #### #### ####  ### #### #### #### ####  ### #### #### ####

कमाल का! क्षैतिज के लिए कुछ वर्णों की अपेक्षा नहीं की थी। अच्छी नौकरी।
Accatyyc

1
धन्यवाद। मुझे लगता है कि मेरे विचार (हेक्स-संख्या और पारियों) को रूबी कार्यान्वयन में भी कम होना चाहिए।
Ev_genus

10

जे, 84 82 81 80 75 69 वर्ण

' #'{~(,4,.(4*".,' ',.1!:1[1)+/i.4){"1#:63231 37521 37415 37441 63487

कीबोर्ड से इनपुट लेता है:

   ' #'{~(,4,.(4*".,' ',.1!:1[1)+/i.4){"1#:63231 37521 37415 37441 63487 63487
0123210
 ####  ##  #### #### ####  ##  ####
 #  #   #  #  #    # #  #   #  #  #
 #  #   #    #   ###   #    #  #  #
 #  #   #   #      #  #     #  #  #
 ####  ### #### #### ####  ### ####

जादू नंबर FTW (या इस मामले में दूसरे स्थान के लिए) :-)


बहुत अच्छा ... बहुत अच्छा ... मैं प्रभावित हूँ! आज कई अच्छे जवाब। शायद मेरे डिजाइनर-प्रिंट ठीक निकलेंगे।
अच्युत

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

@FUZxxl मैंने पूरे 80 बिट के लिए संख्या खोजने की कोशिश की, लेकिन #:संख्या के उस आकार के लिए काम नहीं किया। #:1166416635908028473935870और #:1166416635908028473931775दोनों मेरे लिए एक ही जवाब देते हैं।
गैरेथ

8

सी - 164 151 वर्ण क्षैतिज

IDEone पर: http://ideone.com/gljc3

कोड (164 बाइट्स):

i,j;main(){char n[99];gets(n);for(;j<5;++j){for(i=0;n[i];++i)printf("%.4s ","#####  # ##   #  ### #     #"+4*("01110233340135006460"[(n[i]-48)*5+j]-48));puts("");}}

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

EDIT - 151 बाइट्स

मैंने टिप्पणियों से सुझाव जोड़े और फिर कुछ। हालांकि यह बिल्कुल सुरक्षित नहीं है (0-लंबाई सरणी जो मैं gets()...)।

char i,j=5,n[];main(){for(gets(n);j--;)for(i=puts("");n[i];printf("%.4s ","#####  # ##   #  ### #     #"+4*(0x1A600BA136E0248>>15*n[i++]-720+3*j&7)));}

ध्यान दें, i=puts("")अपरिभाषित व्यवहार के बाद से मैं के voidरूप में इलाज कर रहा हूँ int! यह लगातार 0मेरे MinGW के संस्करण पर लौटता है , लेकिन यह 1कंपाइलर IDEOne के उपयोग पर लौटता है ।

दशमलव स्वीकार करता है, आउटपुट बेस 4 (167 बाइट्स)

char i,j=5,n[];main(p){for(itoa(atoi(gets(n)),n,4);j--;)for(i=puts("");n[i];printf("%.4s ","#####  # ##   #  ### #     #"+4*(0x1A600BA136E0248>>15*n[i++]-720+3*j&7)));}

ऊह, एक छोटी सी! यह निश्चित रूप से मेरे पुराने सीपीयू पर एक मिनट के अंदर चलेगा। अच्छा था।
Accatyyc

क्या "=! 0" को हटाकर आप 3 वर्ण नहीं बचा सकते हैं?
a3nm

हाँ, धन्यवाद। मैंने उस एक को नहीं पकड़ा।
कसलाई ०

getsभीतर रखना for(१ बचाना)। ले जाएँ putsबाहरी करने forके वेतन वृद्धि और ब्रेसिज़ बचाने। पैंतरेबाजी को बचाओ: (n[i]-48)*5+j-> n[i]*5-240+j, के साथ एक ही चाल +4*(..
बदसूरत

153 बाइट्स तक ठीक है। CI अनुमान के लिए बहुत बुरा नहीं है।
कसलाई

7

रूबी, 0123 चार्ट्स + एक बोनस ([0123] बनाम '#')

f=15
0.upto(4){|n|$*[0].chars{|x|$><<"%4s "%eval(:f6ff929192279241f7ff[x.to_i+4*n]).to_i.to_s(2).tr(?0,' ').tr(?1,x)}
puts}

उदाहरण:

% ruby ./font.rb 01231231
0000  11  2222 3333  11  2222 3333  11  
0  0   1  2  2    3   1  2  2    3   1  
0  0   1    2   333   1    2   333   1  
0  0   1   2      3   1   2      3   1  
0000  111 2222 3333  111 2222 3333  111
% ruby ./font.rb 01231231102020103201301203212302230
0000  11  2222 3333  11  2222 3333  11   11  0000 2222 0000 2222 0000  11  0000 3333 2222 0000  11  3333 0000  11  2222 0000 3333 2222  11  2222 3333 0000 2222 2222 3333 0000 
0  0   1  2  2    3   1  2  2    3   1    1  0  0 2  2 0  0 2  2 0  0   1  0  0    3 2  2 0  0   1     3 0  0   1  2  2 0  0    3 2  2   1  2  2    3 0  0 2  2 2  2    3 0  0 
0  0   1    2   333   1    2   333   1    1  0  0   2  0  0   2  0  0   1  0  0  333   2  0  0   1   333 0  0   1    2  0  0  333   2    1    2   333 0  0   2    2   333 0  0 
0  0   1   2      3   1   2      3   1    1  0  0  2   0  0  2   0  0   1  0  0    3  2   0  0   1     3 0  0   1   2   0  0    3  2     1   2      3 0  0  2    2      3 0  0 
0000  111 2222 3333  111 2222 3333  111  111 0000 2222 0000 2222 0000  111 0000 3333 2222 0000  111 3333 0000  111 2222 0000 3333 2222  111 2222 3333 0000 2222 2222 3333 0000 

EDIT: रूबी, 87 वर्ण

0.upto(4){|n|$*[0].bytes{|x|$><<"%04b0"%:f6ff929192279241f7ff[x-48+4*n].to_i(16)}
puts}

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


एक रचनात्मक एक! बहुत अच्छा। यह मेरे डिजाइनों में शानदार लगेगा। एक उत्थान है।
Accatyyc

मुश्किल! इसे समझने में मुझे थोड़ा समय लगेगा।
मैनटवर्क

5

माणिक

कार्यक्षेत्र: ११६ वर्ण

f="f999f62227f924ff171f".chars.map{|c|c.hex.to_s(2).rjust(4).tr"01"," #"}
$<.chars{|c|i=c.to_i*5;$><<f[i,5]*$/+$/*2}

नमूना रन:

bash-4.2$ echo -n 321 | ruby -e 'f="f999f62227f924ff171f".chars.map{|c|c.hex.to_s(2).rjust(4).tr"01"," #"};$<.chars{|c|i=c.to_i*5;$><<f[i,5]*$/+$/*2}'
####
   #
 ###
   #
####

####
#  #
  # 
 #  
####

 ## 
  # 
  # 
  # 
 ###

क्षैतिज: 150 148 वर्ण

f="f999f62227f924ff171f".chars.map{|c|c.hex.to_s(2).rjust(4).tr"01"," #"}
o=(0..4).map{""}
$<.chars{|c|5.times{|j|o[j]<<f[c.to_i*5+j]+" "}}
$><<o*$/

नमूना रन:

bash-4.2$ echo -n 321 | ruby -e 'f="f999f62227f924ff171f".chars.map{|c|c.hex.to_s(2).rjust(4).tr "01"," #"};o=(0..4).map{""};$<.chars{|c|5.times{|j|o[j]<<f[c.to_i*5+j]+" "}};$><<o*$/'
#### ####  ##  
   # #  #   #  
 ###   #    #  
   #  #     #  
#### ####  ### 

मैं इसे उस तरह से एनकोड करने वाला था। मुझे नहीं लगता कि मैं हरा सकता हूं, हालांकि यह मेरी भाषा है!
ग्रिफिन

4

गणितज्ञ 174 145 139 118 119 123 वर्ण

अब बेस 10 (इंटेगर बोनस) में इनपुट के साथ काम करता है। पहले के संस्करण संपादन में मिल सकते हैं।


ArrayPlot का उपयोग करना :

साथ ArrayPlotहम सीधे 1 है और 0 है परिवर्तित कर सकते हैं काले और सफेद वर्गों के लिए, इस प्रक्रिया में कुछ वर्ण बचत। उदाहरण के लिए, n = 58021 , जो कि आधार 4 में 32022211 है:

i = IntegerDigits; i[n, 4] /. Thread@Rule[0~Range~3, ArrayPlot /@ ((PadLeft[#, 4] & /@ i[#, 2]) & /@ (i@{89998, 62227, 89248, 81718} /. {8 -> 15}))]

पूर्णांक बोनस


व्याख्या

इनपुट, कार्यक्रम पैरामीटर है n

शून्य का प्रतिनिधित्व {{1,1,1,1},{1,0,0,1},{1,0,0,1},{1,0,0,1},{1,1,1,1} हेक्स समकक्ष द्वारा या उसके द्वारा किया जा सकता है f999f

अभिव्यक्ति, f999f62227f924ff171fसभी संख्याओं को प्रदर्शित करने के लिए सूचना रखती है {0,1,2,3}। (नोट: इसके साथ शुरू होता है f999f, जिसे हमने नोट किया है, भेस में शून्य है।) क्योंकि गणितज्ञ इसे एक संख्या के रूप में नहीं पहचानता है, मैंने 89998622278924881718इसके बजाय (चार पूर्णांक तार में) का उपयोग किया, संख्या को अपने पूर्णांक अंकों में तोड़ दिया, और फिर उपयोग किया 15 हर जगह एक 8 दिखाई दिया। (इससे मुझे तार के बजाय अंकों का उपयोग करने की अनुमति मिली।)


1
आपका आउटपुट इनपुट से मेल नहीं खाता है।
श्री लिस्टर

क्या आप इसे केवल ऊर्ध्वाधर बोनस के लिए हस्तांतरित नहीं कर सकते हैं?
ग्रिफिन

जैसा कि मैं नियमों को समझता हूं, बोनस क्षैतिज कॉन्फ़िगरेशन के लिए है।
डेविड 34

मिस्टर लिस्टर गुड कैच। मैंने
१.०३:३५

मेरा बुरा, गलत।
ग्रिफिन

3

गणितज्ञ , ११२ १०atic १०३

डेविड की विधि पर मेरा ध्यान है।

i=IntegerDigits;Grid/@i@n/.Thread[0~Range~3->("#"i[i@#/.8->15,2,4]&/@{89998,62227,89248,81718}/.0->"")]

गणितज्ञ ग्राफिक्स

बोनस के साथ 105:

(के लिए n = 54321)

i=IntegerDigits;Grid/@n~i~4/.Thread[0~Range~3->("#"i[i@#/.8->15,2,4]&/@{89998,62227,89248,81718}/.0->"")]

गणितज्ञ ग्राफिक्स


वाकई बहूत बढिया। बोनस के साथ कुछ अक्षर। अच्छा कार्य!
एक्सीटाइक

3

एपीएल ( 58 57)

{' #'[1+5 4⍴1022367 401959 1020495 988959[1+⍎⍵]⊤⍨20⍴2]}¨⍞

आउटपुट:

0123
 #### ## #### #### 
 # # # # # # 
 # # # # # ## 
 # # # # # 
 #### ### #### #### 

2

पायथन 2.7

कार्यक्षेत्र 160

for i in input():print['****\n*  *\n*  *\n*  *\n****',' ** \n  * \n  * \n  * \n***','****\n*  *\n  * \n *  \n****','****\n   *\n ***\n   *\n****'][int(i)]+'\n'

क्षैतिज 234 216

x=[['****\n*  *\n*  *\n*  *\n****',' ** \n  * \n  * \n  * \n ***','****\n*  *\n  * \n *  \n****','****\n   *\n ***\n   *\n****'][int(i)]for i in input()]
for i in range(5):print' '.join([y.split('\n')[i]for y in x])

दोनों इनपुट को स्टड पर उद्धृत स्ट्रिंग के रूप में लेते हैं

उदाहरण:
$ / सुंदर
"0123"


आप इसे कैसे चलाते हैं? मुझे त्रुटियाँ मिलती हैं। पायथन 2: "टाइपर्रोर: 'इंट' ऑब्जेक्ट इटेरेबल नहीं है", पायथन 3: "टाइपइरॉयर: 'बिल्टइन_फंक्शन_ओर_मेथोड' ऑब्जेक्ट सबस्क्रिप्टेबल नहीं है"।
मैनटवर्क 16

@ मैनटवर्क यह अजगर 2.7 में है, मैंने इसका उत्तर स्पष्ट करने के लिए संपादित किया है।
मैट

@manatwork इसके अलावा, ऐसा लगता है कि आप संख्याओं के बिना उनके चारों ओर संख्या में प्रवेश कर रहे होंगे अर्थात: 0123। आपको स्टड पर "0123" दर्ज करने का प्रयास करना चाहिए।
मैट

अब काम करने लगा। क्षमा करें, वह उद्धरण चाल मेरे लिए स्पष्ट नहीं थी।
manatwork

3 इनपुट से पहले अजगर के संस्करणों में @manatwork () फ़ंक्शन इनपुट का मूल्यांकन करता है जैसे कि यह एक अजगर अभिव्यक्ति था। यदि उद्धरण नहीं हैं, तो प्रोग्राम आपको एक पूर्णांक पर पुनरावृत्त करने की कोशिश करता है, जो आपको मिली त्रुटि देता है।
मैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.