시계 문자판 표시


39

다음과 같이 시계 숫자판에 12 개의 숫자를 정확하게 표시하십시오.

           12            
     11           1      

 10                   2  


9                       3


  8                   4  

      7           5      
            6            

격자를 더 잘 보려면 점이있는 격자가 있습니다.

...........12............
.....11...........1......
.........................
.10...................2..
.........................
.........................
9.......................3
.........................
.........................
..8...................4..
.........................
......7...........5......
............6............

격자는 더 정사각형으로 보이도록 너비가 2 배 늘어납니다.

또한 두 자리 숫자는 해당 자리 숫자와 정렬됩니다. 9 자리는 왼쪽으로 플러시되어야합니다.

결과를 여러 줄 문자열 (줄 목록이 아님)로 반환하거나 인쇄하십시오. 후행 공백은 선택 사항입니다. 마지막 줄 바꿈도 선택 사항입니다.

답변:


25

, 40 바이트

F¹²«M⁻↔⁻¹⁴⊗÷×⁴鳦⁸⁻⁴↔⁻⁷÷×⁴﹪⁺³ι¹²¦³P←⮌I⊕ι

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명 : 각 숫자 사이의 오프셋을 수학적으로 계산합니다. 숯은 0- 인덱싱되므로 ( 출력 ) 가로 및 세로 오프셋의 공식은 다음과 같습니다.112

δx=|1424i3|8δy=4|74i3|

여기서 입니다.i=i+3(mod12)


22

자바 스크립트 (Node.js) , 91 바이트

매우 영리한 접근 방식은 아니지만 지금은 더 짧은 것을 찾지 못했습니다.

_=>`K12
E11K1

A10S2


9W3


B8S4

F7K5
L6`.replace(/[A-Z]/g,c=>''.padEnd(Buffer(c)[0]&31))

온라인으로 사용해보십시오!


4
나는 Buffer ()를 대안으로 사용하는 것을 좋아합니다charCodeAt()
Downgoat

1
@Downgoat Node.js 질문 에서 골프 관련 팁 , 노드 관련 기능이 필요한지 궁금 합니다. 그러나 그만한 가치가 있는지 확실하지 않습니다.
Arnauld

어쩌면 모든 노드 특정 기능을 포함하는 별도의 답변을 추가하거나 적어도 모든 다른 답변을 연결하는 목록을 추가 할 수 있습니까?

15

05AB1E , 39 33 31 바이트

6 바이트를 절약 한 Magic Octopus Urn 에 감사 합니다!

암호

6xsG12N-N•°£•NèØú«тR∞Nè¶×]\6».c

일부 33 바이트 대안 :

711ćŸā•Σ°w•₂вú‚øJƵt3в¶×‚ø»6xŠ».c¦
6xsŸ5L•Σ°w•₂вúõ¸ì‚ζJï2Ý«ƶ×)ø».c
6xsG¶12N-N•Θ{©•₂вNèú«ƵB∞Nè¶×]6J.c
6xsG12N-N•Θ{©•₂вNèú«тR∞Nè¶×]6s».c

05AB1E 인코딩을 사용합니다 . 온라인으로 사용해보십시오!


좋은 대답입니다! ÿ와 함께 사용하는 것을 .V매우 독창적입니다! 그리고 당신이 스택 과 스택을 12¤모두 사용하는 방법에 대해 재미 있습니다 . 아마 방금 사용했을 것입니다 . 그러나 스택에 12와 2가 있기 때문에 어떻게 관련이없는 것 같습니다. 05AB1E에서이 챌린지를 시도했다면 바이트 수는 훨씬 더 높아 졌을 것입니다. 아직도 배울 것이 많습니다. ;)12212Y
Kevin Cruijssen

@KevinCruijssen 오 예, 나는 잊어 버렸습니다 Y. 그것은 더 쉬운 옵션입니다.
Adnan

6 바이트 미만으로 6을 수정하고 있는지 모르겠지만 6xsŸ5L•δ;Ì’•2ôúð.ø‚ζJ012∞S¶×‚ζJ.c여기에서 사용하는 것을 환영합니다.
매직 문어 Urn

1
@MagicOctopusUrn 지퍼로 멋진 트릭을 생각하지 못했습니다.
Adnan

1
@adnan 소품 6xŠ»도 생각하지 못했습니다.
Magic Octopus Urn

10

6502 머신 코드 (C64), 82 76 73 바이트

