"디지털 시계 스타일"숫자 렌더링


28

(위의 행 번호의 문자열 걸릴 최단 프로그램 작성 적어도 입력으로 길이 20), 표준 디지털 시계 스타일 번호를 사용하여 출력을 표시한다. 예를 들어 입력 81의 경우 ascii 출력 솔루션은 다음을 제공합니다.

 _
|_|  |
|_|  |

도움이된다면 그래픽 출력도 허용됩니다.


"숫자로 문자열을 입력으로 사용"에 대한 상한?
Aman ZeeK Verma

흠, 80 열 화면 (20)의 한 행 만으로 충분 하다고 가정 해 봅시다 .
mootinator


답변:


6

APL (다이아 로그) (45)

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

문자열 ા8धगɯે૙ࣃଏ૽은 유니 코드 문자입니다 2750 56 2343 2327 623 2759 2777 2243 2831 2813(단, 복사하여 붙여 넣기 만하면됩니다). 그들은 숫자를 인코딩합니다. 프로그램은 키보드에서 줄을 읽습니다.

설명:

  • 1+⍎¨⍞: 키보드에서 줄을 읽고 각 문자를 숫자로 구문 분석 한 다음 각 숫자에 1을 추가하십시오 (APL 배열은 기본적으로 1을 기반으로 함).
  • ⎕UCS'ા8धगɯે૙ࣃଏ૽'[... ]: 입력 한 숫자의 자릿수에 속하는 문자를 선택하고 유니 코드 값을 찾습니다.
  • {... : 이러한 각 값에 대해 다음을 수행하십시오.
  • 1+⍵⊤⍨9⍴3: base-3에 표시된대로 값에서 처음 9 자리 -3 자리를 가져오고 1을 추가합니다 (배열은 1부터 시작하므로).
  • ' _|'[... ]:이 자릿수에 따라 공백, 수평선 또는 수직선을 선택합니다
  • 3 3⍴: 3x3 상자 형식입니다.

36

펀시 턴

실제로 골프에 적합한 언어는 아니지만 ... 어쨌든, 나는 코드 크기를 가능한 작게 유지하려고 노력했습니다.“일반적인”언어와는 상당히 다른 도전이었습니다. 이다 1,555 문자 또는 3110 바이트 (UTF-16 인코딩 된 경우, UTF-8은 크다).

다음은 실행중인 프로그램의 스크린 샷입니다. 이것은 진짜 작동한다 :)

추가 줄 간격으로 인해 StackExchange에서보기에 좋지 않게 표시되므로 브라우저의 JavaScript 콘솔에서 다음 코드를 실행하여 문제를 해결하십시오. $('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
우와, 멋지다. 해결책뿐만 아니라 언어도 :-)
Joey

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

enter image description here

추신 : 심각한 항목은 아니지만 그래픽 출력도 허용되는 것처럼 보이므로 방금 시도해 보았습니다 :-)


+1이 :)
mootinator

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
"자리 표시 자 ..."가 다소 혼란 스럽다고 생각합니다.
Eelvex

8

J, 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이됩니다.


J에 고정밀 36 자릿수가 있으면 10자를 절약 할 수 있습니다. 누구든지 제안?
Eelvex

지금 바이너리를 사용하고 있습니다. 삼진이 뇌졸중을 막을 수 있을지 궁금합니다.
luser droog

2
codegolf.SE에 1000 번째 게시물을 보내 주셔서 감사합니다. ( http://codegolf.stackexchange.com/q/1000)
Doorknob

2 년 이상 늦었지만 감사합니다 :)
Eelvex

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

digits


5

자바 스크립트 (145)

148 145

JavaScript에는 실제로 표준 입력 / 출력이 없으므로 문자열을 가져 와서 출력을 문자열로 반환하는 함수로 작성됩니다.

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 비트로 구성된 유니 코드 문자로 인코딩됩니다.
  • 처음 3 비트는 첫 번째 행 등을위한 것입니다.

  • 3 비트, 제 첫 문자가 있는지 여부를 지정의 각 군 |이나 공간의 것이 든 제 _또는 공간, 다시 세 번째 |또는 공간.

  • 이러한 3 비트는 검색되고 c&1, c&2그리고 c&4그 스트링에 대한 인덱스로서 사용하는 b.

  • 각 반복 i%L에서 "x 좌표", 즉 입력 내의 숫자n

  • 각 반복 i/L에서 "y 좌표", 즉 행이지만|0 정수로 만들어야합니다.

  • 마지막으로, 숫자 및 선간 바꿈 사이의 공간이되는 에 의해 검색된 색인 b재 사용 공백 문자 해당 문자열의 위치 그렇지 않는 3! :)


유니 코드! 바아! ... 음, 그것은 이다 나보다 짧다. +1
luser droog

5

루비, 142

' _     _  _     _  _  _  _  _ 
| |  | _| _||_||_ |_   ||_||_|
|_|  ||_  _|  | _||_|  ||_| _|'.lines{|l|puts x.chars.map{|i|l[i.to_i*3,3]}*''}

변수 입력이 필요합니다 x. 예 :

x = '321'
#  _  _    
#  _| _|  |
#  _||_   |

x = '42'
#      _ 
#  |_| _|
#    ||_ 

ooooo. 예쁜! ...
luser droog

