시간 N 동안 별표 아날로그 시계 그리기


22

도전:

HOUR를 나타내는 입력 N (0-24의 숫자)을 취하는 함수 또는 프로그램을 작성하십시오.

출력은 시간 N을 나타내는 별표에서 아날로그 시계를 가져와야합니다.

🕛🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛


노트:

분침은 시침보다 길어야합니다 (사용 된 별표 수로).

• 분침은 별표 2 개 이상이어야합니다.

• 정오, 오후 3시, 오후 6시 및 오후 9시는 항상 직교합니다. 중간 시간에 대한 출력은도 단위로 정렬 될 때 하루 중 시간과 동일한 순서로되어 있어야합니다. 정오에 시침은 0º이고 오후 3시에는 시침이 90º이므로 출력 오후 1시와 오후 2시의 경우 다음 사항에 해당해야합니다 0pm_deg < 1pm_deg < 2pm_deg < 3pm_deg.. 이 규칙 이외에도 실제 정도는 원하는대로 결정할 수 있습니다. 분명히 글꼴 및 기타 기본 요소에 따라 달라집니다.

• 시침과 분침 사이의 연결 조인트는 모든 종류의 원형 / 타원 유니 코드 문자입니다. o, O, •, 0, etc.


입력 / 출력 예 (도면 스타일에 따라 다를 수 있음)

 N = 3;

 *
 *
 *
 O  *  *

 N = 4;

 *
 *
 *
 O
    *
       *

 N = 5;

 *
 *
 *
 0
  *
   *

 N = 6;

 *
 *
 o
 *

 N = 7;

      *
      *
      *
      •
    *
  *

 N = 0,12,24;

 *
 *
 *
 o

출력 차별화의 예 :

 N = 4     VS     N = 5     VS     N = 6

  *                *                *
  *                *                *
  O                O                O
      *              *              *

이것은 이므로 가장 짧은 바이트 수를 가진 프로그램이 승리합니다!


8
하루에 25 시간이 없다면 시간은 보통 0-23 또는 1-12가 아니라 0-24입니다.
fəˈnɛtɪk

1
분침은 시침보다 길어야하지만 크기를 유지해야합니까? 예를 들어, 분침이 분침 3과 다른 크기 일 수 7있습니까?
AdmBorkBork

@LliwTelracs하지만 23:00입니다 11:00. 내 마음 속에서 나는 다시 12 핸드로 돌아 가려고 노력했다
Albert Renshaw

6
@LliwTelracs 언젠가는 마치 기분이 좋아!

1
선행 또는 후행 공백 / 줄 바꾸기가 허용됩니까? 패딩은 어떻습니까?
Titus

답변:


18

자바 스크립트 (ES6), 105 76 65 바이트

F=N=>`  *
ab*12
 9@3
87654`.replace(/\w/g,y=>'0x'+y^N%12?' ':'*')
<!-- Snippet Demo: -->
N =  <input type="number" min="0" max="24" value="2" id="I" />
<button onclick="console.log(F(I.value))">Run</button>

  • -29 바이트 :

    • 분침과 시침의 크기를 각각 2와 1의 별표로 줄였습니다. 작은 클럭 = 적은 바이트 :-P
  • -11 바이트 :

    • 문자열 비교를 숫자 비교로 변경했습니다.
    • y==(N%12).toString(16)?'*':' ' -> '0x'+y^N%12?' ':'*'

손이 긴 원본 : ( 105 94 바이트)

F=N=>`    *
a b * 1 2
  ab*12
  99@33
  87654
8 7 6 5 4`.replace(/\w/g,y=>'0x'+y^N%12?' ':'*')
<!-- Snippet Demo: -->
N =  <input type="number" min="0" max="24" value="2" id="I" />
<button onclick="console.log(F(I.value))">Run</button>


1
정말 영리 해요!
AdmBorkBork

1
오, 이거 너무 좋아!
Albert Renshaw

죄송합니다. 내 파이썬 답변은 원본과 약간 비슷합니다. 솔직히 답변을보기 전에 게시했습니다. 우리가 16 진수와 같은 생각을했다고 생각합니다.
ElPedro

2
어떻게 든 "시침이 2 이상이어야합니다"라고 읽었으므로 제대로 읽고 손을 짧게하려면 +1입니다.
ElPedro

1
@ElPedro 그게 내가 원래 읽은 줄 알았는데 :)
nderscore

14

CSS / HTML (자바 스크립트) 62 + 106 = 180 168 바이트

pre{position:absolute;left:99px;bottom:99px;transform-origin:50% 80%}
<input oninput=h.style.transform=`rotate(${this.value*30}deg)`><pre>*
*
o</pre><pre id=h>*

</pre>

편집 : @nderscore 덕분에 9 바이트가 절약되었습니다.


매우 멋진 아이디어!
nderscore

정말 좋은 답변입니다.
ElPedro

입력 태그를 이것으로 교체하여 4 바이트를 줄일 수 있습니다<body onload=f(prompt())>
Albert Renshaw

1
함수 코드를 oninput 속성에 직접 포함시킬 수도 있습니다.<input oninput=h.style.transform=`rotate(${this.value*30}deg)`>
nderscore


5

C (gcc) , 144 바이트

#define v ,t
h;t(i){putchar(i>12?i-9:h^i?32:42);}n(i){h=i%12;puts("  *")v(10)v(11)v(h)v(1)v(2)v(19)v(12)v(9)v(57)v(3)v(19)v(8)v(7)v(6)v(5)v(4);}

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


+1; 거룩한 재귀! 나는 당신이 macroing 쉼표 AHHA하여 코드 골프 도전에 바이트를 저장할 수있는 재미 발견
알버트 렌쇼