00 C0 A2 0E BD 38 C0 29 03 A8 A9 0D 20 25 C0 BD 38 C0 4A 4A A8 A9 20 20 25 C0
BD 29 C0 20 D2 FF CA 10 E1 60 20 D2 FF 88 10 FA 60 36 35 37 34 38 33 39 32 30
31 31 31 31 32 31 31 2C 1A 4C 0B 5C 03 4C 00 06 2C 00 15 00 2C
  • 영리한 아이디어 덕분에 Arnauld 덕분에 -6 바이트 :)
  • Arnauld의 생각 뒤에 다른 -3 바이트는 선행 1자릿수를 특수하게 처리하지 않습니다

여기서 아이디어는 모든 숫자의 자릿수를 필요한 순서대로 저장하는 것입니다. 추가 정보는 앞에 추가 할 줄 바꿈 수와 공백 수입니다.

줄 바꿈의 최대 개수는 3이므로 2 비트가 필요하고 최대 공백 수는 235이므로 충분합니다. 따라서 인쇄 할 각 숫자마다이 정보를 단일 "제어 바이트"로 압축 할 수 있습니다.

따라서이 솔루션의 데이터는 정확히 30 바이트 (15 개의 단일 숫자 및 15 개의 연관된 "제어 바이트")를 사용합니다.

온라인 데모

사용법 : SYS49152시작합니다.

주석 처리 된 분해 :

         00 C0                          ; load address
.C:c000  A2 0E       LDX #$0E           ; table index, start from back (14)
.C:c002   .mainloop:
.C:c002  BD 38 C0    LDA .control,X     ; load control byte
.C:c005  29 03       AND #$03           ; lowest 3 bits are number of newlines
.C:c007  A8          TAY                ; to Y register for counting
.C:c008  A9 0D       LDA #$0D           ; load newline character
.C:c00a  20 25 C0    JSR .output        ; repeated output subroutine
.C:c00d  BD 38 C0    LDA .control,X     ; load control byte
.C:c010  4A          LSR A              ; and shift by two positions for ...
.C:c011  4A          LSR A              ; ... number of spaces
.C:c012  A8          TAY                ; to Y register for counting
.C:c013  A9 20       LDA #$20           ; load space character
.C:c015  20 25 C0    JSR .output        ; repeated output subroutine
.C:c018  BD 29 C0    LDA .digits,X      ; load current digit
.C:c01b  20 D2 FF    JSR $FFD2          ; output
.C:c01e  CA          DEX                ; decrement table index
.C:c01f  10 E1       BPL .mainloop      ; still positive -> repeat
.C:c021  60          RTS                ; and done.
.C:c022   .outputloop:
.C:c022  20 D2 FF    JSR $FFD2          ; output a character
.C:c025   .output:
.C:c025  88          DEY                ; decrement counting register
.C:c026  10 FA       BPL .outputloop    ; still positive -> branch to output
.C:c028  60          RTS                ; leave subroutine
.C:c029   .digits:
.C:c029  36 35 37 34 .BYTE "6574"
.C:c02d  38 33 39 32 .BYTE "8392"
.C:c031  30 31 31 31 .BYTE "0111"
.C:c035  31 32 31    .BYTE "121"
.C:c038   .control:
.C:c038  31 2C 1A 4C .BYTE $31,$2C,$1A,$4C
.C:c03c  0B 5C 03 4C .BYTE $0B,$5C,$03,$4C
.C:c040  00 06 2C 00 .BYTE $00,$06,$2C,$00
.C:c044  15 00 2C    .BYTE $15,$00,$2C

2
JSR $FFD2 / DEY / BNE loop / LDA .control,X / RTS바꿈과 공백을 모두 호출 하는 서브 루틴을 사용하여 2 바이트를 절약 할 수 있습니까? 나는 그것이 +10 바이트 길이이고 메인 코드에서 -12 바이트를 절약 할 것이라고 생각합니다.
Arnauld

1
실제로 서브 루틴이 수행 JSR $FFD2 / DEY / BPL loop / LDA .control,X / RTS하고 진입 점이 인 경우 더 많은 바이트를 절약 할 수 있다고 생각 합니다 DEY. 이런 식으로 0메인 코드에서 테스트 할 필요가 없습니다 .
Arnauld

좋은 생각 감사합니다, 나중에 편집합니다. 그러나 후자는 작동하지 않으므로 전체 루프를 건너 뛰는 경우가 필요합니다.
Felix Palmen

