“디지털 시계 스타일”숫자 렌더링 걸릴 최단 프로그램 작성 적어도 입력으로 길이

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

 _
|_|  |
|_|  |

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



답변

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⍴: 3×3 상자 형식입니다.

답변

펀시 턴

실제로 골프에 적합한 언어는 아니지만 … 어쨌든, 나는 코드 크기를 가능한 작게 유지하려고 노력했습니다.“일반적인”언어와는 상당히 다른 도전이었습니다. 이다 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╟───────────┘
     ╚═══╝             ╚════╝╚═══╝

출력이 앞뒤로 오해되어 실수를하지 않으면 더 작아 질 수 있습니다. 입력을 반전시키는 추가 기능을 추가하여 문제를 해결했습니다. 그렇지 않으면 아마 모든 것을 다시 써야 할 것입니다.

또한 다른 함수 를 호출하여 피연산자를 두 번 호출 하여 여분의 함수 를 선언해야 했지만 실수 가 너무 작기 때문에 주 함수 안에 들어가 므로 문자를 추가하지 않습니다!


답변

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

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


답변

골프 스크립트-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으로 문자열로 묶습니다.


답변

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


답변

매쓰 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


답변

자바 스크립트 (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! 🙂