रेंडर "डिजिटल क्लॉक स्टाइल" नंबर


28

सबसे छोटा प्रोग्राम लिखें जो इनपुट के रूप में संख्याओं ( कम से कम 20 लंबाई तक) का एक स्ट्रिंग लेगा , और मानक डिजिटल घड़ी शैली संख्याओं का उपयोग करके आउटपुट प्रदर्शित करेगा। उदाहरण के लिए इनपुट 81 के लिए, एएससीआई आउटपुट के साथ एक समाधान देगा:

 _
|_|  |
|_|  |

ग्राफिकल आउटपुट भी स्वीकार्य है, अगर यह मदद करता है।


"इनपुट के रूप में संख्याओं की एक स्ट्रिंग लें" पर कोई ऊपरी सीमा?
अमन ZeeK वर्मा

हम्म, मान लें कि 80 कॉलम स्क्रीन (20) पर एक पंक्ति पर्याप्त है
मूटिनेटर


1
इसके अलावा संबंधित: stackoverflow.com/q/3324301/code-golf-digital-clock
dmckee

जवाबों:


6

APL (Dyalog) (45)

{3 3⍴' _|'[1+⍵⊤⍨9⍴3]}¨⎕UCS'ા8धगɯે૙ࣃଏ૽'[1+⍎¨⍞]

स्ट्रिंग, ા8धगɯે૙ࣃଏ૽यूनिकोड वर्ण हैं 2750 56 2343 2327 623 2759 2777 2243 2831 2813(हालांकि, आपको इसे कॉपी और पेस्ट करने में सक्षम होना चाहिए)। वे संख्याओं को कूटबद्ध करते हैं। कार्यक्रम कीबोर्ड से एक पंक्ति पढ़ता है।

स्पष्टीकरण:

  • 1+⍎¨⍞: कीबोर्ड से एक पंक्ति पढ़ें, प्रत्येक वर्ण को एक अंक के रूप में पार्स करें, फिर प्रत्येक संख्या में 1 जोड़ें (एपीएल सरणियां डिफ़ॉल्ट रूप से 1-आधारित हैं)।
  • ⎕UCS'ા8धगɯે૙ࣃଏ૽'[... ]: आपके द्वारा दर्ज किए गए अंकों के अंकों से संबंधित वर्णों का चयन करें, और यूनिकोड मानों को देखें।
  • {... : इनमें से प्रत्येक मान के लिए, करें:
  • 1+⍵⊤⍨9⍴3: बेस -3 में व्यक्त किए गए मान से पहले 9 बेस -3 अंक प्राप्त करें, और 1 जोड़ें (क्योंकि एरे 1-आधारित हैं)।
  • ' _|'[... ]: इन अंकों के आधार पर एक स्थान, क्षैतिज रेखा या ऊर्ध्वाधर रेखा का चयन करें
  • 3 3⍴: 3-बाय -3 बॉक्स के रूप में प्रारूपित करें।

36

funciton

वास्तव में गोल्फिंग के लिए उपयुक्त भाषा नहीं है ... लेकिन इसकी परवाह किए बिना, मैंने कोड आकार को जितना हो सके उतना छोटा रखने की कोशिश की - "सामान्य" भाषाओं की तुलना में काफी अलग चुनौती। यह 1555 वर्ण या 3110 बाइट्स (यदि UTF-16 के रूप में एन्कोडेड है; UTF-8 बड़ा है)।

यहाँ चल रहे प्रोग्राम का स्क्रीनशॉट है। यह सचमुच काम करता है :)

चूंकि यह अतिरिक्त पंक्ति रिक्ति के कारण StackExchange में बदसूरत दिखता है, इसे ठीक करने के लिए अपने ब्राउज़र के जावास्क्रिप्ट कंसोल में निम्नलिखित कोड चलाने पर विचार करें: $('pre').css('line-height',1)

     ╓─╖ ╔╗┌─╖   ┌─╖
     ║ʜ║ ║╟┤↔╟┐ ┌┤‼╟┐
     ╙┬╜ ╚╝╘═╝│ │╘╤╝│
╔═╗  ┌┴────┐  │┌┴╖ ┌┴╖
║0║ ┌┴─┐  ┌┴─┐└┤ʜ╟─┤·╟┐
╚╤╝┌┴╖┌┴╖┌┴╖┌┴╖╘╤╝ ╘╤╝│
┌┘┌┤·╟┤ɦ╟┤·╟┤?╟ │  ┌┴╖│
│ │╘╤╝╘╤╝╘╤╝╘╤╝ └──┤‼╟┘
│┌┴╖│ ┌┴╖┌┘╔═╧╗    ╘═╝
└┤?╟┘┌┤?╟┘┌╢10║    ┌─────────┐
 ╘╤╝ │╘╤╝┌┘╚══╝ ┌─┬┘╔══╗┌──╖┌┴╖ ╓─╖
  ┘  └───┘╔════╗│┌┴┐║21╟┤>>╟┤·╟┐║ɦ║
╔════════╗║1005╟┘└┬┘╚══╝╘═╤╝╘╤╝│╙┬╜        ┌─┐
║14073768║╚════╝ ┌┴╖ ┌─╖ ┌┴╖┌┴╖└─┴─────────┘┌┴╖
║7584800 ╟───────┤?╟─┤‼╟─┤ʜ╟┤·╟─────────────┤·╟┐╔═══════╗╔══╗
╚════════╝       ╘╤╝ ╘╤╝ ╘╤╝╘╤╝    ╔══╗┌─╖┌┐╘╤╝│║2097151║║21╟┐
 ╔═══════════════╗│   ┘   │  │     ║48╟┤−╟┤├─┤┌┘╚══╤════╝╚══╝│
 ║140737555464224╟┘  ┌────┘┌┬┘     ╚══╝╘╤╝└┘┌┘│╓─╖ │┌┐┌─╖┌─╖┌┴─╖
 ╚═══════════════╝   │ ┌───┘└─────────┐┌┴─╖ │┌┘║↔║ ├┤├┤‼╟┤↔╟┤>>║