1
Y = 0이면 DEY / BPL / RTS처리하지 않고 즉시 종료됩니다 JSR $FFD2. (그 체계에서 서브 루틴의 진입 점은이어야합니다 DEY.)
Arnauld

1
@Arnauld는 약간의 실험을 거친 후 모든 자릿수 저장 제안을 사용하는 동안 서브 루틴을 유지하는 것이 가장 짧은 것으로 생각합니다. :)
Felix Palmen


6

R , 75 68 바이트

write("[<-"(rep("",312),utf8ToInt('*`®÷ĥĹĚä—M'),1:12),1,25)

온라인으로 사용해보십시오!

숫자 위치를 압축했습니다. 삼각법에 대한 답을 찾기 위해 많은 시간을 소비 한 후에이 작업을 수행했습니다 (편집 기록 참조).

이 다른 R 답변에서 영감을 받아 J.Doe를 구매하십시오!

J.Doe 덕분에 7 바이트를 절약했습니다.


68 바이트 -산술을 피하기 위해 해시를 변경 write하고 기본 구분 기호를 사용하도록 호출을 변경했습니다 .
J.Doe

1
@ J.Doe이 방법이 더 의미가 있습니다. 물론 내 골프를 문서화하지 않은 이유는 왜 처음에 복잡한 해시를했는지 전혀 모른다.
JayCe

5

HTML + JavaScript (캔버스), 13 + 161 = 174 바이트

임의의 캔버스 위치는 6 바이트를 사용합니다.

with(C.getContext`2d`)with(Math)for(font='9px monospace',textAlign='end',f=x=>round(sin(x*PI/6)*6)*measureText(0).width*2,x=13;--x;)fillText(x,f(x)+80,f(9-x)+80)
<canvas id=C>

비교를 위해 그리드 사용 :

with(C.getContext`2d`)with(Math){
    for(font='9px monospace',textAlign='end',f=x=>round(sin(x*PI/6)*6)*measureText(0).width*2,x=13;--x;)fillText(x,f(x)+80,f(9-x)+80)
    for(globalAlpha=0.2,y=-6;y<=6;y++)fillText('.'.repeat(25),6*measureText('.').width*2+80,y*measureText(0).width*2+80)
}
<canvas id=C>


포지셔닝 수식 설명

SVG answerJavaScript를 참조하십시오 .


8
ASCII 아트이기 때문에 챌린지에서 정확한 바이트 스트림 지정을 생성해야하지만 출력처럼 보이는 이미지를 렌더링해야하기 때문에 이것이 중요하지 않습니다.
Downgoat

5

자바 8 11 141 138 바이트

v->{for(var x:"92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G".getBytes())System.out.print(x<59?" ".repeat(x-48):(char)(x>76?10:x-17));}

온라인으로 사용해보십시오 (참고 : Java 11은 아직 TIO가 아니기 때문에 동일한 바이트 수에 대해 String.repeat(int)에뮬레이트됩니다 repeat(String,int).)

설명은 아래와 비슷하지만 " ".repeat(x-48)형식 대신 공백을 사용합니다 "%"+(x-48)+"s".


자바 8, 141 바이트

v->{for(var x:"92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G".getBytes())System.out.printf("%"+(x>58?"c":x-48+"s"),x>76?10:x>58?x-17:"");}

온라인으로 사용해보십시오.

설명:

v->{                        // Method with empty unused parameter and no return-type
  for(var x:"92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G".getBytes())
                            //  Loop over the bytes of the above String:
    System.out.printf("%"+  //   Print with format:
     (x>58?                 //    If the character is a letter / not a digit:
       "c"                  //     Use "%c" as format
      :                     //    Else:
       x-48+"s"),           //     Use "%#s" as format, where '#' is the value of the digit
     x>76?                  //    If the byte is 'N':
      10                    //     Use 10 as value (newline)
     :x>58?                 //    Else-if the byte is not a digit:
      x-17                  //     Use 48-58 as value (the 0-9 numbers of the clock)
     :                      //    Else:
      "");}                 //     Use nothing, because the "%#s" already takes care of the spaces

추가 설명 92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G:

  • 모든 숫자가 해당 공간으로 대체됩니다. (따라서 11 칸이됩니다 92.)
  • 모든 'N'은 줄 바꿈입니다.
  • 모든 [ 'A', 'J']는 시계 숫자입니다 ([0,9])

5

