실행할 때 현재 시간에 가장 가까운 시계 이모티콘을 반환


20

if/else30 분마다 큰 조건 이있을 수 있지만 더 많은 수학 및 유니 코드 기반 솔루션을 찾고 있습니다.

시계 이모티콘은 다음과 같습니다. 🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛🕜🕝🕞🕟🕠🕡🕢🕣🕤🕥🕦🕧. 적절한 렌더링 지원이 부족한 경우 아래에서 (순서가 같지 않고 표시되는 것과 다르게 보일 수 있음) 또는 4 페이지 의 유니 코드 차트 에서 볼 수 있습니다 . 이들은 유니 코드 코드 포인트 U + 1F550 (CLOCK)에 해당합니다. FACE ONE LOCK) ~ U + 1F567 (CLOCK FACE TWELVE-THIRTY).

당신의 도전은 현재 시스템 시간에 가장 가까운 시계 문자판 이모티콘을 STDOUT에 출력하는 프로그램을 작성하는 것입니다 (AM과 PM은 동일하게 취급되어야합니다). 예를 들어 시간 t이 [5:15 <t <5:45)이면 5:30 그림 이모티콘 🕠을 표시합니다.

이것은 코드 골프이므로 바이트 단위의 가장 짧은 코드가 이깁니다. 코드를 테스트 할 시간을 쉽게 지정할 수있는 방법을 포함시킬 수 있습니다.

에지 테스트 사례

Time   Output  Written
----------------------
11:48  🕛       12:00
3:15   🕞       3:30
9:45   🕙       10:00

여기에 이미지 설명을 입력하십시오


7
이 질문은 현재 여기에 주제가 아니지만 쉽게 해결할 수 있습니다. 객관적인 승리 조건이 필요하지만 질문 코드 골프에 태그를 지정 하면 가장 짧은 프로그램을 작성하는 사람이 승자가됩니다. 또한 약간 부족하지만 "실행시 현재 시간에 가장 가까운 시계 이모티콘을 출력하는 스크립트"라고 말할 수 있으며 충분합니다. 또한 기술적으로 요구되지는 않지만 다른 언어로 제출하는 것이 좋습니다. (어쨌든 누군가 어쩌면 배쉬에서 하나를 할 것입니다.)
undergroundmonorail