┌────────────┐┌────┐┌┴╖│┌────────────┐├┤<<║ ││ ╙┬╜┌┘└┘╘╤╝╘═╝╘╤═╝
│   ╔══╗╔═══╗├┘╓─╖ └┤·╟┘│   ╔══╗╔═══╗├┘╘╤═╝ │└─┐└─┤╔═╗┌┴╖ ┌──┘
│   ║95║║892║│┌╢‡╟┐ ╘╤╝ │   ║95║║877║│ ┌┘╔══╧═╗│  │║0╟┤?╟┬┘
│   ╚═╤╝╚═╤═╝││╙─╜│  │  │   ╚═╤╝╚═╤═╝│╔╧╗║2097║│  │╚═╝╘╤╝│
│╔══╗┌┴╖┌┐│  ││┌─╖│ ┌┴╖ │╔══╗┌┴╖┌┐│  │║1║║151 ║│  └──────┘
│║32╟┤?╟┤├┤  │└┤‼╟┘┌┤‡║ │║32╟┤?╟┤├┤  │╚═╝╚════╝│
│╚══╝╘╤╝└┘└──┴┐╘╤╝ │╘╤╝ │╚╤═╝╘╤╝└┘└──┴┐      ┌─┘
│    ┌┴╖     ┌┴╖┌─╖│ │ ┌┴╖│  ┌┴╖     ┌┴╖ ┌─╖┌┴╖
│    │‼╟─────┤·╟┤‼╟┘ │┌┤·╟┘  │‼╟─────┤·╟─┤‼╟┤‡║
└┐┌┐ ╘╤╝     ╘╤╝╘╤╝  ││╘╤╝┌┐ ╘╤╝     ╘╤╝ ╘╤╝╘╤╝
 ├┤├┐┌┴╖╔══╗  └──┐┌┐ │└┐├─┤├┐┌┴╖╔══╗  ├──┐└  │
 │└┘└┤?╟╢32║╔═══╗├┤│┌┴╖││ └┘└┤?╟╢32║╔═╧═╗│┌┐┌┴╖╔══╗
╔╧══╗╘╤╝╚══╝║881╟┘│├┤?╟┘│    ╘╤╝╚══╝║325║└┤├┤?╟╢32║
║927║╔╧══╗  ╚═══╝ └┘╘╤╝╔╧═══╗╔╧══╗  ╚═══╝ └┘╘╤╝╚══╝
╚═══╝║124╟───────────┘ ║1019║║124╟───────────┘
     ╚═══╝             ╚════╝╚═══╝

यह शायद छोटा हो सकता है अगर मैंने कोई गलती नहीं की थी जिसके कारण आउटपुट वापस सामने था; मैंने तय किया कि इनपुट को रिवर्स करने के लिए एक अतिरिक्त फ़ंक्शन जोड़कर। अन्यथा मुझे शायद यह सब फिर से लिखना होगा।

मैंने एक और गलती भी की (दो कॉल में ऑपरेंड को स्वैप करते हुए ) जो अतिरिक्त फ़ंक्शन को घोषित करने के लिए आवश्यक था , लेकिन यह बहुत छोटा है यह मुख्य फ़ंक्शन के अंदर फिट बैठता है और इस प्रकार किसी भी वर्ण को जोड़ता नहीं है!


8
वाह, यह अच्छा लग रहा है। समाधान ही नहीं, भाषा भी :-)
जॉय

1
यह सिर्फ भयानक है
Knerd

9

wxpython, कई पात्र

import wx, wx.gizmos as g

class T(wx.Frame):
 def __init__(_):
  wx.Frame.__init__(_, None, size = (800, 60))
  l = g.LEDNumberCtrl(_, -1)
  l.Value = raw_input()

class M(wx.App):
 def OnInit(_):
  T().Show()
  return 1

M().MainLoop()

परीक्षा

echo -n 81 | python codegolf-997-wx.py

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

पीएस: एक गंभीर प्रविष्टि नहीं है, लेकिन ऐसा लगता है कि ग्राफिकल आउटपुट भी स्वीकार्य है, इसलिए मैंने अभी इसे आजमाया है :-)


इसे देखने के लिए +1 खुशी :)।
मूटिनेटर

1
आप में से बहुत से लोग। : P
आप

8

गोल्फस्क्रिप्ट - 66 वर्ण

"placeholder text for userscript which counts chars             ";

xxd: ( xxd -rवापस करने के लिए उपयोग )

0000000: 332c 7b3a 533b 2e7b 3438 2d22 5e70 285d  3,{:S;.{48-"^p(]
0000010: 7025 d3c4 4ab1 7d4a b8dc 4469 ce41 2222  p%..J.}J..Di.A""
0000020: f303 227b 6261 7365 7d2f 3330 2f53 3d33  .."{base}/30/S=3
0000030: 2f3d 7b22 5f20 7c22 3d7d 257d 256e 407d  /={"_ |"=}%}%n@}
0000040: 2f3b                                     /;

यह अधिकांश अन्य उत्तरों का अनुसरण करता है कि संख्याओं के बीच कोई स्थान नहीं है और अनुगामी रिक्त स्थान रखे जाते हैं। संख्याओं के बीच का स्थान आसानी से 1+पहले से जोड़ा जा सकता है {"_ |"=}%। एक बेस 3 नंबर में पैक किया गया, और फिर एक स्ट्रिंग में बेस 243 के रूप में।


काफी उचित। मैंने संख्या के बीच अनावश्यक स्थान से परेशान नहीं होने के लिए प्रश्न को अद्यतन किया।
mootinator

6
मुझे लगता है कि "प्लेसहोल्डर ..." बात थोड़ी गड़बड़ है।
12

8

जे, 90 , 78 68 चर