R, 168 (159) 125 바이트

텍스트 매트릭스에서 규정 된 지점에 숫자를 쓰는 순진한 솔루션. 포인트는 다음을 통해 디코딩 된 UTF-8 문자로 저장됩니다utf8ToInt

"!"=utf8ToInt
write("[<-"(matrix(" ",25,13),cbind(!"LMFGSBCWAYCWGSM",!"AABBBDDDGGJJLLM")-64,-64+!"ABAAAA@BICHDGEF"),1,25,,"")

JayCe의 제안으로 write행렬을 정의하고 사용 하지 말라고 9 바이트를 삭제했습니다 .

JayCe의 스토리지 제안으로 또 다른 34 바이트를 삭제했습니다.


PPCG에 오신 것을 환영합니다! 점은 패턴을 시각화하는 데 도움이되지만 출력의 일부는 아닙니다.
Jonathan Frech

PPCG에 오신 것을 환영합니다! 당신이하지 정의 일부 바이트 asve 수 m및 사용을 write: TIO를 . 추신 : 답변에 TIO 링크를 포함시킬 의무는 없지만 답변을 멋지게 형식화합니다 (TIO 페이지 상단의 링크 아이콘 참조).
JayCe

문자열에 포인트를 저장하고 !연산자를 오버로드하여 125 자를 얻을 수 있습니다. 정말 좋은 해결책!
JayCe



5

브레인 퍽 , 240 235 바이트

++++++++++[>++>+>+++>+++++>++>++[<]>-]>>>++...........>-.+.<<.>.....>-..<...........>.<<..>.>.-.>-[<<.>>-]<++.<<...>>+++++++.>>+++[<<<.>>>-]<<------.<<...>..>+++++.<<<-[>>.<<-]>>>----.<<..>......>+++.<...........>--.<<.>............>+.

온라인으로 사용해보십시오!

주석이 달린 코드

++++++++++                              Put 10 in cell 0
[>++>+>+++>+++++>++>++[<]>-]            Loop 10 times incrementing to leave 0 20 10 30 50 20 20 in memory 
>>>++                                   30 plus 2 = 32 (ascii space)
...........>-.+.                        print 11spaces followed by 12 (ascii 49 50)
<<.>.....>-..<...........>.             print 1newline 5spaces 11 11spaces 1 
<<..>.>.-.>-[<<.>>-]<++.                print 2newlines 1space 10 19spaces 2
<<...>>+++++++.>>+++[<<<.>>>-]<<------. print 3newlines         9 23spaces 3
<<...>..>+++++.<<<-[>>.<<-]>>>----.     print 3newlines 2spaces 8 19spaces 4
<<..>......>+++.<...........>--.        print 2newlines 6spaces 7 11spaces 5
<<.>............>+.                     print 1newline  12spaces 6

텍스트가 브레인 퍽 프로그램이보다 작다는 것을 반복 충분하다 희귀 한 예를 두 번 출력의 1.6 배 길이!

Jo King의 제안으로 2 바이트가 절약되었습니다 >>>>>>-.->[<]>-

아스키 코드의 가장 오른쪽 10 30 50에서 왼쪽으로 세 번째 20 자리 하위 카운터를 이동하면 3 바이트가 절약됩니다 . 저장 <<>>사이의 갭을 채울 때 84있지만 라인 1 바이트를 추가한다 >>>++.

원본 버전

++++++++++                              Put 10 in cell 0
[>+>+++>+++++>++>++>++<<<<<<-]          Loop 10 times incrementing to leave 0 10 30 50 20 20 20 in memory 
>>++                                    30 plus 2 = 32 (ascii space)
...........>-.+.                        print 11spaces followed by 12 (ascii 49 50)
<<.>.....>-..<...........>.             print 1newline 5spaces 11 11spaces 1 
<<..>.>.-.>-[<<.>>-]<++.                print 2newlines 1space 10 19spaces 2
<<...>>+++++++.>>+++[<<<.>>>-]<<------. print 3newlines         9 23spaces 3
<<...>..>+++++.>>>-[<<<<.>>>>-]<<<----. print 3newlines 2spaces 8 19spaces 4
<<..>......>+++.<...........>--.        print 2newlines 6spaces 7 11spaces 5
<<.>............>+.                     print 1newline  12spaces 6


4

젤리 , 32 바이트

⁶ẋ“¿×¿ Œ4ç4Œ!¿Ø‘ż“øn0œ’Œ?D¤Fs25Y