3

골프 스크립트-97 자

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

백틱을 사용하여 모든 숫자 문자열에 대한 문자를 저장하십시오 (코드 형식으로이 문자를 어떻게 삽입합니까?)
Nabb

@Nabb : 당신은 할 수 없습니다 — StackExchange는 그렇게 쓸모가 없습니다 ...
Timwi

3

윈도우 PowerShell, 127

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

문자열에는 쓸데없는 문자가 포함되어 있으므로 편의를위한 hexdump :

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
모든 스마일을보세요 ..
Wang Dingwei

3

g 포스, 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())));
}

우선, 클래스 선언과 usings (409) 가 필요합니다 . 그런 다음 제거 할 수있는 불필요한 공백이 있습니다 (402). 이 과제는 숫자 사이의 공백은 생략해야한다고 명시하고있다 (399).
Joey

고마워 아무도 원래의 공백 규칙을 따르지 않았기 때문에 작업을 편집했습니다. 내가 신경 쓰지 않기 때문에 대답이 마음에 들지 않으면 자유롭게 편집하십시오.
mootinator

g한 번만 사용되므로 인라인으로 7자를 저장할 수 있습니다.
Timwi

1
실제로도 b한 번만 사용되므로 인라인 할 수도 있습니다. 또한 정수 배열을로 변경하면 많은 문자를 저장할 수 있고 실제 문자 # 127 (인쇄 할 수는 있지만 허용되는)로 "{H=mNgwI\x7fo"변경하면 더 짧아 질 수 있습니다 \x7f. 는 >>에서 암시 적 변환이 있기 때문에 여전히 작동 char에가 int.
Timwi

또한, .ToCharArray()과가 .ToArray()모두 중복, 당신은 단지 :) 제거 할 수 있습니다
Timwi

2

자바 솔루션 : 585570 Chars

Java에서 더 이상 골프를 시도하지 않을 것이라고 생각합니다 ...

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 개 상단에 캡 (_)이 있습니까? 출력 후 혼란스러워했습니다!
Aman ZeeK Verma

내 뒤에 커피 메이커를 확인하면 6의 뚜껑이 있어야합니다. 솔루션을 업데이트하겠습니다.
Mitch

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작동합니다.
Rob

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();
        }   
    }
}

샘플 I / O

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

5
나는 :) 자바를 미워 시작해야
아만 ZeeK 베르에게

1
Java는 여러 가지면에서 훌륭하지만 간결한 코드는 그중 하나 가 아닙니다 .
조나단 M 데이비스

2
글쎄,이 코드는 골프화되지 않았다. 더 짧을 수 있습니다.
Joey

난 당신의 코드를 약간
골프

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

고스트 스크립트 (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

고스트 스크립트의 인수 처리 기능을 사용합니다. invoke with 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 128 바이트

내가 구할 수 5 확장 ASCII 더 7 : 하나의 각 "| _"에 대한 그리고 LINEBREAK 세 ~"z/]{4lno~|", 두 (확장 ASCII 문자 = 특수 문자 및 PHP 나던 필요 시세가 모든 것을 될지는 비트 부정) -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);

비트 맵

  • LED를 가지고 _, |_|, |_|비트로 -6-, 024, 135(비트 번호 (2)는 수직 LED 용 0)
  • 숫자 0..9에 대한 비트 맵을 만듭니다. [123,48,94,124,53,109,111,112,127,125]
  • 인쇄 가능한 ASCII 코드를 모두 만들기 위해 1 씩 줄입니다.-> "z/]{4lno~|"
  • 부정-> ~"z/]{4lno~|"(문자 선택에서 3 진 속기 허용)

템플릿

  • 사용 7공간에 대한 -> 767, 024,135
  • 대신 행의 열에 의해 재 그룹 -> 701, 623, 745(가 렌더링 $p=0되지 않는)
  • 반전-> 547326107 (오른쪽에서 왼쪽으로 맵을 읽고 산술 반복 가능)
  • 0 추가-> 5473261070 (루프 헤드에서 테스트와 시프트를 결합 할 수 있습니다)
  • 8 진수 읽기, 10 진수로 변환-> 753754680(2 바이트 더 짧음 : 1 자리 숫자 및 접두사)

고장

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 진 +16 바이트 :ord(~"z/]{4lno~|v.J=NF"[hexdec($c)])-1
Titus

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

언 골프 드 :

# 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 바이트

이 문제를 해결하려는 유혹은 가입하지 않고 너무 = P

나는 파이썬에 약간 익숙하므로 프로그램을 멋지게 깔끔하게 포맷했다. 개선에 크게 감사드립니다!

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
프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다! 이것은 코드 골프 도전이므로 코드를 최대한 짧게 만들고 싶을 것입니다. 이 팁 은 골프에 도움 될 수 있습니다.
Alex A.

"네 공백 대신 탭을 사용했습니다" 혼란 스러워요. 어쨌든 탭을 사용하지 않은 이유는 무엇입니까? ;)
Monica와의 가벼움 경주

0

SmileBASIC, 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

C ++, 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';}

stdin에서 읽고 stdout으로 출력합니다.

설명:

#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 줄이 있습니다. 또한 첫 번째 줄에는 두 가지 옵션 만 있습니다. 총 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.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.