[ अद्यतन: यूनिकोड (1 बाइट) एन्कोडिंग का उपयोग करना:

,./(10 3 3$((90$3)#:256#.24x-~3&u:'%ė¨ÔW/~º»sy¡ăì<t÷²'){' _|'){~"./.Y
NB. utf characters are: 37 279 168 212 87 47 126 186 187 115 121 161 259 236 60 116 247 178

पहले की तरह काम करता है:]

,./(10 3 3$((90$3)#:1219424106940570763878862820444729939648410x){' _|'){~"./. '58321'
 _  _  _  _    
|_ |_| _| _|  |
 _||_| _||_   |

आधार -3 के पूर्णांक के रूप में अंकों की एन्कोडिंग में है। उदाहरण के लिए शून्य है:

:
 _ 
| |
|_|

या ' _ | ||_|', जो 010202212 3 = 2750 हो जाता है ।


मैं 10 अक्षर बचा सकता था यदि J में उच्च परिशुद्धता आधार -36 संख्या थी। किसी को कोई सुझाव?
23

मैं अब बाइनरी का उपयोग कर रहा हूं। मुझे आश्चर्य है कि अगर त्रिशूल मुझे कुछ स्ट्रोक से बचाएगा?
लूसर ड्रोग

2
codegolf.SE पर 1000 वीं पोस्ट करने के लिए बधाई! ( http://codegolf.stackexchange.com/q/1000)
दरवाज़े

2+ साल देर से लेकिन धन्यवाद :)
इप्टिक्स

5

गणितज्ञ 205 209 198 179

i = IntegerDigits; t = Thread; r = Rule;
z@n_ := Row@i@n /. t[r[Range[0, 9], Grid[Partition[ReplacePart[Characters@" _ |_||_|", 
t[r[#, ""]]], 3], Spacings -> 0] & 
/@ (i /@ {5, 24578, 49, 47, 278, 67, 6, 4578, , 78})]]

प्रयोग

z@1234567890

अंक


5

जावास्क्रिप्ट (145)

148 145

चूंकि जावास्क्रिप्ट में वास्तव में मानक इनपुट / आउटपुट नहीं है, यह एक फ़ंक्शन के रूप में लिखा गया है जो एक स्ट्रिंग लेता है और आउटपुट को एक स्ट्रिंग के रूप में लौटाता है।

function r(n){for(i=o="",b=" |_\n|",L=n.length;i<3*L;)o+=b[(c="ǪĠòƲĸƚǚĢǺƺ".charCodeAt(n[i%L])>>(i++/L|0)*3)&1]+b[c&2]+b[c&4]+b[i%L?0:3];return o}

बाहर स्थान:

function r(n)
{
    for (i = o = "", b = " |_\n|", L = n.length;   i < 3*L;   )
        o += b [ (c = "ǪĠòƲĸƚǚĢǺƺ".charCodeAt(n[i%L]) >> (i++/L|0)*3) & 1 ] +
             b [ c&2 ] +
             b [ c&4 ] +
             b [ i%L ? 0 : 3 ];  // space or newline
    return o
}

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

  • हर अंक आकार 9 बिट्स से मिलकर यूनिकोड वर्ण में एन्कोडेड है।
  • पहले तीन बिट्स पहली पंक्ति के लिए हैं, आदि।

  • तीन बिट्स के प्रत्येक समूह में, पहला निर्दिष्ट करता है कि पहला चरित्र है |या अंतरिक्ष, दूसरा है चाहे वह _स्थान है या तीसरा और फिर से |या स्थान है।

  • इन तीन बिट्स को फिर से प्राप्त किया जाता है c&1, c&2और c&4, जिन्हें तब स्ट्रिंग में अनुक्रमित के रूप में उपयोग किया जाता है b

  • प्रत्येक पुनरावृत्ति पर, i%Lइनपुट के भीतर "x- समन्वय" अर्थात अंक होता हैn

  • प्रत्येक पुनरावृत्ति पर, i/L"y- समन्वय", अर्थात पंक्ति है, लेकिन हमें |0इसे पूर्णांक बनाने की आवश्यकता है

  • अंत में, अंकों और लाइनों के बीच की नई रेखाओं के बीच के रिक्त स्थान को भी उस स्ट्रिंग में bपुन: उपयोग करके और अन्यथा अप्रयुक्त स्थिति 3 का उपयोग करके, अनुक्रमित करके पुनः प्राप्त किया जाता है ! :)


यूनिकोड! बाह! ... खैर, यह मेरी तुलना में छोटा है। +1
लुसर ड्रोग


3

गोल्फस्क्रिप्ट - 97 वर्ण

:*{32' _':$@'14'{?~!=}:&~32}%n*{:x' |':|\'1237'&$x'017'&|x'56'&}%n*{:x|\'134579'&$x'147'&|x'2'&}%

सभी संख्यात्मक स्ट्रिंग्स के लिए एक चार्ट को बचाने के लिए बैकटिक का उपयोग करें (मैं कोड प्रारूप में इस चरित्र को कैसे
डालूं

@ नब: आप नहीं कर सकते - StackExchange की तरह बकवास है ...
Timwi

3

विंडोज पॉवरशेल, 127

$i="$input"[0..99]
'☺ ☺☺ ☺☺☺☺☺','♠☻♥♥♦♣♣☻♦♦','♦☻♣♥☻♥♦☻♦♥'|%{$c=$_
""+($i|%{('···0·_·0··|0·_|0|_|0|_·0|·|'-split0)[$c[$_-48]]})}

चूंकि तार में कुछ अप्रिय-से-लिखित वर्ण होते हैं, आपकी सुविधा के लिए एक हेक्सडंप:

000: 24 69 3D 22 24 69 6E 70 │ 75 74 22 5B 30 2E 2E 39  $i="$input"[0..9
010: 39 5D 0A 27 01 00 01 01 │ 00 01 01 01 01 01 27 2C  9]◙'☺ ☺☺ ☺☺☺☺☺',
020: 27 06 02 03 03 04 05 05 │ 02 04 04 27 2C 27 04 02  '♠☻♥♥♦♣♣☻♦♦','♦☻
030: 05 03 02 03 04 02 04 03 │ 27 7C 25 7B 24 63 3D 24  ♣♥☻♥♦☻♦♥'|%{$c=$
040: 5F 0A 22 22 2B 28 24 69 │ 7C 25 7B 28 27 20 20 20  _◙""+($i|%{('
050: 30 20 5F 20 30 20 20 7C │ 30 20 5F 7C 30 7C 5F 7C  0 _ 0  |0 _|0|_|
060: 30 7C 5F 20 30 7C 20 7C │ 27 2D 73 70 6C 69 74 30  0|_ 0| |'-split0
070: 29 5B 24 63 5B 24 5F 2D │ 34 38 5D 5D 7D 29 7D     )[$c[$_-48]]})}

5
सभी स्माइलीज को देखें ..
वांग डिंगवेई

3

gForth, 186 175 वर्ण

नया संस्करण:

: s query parse-word bounds s" D@DD@DDDDDb`ddfFF`fff`Fd`df`f`" bounds do cr 2dup do i c@ '0 - j + c@ 3 0 do dup 3 and s"  _|" drop + 1 type 4 / loop drop loop 10 +loop bye ; s

यह वास्तव में (+3 वर्ण) से बाहर निकलने के लिए परेशान करता है :)। यहां अधिक पठनीय संस्करण है, यह LUT के आकार को 1/3 से कम करने के लिए कुछ बिट-पैकिंग करता है, लेकिन परिणामस्वरूप कोड अधिक जटिल है, इसलिए यह बहुत बचत नहीं है:

: 7s query parse-word bounds 
    s" D@DD@DDDDDb`ddfFF`fff`Fd`df`f`"
    bounds do 
        cr
        2dup do
            i c@ '0 - j + c@
            3 0 do
                dup 3 and
                s"  _|" drop + 1 type
                4 / \ shorter than an rshift
            loop
            drop
        loop
    10 +loop bye ;
7s

पुराना संस्करण:

: s query parse-word bounds s"  _     _  _     _  _  _  _  _ | |  | _| _||_||_ |_   ||_||_||_|  ||_  _|  | _||_|  ||_|  |" bounds do cr 2dup do i c@ '0 - 3 * j + 3 type loop 30 +loop ; s

यह ढेर को असंतुलित कर देता है और दुभाषिया से बाहर निकलने की जहमत नहीं उठाता। यहाँ एक क्लीनर अधिक पठनीय संस्करण है

: 7s query parse-word bounds 
    s"  _     _  _     _  _  _  _  _ | |  | _| _||_||_ |_   ||_||_||_|  ||_  _|  | _||_|  ||_|  |"
    bounds do 
        cr
        2dup do
            i c@ '0 - 3 * j + 3 type
        loop
    30 +loop 2drop bye ;
7s

2

C # 369 वर्ण

static void Main(string[] a){var b = new[] {123,72,61,109,78,103,119,73,127,111};var g = new[]{" _  ","|","_","| ","|","_","| "};a[0].ToCharArray().SelectMany((x,w)=>g.Select((y,i)=>new{s=((b[x-48]>>i&1)==1)?y:new String(' ',y.Length),j=i,v=w})).GroupBy(z=>(z.j+2)/3).ToList().ForEach(q=>Console.WriteLine(String.Join("", q.OrderBy(l=>l.v).Select(k=>k.s).ToArray())));}

मैं आसानी से कुछ पात्रों को काट सकता था। LINQ का दुरुपयोग करने के लिए बिंदु अधिक था :)

अधिक व्हाट्सएप संस्करण:

static void Main(string[] a)
{
    var b = new[] {123, 72, 61, 109, 78, 103, 119, 73, 127, 111};
    var g = new[] { " _  ", "|", "_", "| ", "|", "_", "| " };
    a[0].ToCharArray().SelectMany(
        (x,w)=>g.Select(
           (y,i)=>new{s=((b[x-48]>>i&1)==1)?y:new String(' ',y.Length),j=i,v=w}))
            .GroupBy(z=>(z.j+2)/3).ToList().ForEach(
            q=>Console.WriteLine(
                String.Join("", q.OrderBy(l=>l.v).Select(k=>k.s).ToArray())));
}

सबसे पहले, आपको एक वर्ग घोषणा और usingएस (409) की आवश्यकता है। फिर कुछ अनावश्यक व्हाट्सएप है जिसे हटाया जा सकता है (402)। कार्य बताता है कि अंकों के बीच व्हाट्सएप छोड़ा जाएगा (399)।
जॉय

उह, धन्यवाद। मैंने कार्य संपादित किया क्योंकि कोई भी मूल व्हाट्सएप नियम का पालन नहीं कर रहा था। जवाब को संपादित करने के लिए स्वतंत्र महसूस करें यदि यह आपको परेशान करता है, क्योंकि मुझे परवाह नहीं है।
मूटिनेटर

gकेवल एक बार उपयोग किया जाता है, इसलिए आप इसे इनलाइन करके 7 वर्णों को बचा सकते हैं।
तिमवी

1
वास्तव bमें इसका उपयोग केवल एक बार किया जाता है, इसलिए आप इसे भी इनलाइन कर सकते हैं। इसके अलावा, यदि आप वास्तविक वर्ण # 127 (जो अप्राप्य, लेकिन अनुज्ञेय है) में बदलते हैं, तो आप बहुत सारे वर्णों को सहेज सकते हैं, यदि आप पूर्णांक सरणी को बदल सकते हैं "{H=mNgwI\x7fo", या उससे भी कम कर सकते हैं \x7f>>अभी भी काम करेगा क्योंकि से एक अंतर्निहित रूपांतरण है वहाँ charकरने के लिए int
तिमवी

इसके अलावा, .ToCharArray()और .ToArray()दोनों निरर्थक हैं, आप उन्हें हटा सकते हैं :)
टिमवी

2

जावा सॉल्यूशन: 585 570 रुपये

मुझे नहीं लगता कि मैं जावा में किसी और गोल्फिंग का प्रयास करूंगा ...

import java.util.*;
public class CG997{public static void main(String[]args){
short[][]lets=new short[][]{{0,1,3,2,0,4,2,1,4},{0,0,3,0,0,4,0,0,4},{0,1,3,0,1,
4,2,1,3},{0,1,3,0,1,4,0,1,4},{0,0,3,2,1,4,0,0,4},{0,1,3,2,1,3,0,1,4},{0,1,3,2,1
,3,2,1,4},{0,1,3,0,0,4,0,0,4},{0,1,3,2,1,4,2,1,4},{0,1,3,2,1,4,0,0,4}};
String[]syms=new String[]{" ","_","|","  ","| "};
String s=new Scanner(System.in).nextLine();
for(int o=0;o<3;o++){for(char c:s.toCharArray()){for(int i =0;i<3;i++)
System.out.print(syms[lets[Short.parseShort(c+"")][i+o*3]]);
}System.out.println();}}}

आपका जावा संस्करण मेरे से बेहतर / छोटा है :) btw! ... डिजिटल घड़ी प्रतिनिधित्व में 6 शीर्ष पर एक टोपी (_) है या नहीं? आपके आउटपुट के बाद मैं उलझन में पड़ गया!
अमन ज़ीके वर्मा

मेरे पीछे कॉफी मेकर की जाँच करने पर, 6 की टोपी होनी चाहिए। मैं अपना समाधान अपडेट करूंगा।
मिच

2

अजगर, 218 180 176

b=map(int,raw_input());a=map(int,bin(914290166014670372457936330)[2:]);c=' |_';p=lambda k:''.join(c[a[9*n+k]]+c[2*a[9*n+1+k]]+c[a[9*n+2+k]]for n in b)+'\n';print p(6)+p(0)+p(3)

लाइन ब्रेक के साथ:

b=map(int,raw_input())
a=map(int,bin(914290166014670372457936330)[2:])
p=lambda k:''.join(' |'[a[9*n+k]]+' _'[a[9*n+1+k]]+' |'[a[9*n+2+k]]for n in b)+'\n'
print p(6)+p(0)+p(3)

2

बैश, 11 अक्षर

toilet "$i"

हां मुझे पता है, मैं धोखा दे रहा हूं।

आपको शौचालय स्थापित करने की आवश्यकता है।


1
और 7 सेगमेंट डिस्प्ले नंबर के साथ डिफ़ॉल्ट फ़ॉन्ट सेट करें। figletकाम भी करेगा।
रॉब

2

जावा, 2,095

public class DigitalNumber {
    public static void main(String args[]){
        char[][] panel = new char[3][120]; //A 20 digit panel!
        int digXIndex = 0;int digYIndex = 0;
        for (int i=0;i<args[0].length(); i++){
            int dig=Integer.parseInt(""+args[0].charAt(i));
            panel[digXIndex][digYIndex]=32;   
            digYIndex++;
            if (dig!=1 && dig!=4)
                panel[digXIndex][digYIndex]='_';  
            else
                panel[digXIndex][digYIndex]=32;
            digYIndex++;
                panel[digXIndex][digYIndex]=32; 
            digYIndex=3*i;
            digXIndex++;
            if (dig!=1 && dig!=2 && dig!=3 && dig!=7)
                panel[digXIndex][digYIndex]='|';    
            else
                panel[digXIndex][digYIndex]=32;
            digYIndex++;
            if (dig!=1 && dig!=0 && dig!=7)
                panel[digXIndex][digYIndex]='_';    
            else
                panel[digXIndex][digYIndex]=32;
            digYIndex++;
            if (dig!=6 && dig!=5)
                panel[digXIndex][digYIndex]='|';  
            else
                panel[digXIndex][digYIndex]=32;
            digYIndex=3*i;
            digXIndex++;
            if (dig!=6 && dig!=8 && dig!=2 && dig!=0)
                panel[digXIndex][digYIndex]=32;  
            else
                panel[digXIndex][digYIndex]='|';
            digYIndex++;
            if (dig!=7 && dig!=4 && dig!=1)
                panel[digXIndex][digYIndex]='_';  
            else
                panel[digXIndex][digYIndex]=32;
            digYIndex++;
            if (dig!=2)
                panel[digXIndex][digYIndex]='|';  
            else
                panel[digXIndex][digYIndex]=32;
            digXIndex=0;
            digYIndex+=(i*3)+1;
        }       
        for (int i=0; i<3; i++){
            for (int j=0; j<120; j++)
                if (panel[i][j]!=0)
                System.out.print((char)(panel[i][j]));
                else
                    System.out.print("");
            System.out.println();
        }   
    }
}

नमूना मैं / हे

java DigitalNumber 98765432109876543210
     _  _  _  _  _     _  _     _  _  _  _  _  _     _  _     _ 
    |_||_|  ||_ |_ |_| _| _|  || ||_||_|  ||_ |_ |_| _| _|  || |
     _||_|  ||_| _|  | _||_   ||_| _||_|  ||_| _|  | _||_   ||_|

5
मुझे जावा से नफरत करना शुरू करना चाहिए :)
अमन ज़ीके वर्मा

1
जावा कई चीजों के लिए महान है, लेकिन ट्रिक कोड उनमें से एक नहीं है।
जोनाथन एम डेविस

2
ठीक है, इस कोड को भी गोल्फ नहीं है। यह छोटा हो सकता है।
जॉय

मैंने आपका कोड थोड़ा
गँवा दिया

1

D: 295 वर्ण

import std.stdio;void main(string[]a){string[3]o;foreach(c;a[1]){int n=cast(int)(c)-48;auto e=" ";o[0]~=n!=1&&n!=4?" _ ":"   ";o[1]~=!n||n>3&&n!=7?"|":e;o[1]~=n>1&&n!=7?"_":e;o[1]~=n<5||n>6?"|":e;o[2]~=!(n&1)&&n!=4?"|":e;o[2]~=!n||n>1&&n!=4&&n!=7?"_":e;o[2]~=n!=2?"|":e;}foreach(l;o)writeln(l);}

अधिक कानूनी रूप से:

import std.stdio;

void main(string[] a)
{
    string[3] o;

    foreach(c; a[1])
    {
        int n = cast(int)(c) - 48;
        auto e = " ";

        o[0] ~= n != 1 && n != 4 ? " _ " : "   ";

        o[1] ~= !n || n > 3 && n != 7 ? "|" : e;
        o[1] ~= n > 1 && n != 7 ? "_" : e;
        o[1] ~= n < 5 || n > 6 ? "|" : e;

        o[2] ~= !(n&1) && n != 4 ? "|" : e;
        o[2] ~= !n || n > 1 && n != 4 && n != 7 ? "_" : e;
        o[2] ~= n != 2 ? "|" : e;
    }

    foreach(l; o)
        writeln(l);
}

1

ओकेमेल, 268

let t=function|'1'|'4'->"   "|_->" _ "let m=function|'0'->"| |"|'1'|'7'->"  |"|'2'|'3'->" _|"|_->"|_|"|'5'|'6'->"|_ "let b=function|'0'|'8'->"|_|"|'1'|'4'|'7'->"  |"|'2'->"|_ "|_->" _|"let f s=let g h=String.iter(fun c->print_string(h c))s;print_newline()ing t;g m;g b

पठनीय संस्करण

let t = function
  | '1'
  | '4' -> "   "
  | _ -> " _ "
let m = function
  | '0' -> "| |"
  | '1'
  | '7' -> "  |"
  | '2'
  | '3' -> " _|"
  | _ -> "|_|"
  | '5'
  | '6' -> "|_ "
let b = function
  | '0'
  | '8' -> "|_|"
  | '1'
  | '4'
  | '7' -> "  |"
  | '2' -> "|_ "
  | _ -> " _|"
let f s =
  let g h =
    String.iter (fun c -> print_string (h c)) s;
    print_newline () in
  g t;
  g m;
  g b

1

पर्ल (182 180)

#!perl -l
$_=<<7;
 _     _  _     _  _  _  _  _ 
| |  | _| _||_||_ |_   ||_||_|
|_|  ||_  _|  | _||_|  ||_| _|
7
@b=map{[/(...)/g]}split/\n/;@d=split//,<>;for$p(@b){print map$p->[$_],@d}

STDIN से पढ़ता है।

$ perl 7segment.pl 
1234567890987654321
    _  _     _  _  _  _  _  _  _  _  _  _  _     _  _     _ 
  | _| _||_||_ |_   ||_||_|| ||_||_|  ||_ |_ |_| _| _|  || |
  ||_  _|  | _||_|  ||_| _||_| _||_|  ||_| _|  | _||_   ||_|

1

Ghostscript (270) (248) (214)

संपादित करें: अधिक प्रतिस्थापन। अंकों के बीच का खाली स्थान।

संपादित करें: और भी प्रतिस्थापन। मुख्य लूप अब ऐसा लगता है कि यह क्या करता है!

/F{forall}def[48<~HUp;::1ncBInp~>{1 index 1 add}F
pop/*{dup
2 idiv exch
2 mod
1 eq}/P{print}/#{( )P}/?{ifelse
P}/O{{( )}?}/|{*{(|)}O}/_{*{(_)}O}>>begin[[[[ARGUMENTS{{load
# _ #}F()=]2{{| _ |}F()=]}repeat]pop[[[[}F

भूत-प्रेत के तर्क-प्रसंस्करण सुविधा का उपयोग करता है: के साथ आह्वान करें gs -dNODISPLAY -- digit.ps 012 345 6789


1

डेल्फी || 453 (प्रारूप के साथ 568)

जीतने के करीब भी नहीं लेकिन यह ^ ^ करने के लिए मजेदार था

const asc: array[0..9] of array[0..2] of string = ((' _ ','| |','|_|'),('   ','  |','  |'),(' _ ',' _|','|_ '),(' _ ',' _|',' _|'),('   ','|_|','  |'),(' _ ','|_ ',' _|'),(' _ ','|_ ','|_|'),(' _ ','  |','  |'),(' _ ','|_|','|_|'),(' _ ','|_|',' _|'));var s,l:string;x,i:integer;begin Readln(s);s:=StringReplace(s,' ','',[rfReplaceAll]);for I := 0 to 2 do begin l:='';for x := 1 to length(s) do l := l + asc[StrToInt(s[x])][i];writeln(l);end;readln;end.  

प्रारूप के साथ

const
asc: array[0..9] of array[0..2] of string = (
  (' _ ','| |','|_|'),
  ('   ','  |','  |'),
  (' _ ',' _|','|_ '),
  (' _ ',' _|',' _|'),
  ('   ','|_|','  |'),
  (' _ ','|_ ',' _|'),
  (' _ ','|_ ','|_|'),
  (' _ ','  |','  |'),
  (' _ ','|_|','|_|'),
  (' _ ','|_|',' _|'));
var
s,l:string;
x,i:integer;
begin
    Readln(s);
    s:=StringReplace(s,' ','',[rfReplaceAll]);
    for I := 0 to 2 do
    begin
      l:='';
      for x := 1 to length(s) do
        l := l + asc[StrToInt(s[x])][i];
      writeln(l);
    end;
    readln

समाप्त।


1

PHP, 140 136 133 131 129 129 बाइट्स

मैं विस्तारित एस्की के साथ 5 7 और अधिक बचा सकता हूं : प्रत्येक के लिए एक "| _"और लाइनब्रेक, तीन के लिए ~"z/]{4lno~|"(बिटवाइस नेगेटेशन विस्तारित एस्की पात्रों के लिए सब कुछ बदल देगा = कोई विशेष वर्ण नहीं है, और पीएचपी को वहां उद्धरण की आवश्यकता नहीं है), दो के लिए -1(इट्स) केवल वहाँ मानक ascii में नक्शा रखने के लिए)। लेकिन पठनीयता और अनुकूलता के लिए, मैं मानक एससीआई के साथ रहता हूं।

for(;""<$c=$argv[1][$i++];)for($n=753754680;$n>>=3;)$r[$p++%3].="| _"[ord(~"z/]{4lno~|"[$c])-1>>$n%8&1?:$n&2];echo join("
",$r);

बिटमैप

  • LEDS ले लो _, |_|, |_|बिट्स के रूप में -6-, 024, 135(बिट संख्या और 2 ऊर्ध्वाधर एल ई डी के लिए 0)
  • संख्या 0..9 के लिए बिटमैप बनाएं: [123,48,94,124,53,109,111,112,127,125]
  • 1 से घटाकर उन सभी मुद्रण योग्य आस्की कोड -> बनाने के लिए "z/]{4lno~|"
  • नकार -> ~"z/]{4lno~|"(चरित्र चयन में टर्नरी शॉर्टहैंड की अनुमति देता है)

नमूना

  • का उपयोग 7रिक्त स्थान के लिए -> 767, 024,135
  • पंक्तियों के बजाय स्तंभों के आधार पर फिर से इकट्ठा -> 701, 623, 745(renders $p=0अप्रचलित)
  • रिवर्स -> 547326107(मैप को दाईं से बाईं ओर पढ़ें; अंकगणितीय लूपिंग की अनुमति देता है)
  • शून्य जोड़ें -> 5473261070(लूप हेड में परीक्षण के साथ बदलाव को संयोजित करने की अनुमति देता है)
  • अष्टक पढ़ें, दशमलव में परिवर्तित करें -> 753754680(दो बाइट्स छोटे: एक अंक और उपसर्ग)

टूट - फूट

for(;""<$c=$argv[1][$i++];) // loop through input characters
    for($n=753754680;$n>>=3;)   // loop through template
        $r[$p++%3].="| _"[          // append character to row $p%3:
            ord(~"z/]{4lno~|"[$c])-1// decode bitmap
                >>$n%8&1            // test bit $n%8 (always 1 for bit 7)
            ?                       // if set: 1 (space)
            :$n&2                   // else: 2 (underscore) for bits 2,3,6; 0 (pipe) else
        ];
echo join("\n",$r);         // print result

हेक्साडेसिमल के लिए +16 बाइट्स:ord(~"z/]{4lno~|v.J=NF"[hexdec($c)])-1
टाइटस

1

जावा 8, 280 बाइट्स

interface M{static void main(String[]a){String x="",y=x,z=x;for(int c:a[0].getBytes()){c-=48;x+=" "+(c==4|c==1?" ":"_")+" ";y+=(c==7|c>0&c<4?" ":"|")+(c==7|c<2?" ":"_")+(c>4&c<7?" ":"|");z+=(c%2<1&c!=4?"|":" ")+(c%3==1?" ":"_")+(c==2?" ":"|");}System.out.print(x+"\n"+y+"\n"+z);}}

स्पष्टीकरण:

इसे यहाँ आज़माएँ।

interface M{                     // Class
  static void main(String[]a){   //  Mandatory main-method
    String x="",                 //   String for row 1, starting empty
           y=x,                  //   String for row 2, starting empty
           z=x;                  //   String for row 3, starting empty
    for(int c:a[0].getBytes()){  //   Loop over the bytes of the input
      c-=48;                     //    Convert the byte to integer
      x+=                        //    Append to row 1:
         " "                     //     a space
         +(c==4|c==1?            //     +If the digit is a 1 or 4:
            " "                  //       Append a space
           :                     //      Else:
            "_")                 //       Append an underscore
         +" ";                   //     + another space
      y+=                        //    Append to row 2:
         (c==7|c>0&c<4?          //      If the digit is 1, 2, 3, or 7:
           " "                   //       Append a space
          :                      //      Else:
           "|")                  //       Append a pipe
         +(c==7|c<2?             //     +If the digit is 0, 1, or 7:
            " "                  //       Append a space
           :                     //      Else:
            "_")                 //       Append an underscore
         +(c>4&c<7?              //     +If the digit is 5 or 6:
            " "                  //       Append a space
           :                     //      Else:
            "|");                //       Append a pipe
      z+=                        //    Append to row 3:
         (c%2<1&c!=4?            //      If the digit is 0, 2, 6 or 8:
           "|"                   //       Append a pipe
          :                      //      Else:
           " ")                  //       Append a space
          +(c%3==1?              //     +If the digit is 1, 4, or 7:
             " "                 //       Append a space
            :                    //      Else:
             "_")                //       Append a pipe
          +(c==2?                //     +If the digit is 2:
             " "                 //       Append a space
            :                    //      Else:
             "|");               //       Append a pipe
    }                            //   End of loop
    System.out.print(x+"\n"+y+"\n"+z);
                                 //   Print the three rows
  }                              //  End of main-method
}                                // End of class

फ़ंक्शन के बजाय यह 218 बाइट्स होगा।


0

पायथन, 227 चरस

a="   ";b=" _ ";c="|_|";d="| |";e="|  ";f="  |";g="|_ ";h=" _|"
z=[[b,d,c],[a,f,f],[b,h,g],[b,h,h],[a,c,f],[b,g,h],[b,g,c],[b,f,f],[b,c,c],[b,c,h]]
x=map(int,raw_input())
for i in range(3):
 for j in x:
  print z[j][i],
 print

सरल और सीधा।


0

पर्ल, 145 अक्षर

$i=<>;for$s(6,3,0){for($i=~/./g){$v=(175,9,158,155,57,179,183,137,191,187)[$_]>>$s;$o.=($v&4?'|':$").($v&2?'_':$").($v&1?'|':$")}$o.="
"}print$o

Ungolfed:

# Read STDIN
$i = <>;
# Amount to bit shift later
for $s (6,3,0)
{
  # For each character C from STDIN
  for ($i =~ /./g)
  {
    # Get the Cth array index, bit shifted right by $s
    $v = (175, 9, 158, 155, 57, 179, 183, 137, 191, 187)[$_]>>$s;
    # Concatenate each character if the bitwise masked value says it should be there
    $o .= ($v & 4 ? '|' : $") .
          ($v & 2 ? '_' : $") .
          ($v & 1 ? '|' : $");
  }
  # Concatenate a newline
  $o .= "
";
}
# Print the result
print $o;

0

अजगर 3.4.3 - 1514 858 बाइट्स

इसे हल करने के लिए प्रलोभन साइन अप करने और उत्तर देने के लिए बहुत अच्छा नहीं था = पी

मैं पायथन के लिए थोड़ा नया हूं, इसलिए मैंने अपने कार्यक्रम को अच्छा और साफ-सुथरा (या कम से कम मैंने किया) स्वरूपित किया। सुधार की बहुत सराहना की जाती है!

import sys;l1,l2,l3,l4,l5="";num=input()
for c in num:
    if c=="1":
        l1+=" oo  ";l2+="  o  ";l3+="  o  ";l4+="  o  ";l5+="oooo "
    if c=="2":
        l1+="oooo ";l2+="   o ";l3+="oooo ";l4+="o    ";l5+="oooo "
    if c=="3":
        l1+="oooo ";l2+="   o ";l3+=" ooo ";l4+="   o ";l5+="oooo "
    if c=="4":
        l1+="o  o ";l2+="o  o ";l3+="oooo ";l4+="   o ";l5+="   o "
    if c=="5":
        l1+="oooo ";l2+="o    ";l3+="oooo ";l4+="   o ";l5+="oooo "
    if c=="6":
        l1+="oooo ";l2+="o    ";l3+="oooo ";l4+="o  o ";l5+="oooo "
    if c=="7":
        l1+="oooo ";l2+="   o ";l3+="   o ";l4+="   o ";l5+="   o "
    if c=="8":
        l1+="oooo ";l2+="o  o ";l3+="oooo ";l4+="o  o ";l5+="oooo "
    if c=="9":
        l1+="oooo ";l2+="o  o ";l3+="oooo ";l4+="   o ";l5+="oooo "
    if c=="0":
        l1+="oooo ";l2+="o  o ";l3+="o  o ";l4+="o  o ";l5+="oooo "
print(l1+"\n"+l2+"\n"+l3+"\n"+l4+"\n"+l5)

संपादित करें: लघु चर नाम, प्रयुक्त; उत्पादन संख्या के अंत में केवल एक स्थान को छोटा करने के लिए, एक साथ सभी चर को परिभाषित करें।

नई लाइनें 2 बाइट्स (CRLF) हैं और मैंने 4 स्थानों के बजाय टैब का उपयोग किया।


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

"मैंने 4 स्थानों के बजाय टैब का उपयोग किया है" मैं भ्रमित हूं। तुम वैसे भी टैब का उपयोग क्यों नहीं कर रहे थे? ;)
लाइटनेस दौड़ मोनिका के साथ

0

स्माइलबासिक, 216 बाइट्स

?INPUT N$DIM A[14]COPY A,@A@A
DATA 1,0,0,1,3,1,1,3,0,4,3,4,1,6FOR D=0 TO LEN(N$)-1X=ASC("w$]m.k{%\o"[VAL(N$[D])])FOR I=0TO 6T=I*2IF X<<31THEN GBOX A[T]+D*5,A[T+1],A[T]+D*5+!(I MOD 3),A[T+1]+!!(I MOD 3)
X=X/2NEXT
NEXT

पाठ के बजाय ग्राफिक्स का उपयोग करना, क्योंकि यह शायद कम है।

स्पष्टीकरण:

PRINT 'so the input and output don't overlap
INPUT NUMBER$ 'get number
DIM PTS[7*2] 'locations of segments
COPY PTS,@PTDATA 'copy data into array
@PTDATA
DATA 1,0,0,1,3,1,1,3,0,4,3,4,1,6 'stored as x,y,x,y,...
FOR DIGIT=0 TO LEN(NUMBER$)-1
 NUM=ASC("w$]m.k{%\o"[VAL(NUMBER$[DIGIT])]) 'get digit data. That data string doesn't have any non-ASCII characters, except \ which is 127 in SB.
 FOR I=0 TO 7-1 'draw each segment
  T=I*2 'position of point in array
  IF X AND 1 THEN GLINE PTS[T]+DIGIT*5,PTS[T+1],PTS[T]+DIGIT*5+!(I MOD 3),PTS[T+1]+!!(I MOD 3) 'draw segment. I MOD 3 determines whether it's horizontal or vertical.
  X=X>>1 'shift to next bit
 NEXT
NEXT

0

सी ++, 230 229 225 223 218 207 204 198 बाइट्स

#import<iostream>
#define d for(auto
std::string v[3],t,g="|_| =2$0^262\'032;2$2?272";main(){std::cin>>t;d i:t)d j:{0,1,2})d k:{0,1,2})v[k]+=g[g[i*2-92+!k]>>j+k/2*3&1?j:3];d j:v)std::cout<<j<<'\n';}

स्टड और आउटपुट से स्टडआउट तक पढ़ता है।

स्पष्टीकरण:

#import<iostream>                // string inside

std::string v[3], t, g="|_| "    // symbol on different horizontal position
      "=2$0^262\'032;2$2?272";   // space(0) or not(1) for each number and position
                                 // binary representation, last 6 bits is used
                                 // even positions are for row 1, 2; odds are for row 0

main() {
    std::cin>>t;                 // input
    for (auto i:t)               // for each character
        for (auto j:{0,1,2})     // for each horizontal position
            for (auto k:{0,1,2}) // for each vertical position
                v[k]+=g[         // use first four chars only
                    g[i*2-92     // i*2-96 is number*2, +4 to skip first four
                        +!k]     // row 0 uses another character
                    >>j+k/2*3    // (k==2?3:0)+j, the expected bit
                    &1           // extract the bit
                    ?j:3         // space or not space
                ];

    for (auto j:v) std::cout<<j<<'\n'; // output
}

0

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

param($a)6,3,0|%{$l=$_
-join($a|% t*y|%{('   0 _ 0 _|0|_ 0| |0  |0|_|'-split0)[(+('f-SR5Z^mvr'["$_"])-shr$l)%8]})}

टेस्ट स्क्रिप्ट:

$f = {

param($a)6,3,0|%{$l=$_
-join($a|% t*y|%{('   0 _ 0 _|0|_ 0| |0  |0|_|'-split0)[(+('f-SR5Z^mvr'["$_"])-shr$l)%8]})}

}

&$f "1234567890"
&$f "81"

आउटपुट:

    _  _     _  _  _  _  _  _
  | _| _||_||_ |_   ||_||_|| |
  ||_  _|  | _||_|  ||_| _||_|
 _
|_|  |
|_|  |

मुख्य विचार:

प्रत्येक मानक डिजिटल क्लॉक स्टाइल नंबर में 3 लाइनें होती हैं। इसके अलावा, पहली पंक्ति में केवल 2 विकल्प हैं। कुल 6 विकल्प। इसलिए, 7 बिट्स प्रत्येक अंक को एनकोड करने के लिए पर्याप्त हैं।

line str=@('   ', ' _ ', ' _|', '|_ ', '| |', '  |', '|_|')

#    line str    binary       dec    ASCII
-    --------    ---------    ---    -----
0 -> 1 
     4 
     6        -> 1 100 110 -> 102 -> 'f'

1 -> 0
     5
     5        -> 0 101 101 ->  45 -> '-'

...

8 -> 1
     6
     6        -> 1 110 110 -> 118 -> 'v'

9 -> 1
     6
     2        -> 1 110 010 -> 114 -> 'r'

तो, स्ट्रिंग f-SR5Z^mvrसभी खंडों को सभी मानक डिजिटल घड़ी शैली संख्याओं के लिए एन्कोड करती है।

नोट: के आदेश line strको विशेष रूप से चुना गया था ताकि सभी कोड अंतराल में हों 32..126

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