결과를 인쇄하는 전체 프로그램.

온라인으로 사용해보십시오!

어떻게?

(나는 아직 “¿×¿ Œ4ç4Œ!¿Ø‘이 부분에 대해 나 보다 길게 보이는 것 보다 더 짧은 것을 생각하거나 발견하지 못했습니다 .

⁶ẋ“¿×¿ Œ4ç4Œ!¿Ø‘ż“øn0œ’Œ?D¤Fs25Y - Main Link: no arguments
⁶                                - space character
  “¿×¿ Œ4ç4Œ!¿Ø‘                 - code-page indices list = [11,17,11,32,19,52,23,52,19,33,11,18]
 ẋ                               - repeat (vectorises) -> [' '*11, ' '*17, ...]
                          ¤      - nilad followed by link(s) as a nilad:
                 “øn0œ’          -   base 250 number = 475699781
                       Œ?        -   first natural number permutation which would be at
                                 -   index 475699781 if all permutations of those same
                                 -   natural numbers were sorted lexicographically
                                 -   = [12,11,1,10,2,9,3,8,4,7,5,6]
                         D       -   to decimal lists = [[1,2],[1,1],[1],[1,0],[2],[9],[3],[8],[4],[7],[5],[6]]
                ż                - zip together = [[' '*11, [1,2]], [' '*17, [1,1]], ...]
                           F     - flatten = [' ',' ',...,1,2,' ',' ',...,1,1,...]
                            s25  - split into chunks of 25 (trailing chunk is shorter)
                               Y - join with new line characters
                                 - implicit print

LOL 저는 이것이 순진한 접근법이라는 사실에 놀랐습니다.
Outgolfer Erik

4

C (GCC) , 145 (137) 125 바이트

탭 위치 만 하드 코딩됩니다. 모든 줄 간격과 클럭 값이 루프에서 생성됩니다.

제안에 대해 천장에 다시 한 번 감사드립니다.

i,j,k;f(char*t){for(i=7;i--;t=memset(t+sprintf(t,"%*d%*d"+3*!j,"NHDA"[j]-65,6+i,"AMUY"[j]-65,6-i),10,k=j+i/4)+k)j=i>3?6-i:i;}

온라인으로 사용해보십시오!


"\r\7\3"[j]대신 제안"NHDA"[j]-65
ceilingcat

3

PHP , 97 바이트

<?=gzinflate(base64_decode(U1CAA0MjLghtqIAkyMWlYGiggAmMuLi4LBWwA2OgnIKCBRYZEy6IHQrmSIKmXMhKzAA));

온라인으로 사용해보십시오!

이것은 하드 코딩 된 압축 문자열입니다. 이보다 짧은 솔루션을 찾을 수 없습니다!


바이너리 압축 문자열을 소스 파일에 넣고 base64_decode를 건너 뛸 수 있습니까? 나는 이것을 시도하고 'gzinflate () : data error'를 얻지 만 소스 파일이 텍스트 편집기 대신 16 진수 편집기로 작성된 경우 가능할 수 있습니다.
bdsl

@bdsl 실제로 이전에 그렇게했고 HEX 편집기가 필요하지 않으며 PHP 자체를 사용할 수 file_put_contents($path, '<?=gzinflate("'.gzdeflate($clockString,9).'");');있지만 바이너리 데이터가 포함 된 코드를 게시하는 방법을 잘 모르겠습니다. 이와 같은 파일은 70 바이트입니다.
Night2

3

파이크 , 37 바이트

3B 32 35 75 07 0d 13 0c 22 14 35 18 44 74 5F 74 2B 46 6F 68 32 C4 52 7D 74 2A 31 32 25 31 32 7C 60 52 2D 29 73

여기 사용해보십시오! (원시 바이트)

;25Dt_t+Foh2.DR}t*12%12|`R-)s

여기 사용해보십시오! (인간이 읽을 수있는)

                              - o = 0
;25                           - set line width to 25 characters
                              -      `[13, 19, 12, 34, 20, 53, 24]`
                              -       (In hex version, encoded in base 256, regular version in input field)
    t_t                       -     reversed(^[1:])[1:]
   D   +                      -    ^^ + ^
        Foh2.DR}t*12%12|`R-)  -   for i in ^:
         o                    -            o++
          h                   -           ^+1
           2.DR               -          divmod(^, 2)
               }t             -         (remainder*2)-1
                 *            -        quotient * ^
                  12%         -       ^ % 12
                     12|      -      ^ or 12 (12 if 0 else ^)
                        `     -     str(^)
                         R-   -    ^.rpad(i) (prepend spaces such that length i)
                            s -  sum(^)
                              - output ^ (with newlines added)

3

브레인 퍽 , 315 313 바이트

ovs 덕분에 2 바이트 절약 !

++++[>++++<-]>[>+++>+++>+++>+++>>++>+++>+++>+++<<<<<<<<<-]>+++++>++++>+++>++>++++++++++>>+++++++>+><<<...........>>.<<<<.>.>.....>>..<<...........>>.<<<..>.>>.>.<<<...................<<.>...>>++.<.......................<<<.>>...>..>-.<...................<<<<.>>>..>......>-.<...........<<<<<.>>>>.>............>-.

온라인으로 사용해보십시오!

하나의 코드 블록에서 모두 :

++++[>++++<-]>[>+++>+++>+++>+++>>++>+++>+++>+
++<<<<<<<<<-]>+++++>++++>+++>++>++++++++++>>+
++++++>+><<<...........>>.<<<<.>.>.....>>..<<
...........>>.<<<..>.>>.>.<<<................
...<<.>...>>++.<.......................<<<.>>
...>..>-.<...................<<<<.>>>..>.....
.>-.<...........<<<<<.>>>>.>............>-.

++++[>++++<-]>처음에는 16에 사용할 수 있습니다 .
ovs

@ovs 아, 물론 감사합니다 !!
코너 오브라이언

롤, 당신은 ><당신의 코드에있다
Jo King

3

Powershell, 94 88 82 바이트

직접 Powershell 형식 연산자 . {i,w}은 index 매개 변수의 자리 표시자를 의미하며 자리 표시 자의 i너비는 w오른쪽 정렬입니다.

"{11,13}
{10,7}{0,12}

 10{1,20}


9{2,24}


  8{3,20}

{6,7}{4,12}
{5,13}"-f1..12

파워 쉘, 88 바이트

포트 Arnauld입니다 자바 스크립트 대답

@AdmBorkBork 덕분에 -6 바이트

[RegEx]::Replace("K12
E11K1

A10S2


9W3


B8S4

F7K5
L6",'[A-Z]',{' '*("$args"[0]-64)})

더 그리드를 보려면 사용하는 '.'대신 ' '.


1
.PadLeft88 바이트 대신 문자열 곱셈을 사용하는 것이 어떻습니까? 온라인으로 시도하십시오!
AdmBorkBork

의 영리한 사용입니다 -f. 온라인 사용해보기 링크를 포함시키지 않으 시겠습니까? 다른 사람들이 코드 작동 방식을 볼 수 있습니까?
AdmBorkBork

오류 This site can’t be reached만 있습니다. 죄송합니다.
mazzy

아, 부끄러운 일이야 좋은 자료입니다. :-(
AdmBorkBork

나는 동의 해요. 감사.
mazzy

3

C (GCC) , 125 (109) 105 바이트

x,*d=L"<;1:2938475640P`P05";main(i){for(;i=d[12];printf("%*d",i/4,*d++-48))for(x=i&3;x--;)puts("");}
  • -16 바이트 (-3 더 나은 루프 배열에, -13 직접 인쇄 할 수없는 문자를 포함한) 덕분에 조나단 FRECH .
  • 교대를 위해 나누기를 대체하고 많은 시스템 (예 : TIO를 호스팅하는 시스템) sizeof(wchar_t) == sizeof(int)에서 Windows에서 작동하지 않는다는 사실을 남용하여 -4 바이트 .) 아이디어에 대해 ErikF 에게 감사드립니다 .

