(위의 행 번호의 문자열 걸릴 최단 프로그램 작성 적어도 입력으로 길이 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
추신 : 심각한 항목은 아니지만 그래픽 출력도 허용되는 것처럼 보이므로 방금 시도해 보았습니다 🙂
답변
골프 스크립트-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
답변
자바 스크립트 (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! 🙂