Windows 명령 프롬프트는 그림 이모티콘을 지원하지 않습니다 :(
stokastic

2
규칙을 명확히하고 골프를 코드화하여 표준을 충족 시키도록 게시물을 수정했습니다. 내가 잘못 해석 한 경우 자유롭게 편집하십시오.
NinjaBearMonkey

3
xx : 15와 xx : 45는 어떻게 반올림되어야합니까?
Peter Taylor

1
@PeterTaylor 테스트 사례에서 볼 수 있듯이 반올림해야합니다 (예 : 1:45 => 2:00)
NinjaBearMonkey

답변:


9

루비 — 61 54 바이트

파이썬 3 — 79 77 75 74 바이트

편집 : Ruby에서 Time가져 오기가 필요하지 않고 정수 나누기가 기본값 이기 때문에 이것이 훨씬 짧습니다 .

a=(Time.now.to_i/900-3)/2%24
puts""<<128336+a/2+a%2*12

산수:

  • Time.now.to_i: 에포크 이후 초.
  • /900: 시간을 15 분 단위로 결합합니다.
  • -3: -4문자는 1시에 시작 +1하므로 반올림은 아래쪽이 아닌 가장 가까운 30 분으로 이루어집니다.
  • /2: 반 시간 세그먼트로 결합합니다.
  • %24: 12 시간 중 현재 30 분 세그먼트를 가져옵니다.
  • a/2 + a%2*12: 전체 시간 문자가 30 분 문자보다 먼저 차단된다는 사실을 고려하십시오.

현지 시간 버전, 69 바이트 :

n=Time.now
a=((n.to_i+n.gmtoff)/900-3)/2%24
puts""<<128336+a/2+a%2*12

오리지널 Python 3 버전 :

import time
a=int((time.time()/900-3)/2%24)
print(chr(128336+a//2+a%2*12))

현재 시간 UTC를 인쇄합니다. Python 2 chr는 0-255 만 허용하고 unichr0-65535 만 허용 합니다. Python 3에서 /항상 부동 소수점 나누기이며 //항상 정수 나누기입니다.


12*(a%2)다른 순서로 수행 하면 파 렌스를 절단 할 수 있습니다 a%2*12.
xnor

7

Bash + Coreutils, 60 바이트

date +%I\ 60*%M+45-30/24%%2+2~C*+C8335+0PP|dc|iconv -f ucs-4

그림 이모티콘은 OSX 터미널에서 잘 렌더링되지만 Linux (Ubuntu 14.04)의 경우 sudo apt-get install ttf-ancient-fonts

다른 시간을 테스트 -d $time하려면 date 명령에 삽입 하십시오. 예 : 테스트 12:59 :

date -d 12:59 +%I\ 60*%M+45-30/24%%2+2~C*+C8335+0PP|dc|iconv -f ucs-4

5

자바 스크립트 – 137 117 107 102 95

이것은 쉽게 이길 수 있지만 여기서 최선을 다할 것입니다.

편집 1 : 이제 20 바이트를 절약하기 위해 Python 응답과 같은 UTC로 인쇄합니다.

편집 2 : 10 바이트를 저장 new Date().getTime()하도록 변경 되었습니다 Date.now().

편집 3 : 5 바이트를 저장 Math.round(x)하도록 변경 되었습니다 ~~(x+.5).

편집 4 : 불필요한 제거 (하고 &1023)난 7 바이트를 저장하는보다 보편적 인 UTF-16 인코딩을 한 오래된 개발 버전에서 왼쪽.

d=~~(Date.now()/18e5+.5)%24;d+=d<2?24:0;alert(String.fromCharCode(55357,56655+(d%2?23+d:d)/2));

JavaScript 이모티콘을 허용하지만 UTF-16에서는 두 문자로 인코딩합니다. 운 좋게도 간단히 두 문자로 정의 할 수 있습니다. 첫 번째 문자는 상수 ( 0xD83D)이지만 다른 문자는 변경됩니다.

대안은 현지 시간으로 인쇄합니다. 137 132 125 :


하지가 (d%2?23+d:d)같은 d+d%2*23?
Neil

4

CJam, 50 바이트

"🕐":i~et3=C%60*et4=+30d/mo2m24+24%_2%24*+2/+]:c

알고리즘은 간단하고 시간을 가장 가까운 30 분으로 반올림하고 오전 12시 / 오후 이후로 30 분이 지난 횟수를 세고, 숫자가 홀수 인 경우 24를 더한 다음 층을 2로 나누고 초기 유니 코드를 그 수만큼 증가시킵니다. 올바른 시계 문자판을 얻기위한 코드 포인트.

또한 12시 대신 1시 / 오후로 시작해야하므로 오프셋을 취하십시오.

테스트 목적으로 다음 코드를 사용하십시오.

3:H;45:M;"🕐":i~HC%60*M+30d/mo2m48+48%_2%24*+2/+]:c

어디 3:H;부분은 현재의 시간이 있고 45:M;부분은 시간의 현재 분입니다. 간단하게 교체 3하고 45원하는 값으로.

여기에서 온라인으로 사용해보십시오

브라우저와 OS 및 설치된 글꼴에 따라 온라인 버전에서 모든 유니 코드 문자가 올바르게 인쇄되지 않을 수 있습니다. 그러나 저에게는 Windows 7이 설치된 Firefox에서 모두 잘 인쇄됩니다.


@ user23013 니스!. 나는 당신이 그 어떤 골프도하지 않은 것처럼 새로운 답변으로 게시해야한다고 생각합니다 :)
Optimizer

3

CJam, 31 바이트

"🕐")et5<60b675+30/24%2mdC*++

다음 프로그램에서 시간을 변경하여 테스트 할 수 있습니다.

"🕐")[2014 12 19 22 14 1 901 5 -28800000]5<60b675+30/24%2mdC*++
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.