온라인으로 사용해보십시오!

이것은에서 내 일반적인 생각의 포트 6502 솔루션 이 수정 약간의 C.에 대신 선도적에 대한 플래그를 가진의 1캐릭터는 그래서 10, 48을 빼서 소수로 인쇄 - 12로 인코딩됩니다 :<.



오하지만 실제로는 GCC가 : 소스에서 인쇄 할 수없는 문자 동의를 기대하지 않았다 : @JonathanFrech 좋은 루프 재 배열, 나는 내가 한 것을 놓친 궁금
펠릭스 Palmen을을

만큼 문자는 UTF-8로 표현 될 수 있고, 그것을 컴파일러에 의해 기술적으로 허용이다. 그것이 좋은지 아닌지는 당신이하는 일에 달려 있습니다 :-)
ErikF

유니 코드에 대해서는 넓은 문자를 사용하여 3 바이트를 더 절약 할 수 있습니다. 온라인에서 사용해보십시오!
ErikF

1
그렇기 때문에 코드 골프를 좋아합니다. UB를 남용하고 시간이 지남에 따라해서는 안되는 모든 것을 사용합니다!
ErikF

2

첨부 , 69 바이트

{ReplaceF["l12
f11l1

b10t2


9x3


c8t4

g7l5
m6",/"\\l",sp&`*@STN]}

온라인으로 사용해보십시오!

이것은 각 공백을 다음과 같이 인코딩합니다. NTS[count of spaces]; NTS"숫자에서 짧은"내장으로 숫자를 문자열로 표현할 수 있습니다. 예, NTS[95] = $R1하고 NTS[170297] = $XQO. STN이 내장의 반대입니다.

이 답변은 입력에서 ReplaceF문자의 모든 발생 ( /\l/)을 함수의 결과로 대체합니다.이 함수 sp&`*@STN는 먼저 문자를 디코딩 한 다음 sp여러 번 반복합니다 (공백).


2

스위프트 , 178165 바이트

var b="";for c in"L12nF11L1nnB10T2nnn9X3nnnC8T4nnG7L5nM6"{let i=c.unicodeScalars.first!.value;if c=="n"{b+="\n"}else if i>64{for _ in 0..<(i-65){b+=" "}}else{b+="(c)"}};print(b)

Downgoat이 게시 한 내용에 따라 이것을 165 바이트로 줄였습니다.

print("L12nF11L1nnB10T2nnn9X3nnnC8T4nnG7L5nM6".unicodeScalars.map{let x=Int($0.value);return x==110 ?"\n":(x>64 ?String(repeating:" ",count:x-65):"($0)")}.joined())

$0명명 된 변수 로 변환하여 확장 :

print("L12nF11L1nnB10T2nnn9X3nnnC8T4nnG7L5nM6".unicodeScalars.map { c in let x = Int(c.value) return x == 110 ? "\n" : (x>64 ? String(repeating:" ", count: x-65) : "(c)") }.joined())

입력 문자열은 다음과 같이 인코딩됩니다. 대문자 ( A-Z)는 공백 블록을 나타내고 65만큼 오프셋됩니다. 따라서 A공백 0 개, 공백 B1 개, L공백 11 개 등 n이 개행 문자로 변환됩니다. 다른 모든 문자는 그대로 인쇄됩니다.

여기에서 온라인으로 실행 하십시오 (감사합니다, mbomb007)


PPCG에 오신 것을 환영합니다! 많은 사람들이 온라인 통역사를 위해 Try It Online (TIO)을 사용하여 답변에 프로그램에 대한 하이퍼 링크를 포함시킵니다. 대답은 다음과 같습니다. tio.run/##JY1BC4IwGIb/yvpOSjScqRW2DgV1sVMeOgQx14SBfMacdhB/…
mbomb007

다음은 172 바이트의 답변 골프입니다. :이 함수 대신 사용 {"L12NF11L1NNB10T2NNN9X3NNNC8T4NNG7L5NM6".unicodeScalars.map({(c)->String in let x=c.value;return x==78 ? "\n" : x>64 ?String(repeating:" ",count:x-65) : "\(c)"}).joined()}(SWIFT 3 ( -swift-version 3REPL에) 빠른 4 빼기를 떨어 때문에 모습을)
Downgoat

@Downgoat 다른 3 바이트를 줄이고 Swift 4와 호환되도록했습니다. 업데이트 된 게시물을 참조하십시오.
에스겔 엘린



1

SVG가있는 JavaScript, 188 바이트

120 %의 임의 행 높이는 4 바이트를 사용합니다.

with(Math)for(s='<pre><svg viewBox=-8-8+16+16 style=font-size:1;text-anchor:end>',f=x=>round(sin(x*PI/6)*6),x=13;--x;)s+=`<text x=${f(x)*2}ch y=${f(9-x)*1.2}>${x}</text>`
document.write(s)

비교를 위해 그리드 사용 :

with(Math)for(s='<pre><svg viewBox=-8-8+16+16 style=font-size:1;text-anchor:end>',f=x=>round(sin(x*PI/6)*6),x=13;--x;)s+=`<text x=${f(x)*2}ch y=${f(9-x)*1.2}>${x}</text>`
for(y=-6;y<=6;y++)s+=`<text x=12ch y=${y*1.2} style=fill:#0002>${'.'.repeat(25)}</text>`
document.write(s)


포지셔닝 수식 설명

하자 f(x) = round(sin(x * π/6) * 6).

원점이 시계의 중심이라고 가정하면, 주어진 시계 번호의 가장 오른쪽 자리의 그리드 좌표 x는 [ f(x) * 2, f(9 - x)]입니다.


1

배쉬, 225 바이트

s=(12 0 6 11 0 0 2 19 0 0 0 0 1 23 0 0 0 0 3 19 0 0 7 11 13 0)
n=(12 11 1 10 2 9 3 8 4 7 5 6) j=0;for i in {0..25};{
[ ${s[i]} = 0 ]||{ printf %${s[i]}s " ";echo -n ${n[j]}
j=$((j+1));};[ $((i%2)) -gt 0 ]&&echo;}|sed 's/ //'

짜증나게 이것은 루프에서 각 줄을 인쇄하는 순진한 솔루션보다 길다 (탭 스톱을 사용하는 경우 132 자).


겠습니까 tr -d \<space>(여기서 <space>대신에 나오지도 대체의 업무 공백 문자입니다)?
Kritixi Lithos

@Cowsquack는 슬프게도 tr -d\ 다음과 같습니다.sed 's/ //g'
crystalgecko


1

C (GCC) , 135 (123) 110 바이트

이것은 어떤 간단한 인코딩 사용 c사이 'a''z'나타내는 c-'a'+1반복 공백, '`'개행을 나타내는, 그리고 다른 모든 문자는 변경된다.

f(i){char*s="k12`e11k1``a10s2```9w3```b8s4``f7k5`l6`";for(;i=*s;s++)i>96?printf("%*s",i-96,""):putchar(i%86);}

온라인으로 사용해보십시오!


*s=L"...";f(i){대신 제안f(i){char*s="...";
ceilingcat

1

T-SQL, 132 바이트

PRINT SPACE(11)+'12
     11           1

 10'+SPACE(20)+'2


9'+SPACE(23)+'3


  8'+SPACE(19)+'4

      7           5
            6'

사소한 솔루션보다 12 바이트가 짧습니다 ( PRINT전체 문자열 그대로).

내가 좋아하는 변형이 훨씬 더 길지만 ( 235 226 바이트) 훨씬 더 SQL과 비슷하다는 것을 알았습니다.

SELECT CONCAT(SPACE(PARSENAME(value,4)),PARSENAME(value,3),
              SPACE(PARSENAME(value,2)),PARSENAME(value,1))
FROM STRING_SPLIT('11.1..2,5.11.11.1,. .. ,1.10.20.2,. .. ,. .. ,.9.23.3,
                   . .. ,. .. ,2.8.19.4,. .. ,6.7.11.5,12.6.. ',',')

STRING_SPLIT쉼표에서 PARSENAME행으로 나누고 각 행을 점으로 나눕니다. 첫 번째와 세 번째는 인쇄 할 공간 수에 사용되며 두 번째와 네 번째는 표시 대상에 사용됩니다.

(이 줄 바꿈은 가독성을위한 것입니다)


1

펄 6 , 116 바이트

my@a=["  "xx 13]xx 13;($_=pi/6*++$;@a[0+|6*(1.1-.cos);0+|6*(1.1+.sin)]=fmt ++$: "%2s")xx 12;@a>>.join>>.&{say S/.//}

온라인으로 사용해보십시오!

(26 바이트 절약을위한 Ta @JoKing)

펄 6 , 142 바이트

my@a=[[[32,32]xx 13]xx 13];for 1..12 {$_=$^b*pi/6;@a[round 6*(1-.cos);round 6*(1+.sin)]=[" $b".ords.tail(2)]}
{say S/^.//}(.[*;*].chrs) for @a

온라인으로 사용해보십시오!

나는 무언가 다른 것을하고 싶었다. 따라서 이것은 문자 쌍을 통해 모든 숫자의 위치를 ​​계산하여 초기 공간을 제거하고 줄을 인쇄합니다.

다른 매개 변수, 예를 들어 17 자리45 자 너비 버전으로 쉽게 수정할 수 있습니다.



@ JoKing : Ta, 나는 그것을 붙여 넣었고 그것을 위키로 만들었습니다.
Phil H
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.