재귀가 보이지 않지만 나는 그것을 기대하지 않았습니다. 약간 난독 화되었지만 하드 코딩 된 답변입니다.
Ahemone

쉼표 앞에 공백이 필요하다고 생각하지 않습니다
ceilingcat

4

SmileBASIC, 90 88 74 바이트

INPUT H?("  *"+" "*47)*2;"  o
R=H/1.9LOCATE 2.5+SIN(R)*2,3.5-COS(R)*2?"*

출력 예 :

? 5
  *
  *
  o

   *

? 3
  *
  *
  o *


3

젤리 , 35 34 33 바이트

ị“ tI©’Œ?Ḋ¤µ⁶ẋ13”*⁸¦Ṗ;“**o”ṙ7s5ZY

온라인으로 사용해보십시오! (tI©!) 또는 모두보기 (0-24) .

방법?

ị“ tI©’Œ?Ḋ¤µ⁶ẋ13”*⁸¦Ṗ;“**o”ṙ7s5ZY - Main link: h
          ¤                       - nilad followed by link(s) as a nilad:
 “ tI©’                           -     base 250 number: 522956007
       Œ?                         - shortest permutation of [1,N] that would be at
                                     that index in a lexicographically sorted
                                     list: [2,3,4,5,6,7,1,12,11,10,9,8,13]
         Ḋ                        - dequeue: [3,4,5,6,7,1,12,11,10,9,8,13]
ị                                 - index into (1-based and modular, so h=2 picks 4,
                                     as does h=14 [as do h=26, h=-10, etc.])
           µ                      - monadic chain separation (call the result j)
            ⁶                     - space character
             ẋ13                  - repeat 13 times
                   ¦              - apply to index...
                  ⁸               - ...left argument (j)
                ”*                -     an asterisk character (replacemes the space
                                         at index j with an asterisk)
                    Ṗ             - pop the last character off the list †
                     ;“**o”       - concatenate "**o"
                           ṙ7     - rotate left by 7 ‡
                             s5   - split into chunks of length 5 (columns)
                               Z  - transpose (get the rows of the clock)
                                Y - join with line feeds
                                  - implicit print

주의 “ tI©’Œ?Ḋ(순열 인덱스, 대기열)가 바이트 이상의 저장되는 “9ȧỤ_ÑḶ’b⁴바이트이다 (기재의 16)를 통해 저장“¦þxṙ<ȥ’ḃ13 (기재의 전단 사 (13)).

팝에 관해서-우리는 문자열에 여분의 공간이 있습니다. 여기서 0, 12, 24의 별표는 인덱스 목록의 mod-12 인덱싱을 허용하고 마지막 문자를 팝합니다. 연결하다 “**o” 미리 별표 중 하나를 덮어 씁니다.

회전과 관련하여-중간에 ""** o "(별표 배치 전후에)를 사용하여 문자열을 구성하는 것보다 바이트를 절약 할 수 있습니다.


3

하스켈, 148 바이트

c n=mapM_ putStrLn$(t(n-3)!(t n!(\_->'*')))(map(\x->(2!(\_->x))"     ")"**O  ")
n!f=(\(x,a:y)->x++f a:y).splitAt n
t n=2+truncate(2.5*sin(n*pi/6))

함수 c는 주어진 작업을 해결하는 것입니다



2

PHP, 71 바이트

별표 시간 1 개, 별표 시간 2 개.

$s="  *
  *  
  O  
";$s[ord(BGHNTSRQPJDE[$argv[1]%12])&31]="*";echo$s;

명령 행 인수에서 입력을받습니다. 로 실행하십시오 -nr.

  1. 템플릿 정의
  2. 시간을 위치에 매핑 (문자에서 디코딩)하고 위치의 문자를 별표로 설정
  3. 인쇄

1

05AB1E , 41 바이트

TIO에게는 너무 느립니다.

14Ýœ•2!&ô÷‰•èv… *@y_2L11+¹12%0‚ìyå+èJ}3ô»

TIO에서 작동하는 유사한 코드를 시도하십시오. 이것을 하십시오

이것이 여전히 골프와 속도 모두 가능하다는 것을 확신하십시오.
나중에 설명합니다.


1

논리 634 바이트

입력 방법을 알 수 없으므로 Tio 링크 맨 위에 입력에 대한 var a = ...가 있습니다.

circ v(a)->cond((a&1000)+0)&a->0/a
circ n(a)->cond a&10000->((a&100)+0)|!(a&100)&((a&011)|100)/a
circ y(a)->cond((a&100)+0)&a->a&10011/a
var s=@100000
var m=@101010
var x=y(n(v(a)))
var e=x&1000
var f=(x&100)+0
var t=(x&10)+00
var o=(x&1)+000
circ r(a,b)->cond(a)->b/@a
out s+s+s+s+m
out r(e&t&!o,m)+s+r(o&e&t,m)+s+m+s+r(o&!e&!f&!t,m)+s+r(t&!o&!f&!e,m)
out s+s+r(e&t&!o,m)+r(e&t&o,m)+m+r(o&!t&!f&!e,m)+r(t&!o&!f&!e,m)
out r(e&o&!t,m)+s+r(e&o&!t,m)+s+@110000+s+r(t&o&!f&!e,m)+s+r(t&o&!f&!e,m)
out s+s+r(e&!t&!o,m)+r((f&t&o),m)+r(f&t&!o,m)+r(f&!t&o,m)+r(f&!t&!o,m)
out r(e&!t&!o,m)+s+r(f&t&o,m)+s+r(f&t&!o,m)+s+r(f&o&!t,m)+s+r(f&!t&!o,m)

이 골프를 포기했다. 시계를 끔찍하게 보이게 만드는 비용으로 더 짧아 질 수 있습니다.

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

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