강인한 태국 달력


13

에서 타이어 캘린더 2560 태국 달력에 해를 2017 대응을 항상 543년 앞서 그레고리력이다.

관찰자 코더들은 2560이 10과 같다는 것을 주목할 것입니다 2^9 * 5. 이것은 896 년 동안 다시는 일어나지 않을 것입니다! 정확히 10 개의 주요 요소가 있다면 1 년을 끈기있게 부릅니다 .

시스템 시계를 기준으로 태국 달력을 사용하여 현재 연도가 끈질긴 경우 참 값을 출력하고 그렇지 않으면 거짓 값을 출력하는 프로그램을 작성하십시오.

테스트 사례 :

  • 2017 년에 프로그램이 실행되면 true
  • 프로그램이 2018 년에서 2912 년 사이에 실행 된 경우, false
  • 2913 동안 프로그램이 실행되면 true(2913 + 543 = 2^7 * 3^3)

언어를 사용하거나 시스템 시계가없는 환경에서 실행중인 경우 현재 시간을 입력으로 받아 들일 수 있습니까?
Tutleman

답변:


6

Bash + coreutils, 35 바이트

factor $[`date +%Y`+543]|awk NF==11

출력은 비어 있지 않은 문자열 (truthy)이거나 빈 문자열 (false)입니다.

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

대체 버전 : 37 바이트

date -d 543year +%Y|factor|awk NF==11

골프는 아니지만 나는 이것을 좋아합니다.

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

작동 원리

산술 확장 $[날짜 + % Y 는 현재 (전체) 연도를 얻기 위해 +543]실행 date +%Y되며 연도에 543 을 추가합니다 .

인수는 합을 인수로 취하여 소인수 분해를 인쇄합니다. 먼저 인수 분해 할 숫자와 개별 소인수 목록입니다.

마지막으로 awk는 입력을 필터링하여 정확히 11 개의 필드 (숫자에 10 개의 주요 요소)가있는 행만 인쇄합니다.





4

Mathematica, 37 31 바이트

lanlock4 로 인해 5 바이트가 저장되었습니다 .

PrimeOmega[#&@@Date[]+543]==10&

익명의 기능. 입력 및 리턴 True또는 False출력을 취하지 않습니다 .


Now암시 적입니다. 사용할 수 있습니다 DateValue@"Year".
Martin Ender

&마지막에 필요 합니까? 또한 Date[][[1]]두 바이트보다 짧습니다 DateValue@"Year"( 더 이상 Date쓸모가 없다면 )
나무가 아님

1
#&@@Date[]대신에 바이트를 저장할 수 있습니다 Date[][[1]]. 또한 "Mathematica + REPL 환경"은 여기서 유효한 프로그래밍 언어이며 종료 할 필요가 없습니다 &.
Greg Martin

@GregMartin 아 글쎄, 난 그렇게 큰 팬 적이 없어
LegionMammal978


2

apt , 18 14 13 바이트

543+Ki¹k l ¥A

ETH 프로덕션 덕분에 4 바이트가 절약되었습니다. obarakon 덕분에 1 바이트를 절약했습니다.

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


좋은 대답입니다! 주위를 움직이면 바이트를 절약 할 수 있습니다. A¥º543+Ki¹k l또는543+Ki¹k l ¥A
Oliver

@obarakon 감사합니다! 왜 ¹사용 )합니까, 같은 일을하지 않습니까?
Tom

네, )대신 사용할 수 있습니다 .
Oliver

2

파이썬 2 , 92 89 바이트

Jonathan Allan 덕분에 -3 바이트

import time
y=time.gmtime()[0]+543
c=i=1
exec"i+=1\nwhile 1>y%i:y/=i;c-=1\n"*y
print-9==c

온라인으로 사용해보십시오!
연도까지 반복하여 주요 요소를 추출 (및 발신)합니다.
exec 행은 다음과 같습니다.

for i in range(2,y):
 while not(y%i):
  y=y/i
  c=c-1

3 바이트 저장 : c=i=1; c-=1; print-9==c.
Jonathan Allan

1

옥타브 , 31 바이트

nnz(factor(clock()(1)+543))==10

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

여기에 사용 된 두 가지 트릭 :

  • clock()(1)출력에 직접 색인을 생성하려면 clock( clock(1)작동하지 않습니다)
  • nnz대신 numel모든 항목이 0이 아닌 것으로 보장됩니다.

대체 버전, 동일한 바이트 수

nnz(factor(max(clock)+543))==10

이 버전은 초과 년 동안 사용할 수 30있지만, 분명히 무시 시간 여행이 프로그램이 실행될 수있는 모든 년을 포함한다. Matlab에서도 작동합니다.


1

PHP, 111 68 66

$a=date(Y)+543;for($i=2;$i<$a;)$b+=$a%$i?!++$i:!!$a/=$i;echo$b==9;

주요 요인의 수를 직접 계산합니다.

$a=date(Y)+543;             // current year
for($i=2;$i<$a;)            // while $i lower than the year
$b+=$a%$i?!++$i:!!$a/=$i;   // if $i divides $a: $a/=$i and ++$b | if not: ++$i
echo$b==9;                  // output if it has 10 prime factors

오래된 아이디어 : 111 90

for($i=1;++$i<1e3;)for($j=1;++$j<1e3;)${$i*$j}=($$i?:1)+($$j?:1);echo${date('Y')+543}==10;

이것은 기본 인수 분해 기본 제공을 사용하지 않고 기본적으로 10000보다 작은 소수의 소수를 얻기 위해 계수 기본 체 를 사용합니다 date('Y'). 이는 PHP가 다음을 사용하여 제공하는 4 자리 연도에 매핑됩니다 .

for($i=1;++$i<1e3;)          // for each number smaller sqrt(1e4)
for($j=1;++$j<1e3;)          // do sqrt(1e4) times
${$i*$j}=($$i?:1)+($$j?:1);  // n_factors[i*j] = n_factors[i] + n_factors[j]
echo${date('Y')+543}==10;          // output 1 if the current year has 10 prime factors or nothing if it doesn't

1
-2 바이트 : Y따옴표없이 필요합니다 -nr.
Titus

1
당신의 오래된 아이디어 : 왜 초기화합니까? $a[$i*$j]=($a[$i]?:1)+($a[$j]?:1)13 바이트를 저장합니다. $j=++$i<1e4하나를 저장합니다. 그리고 Y두 개 더 인용하지 마십시오 .
Titus


0

배치, 123 바이트

@set/ay=%date:~-4%+543,n=d=2
:l
@set/ar=y%%d,d+=1
@if %r%==0 set/ay/=d-=1,n+=1
@if %y% gtr 1 goto l
@if %n%==12 echo 1

date변수를 실행하기 전에 수동으로 변수를 재정 의하여 스크립트를 위조 할 수 있습니다 .



0

자바 스크립트 (ES6), 79 75 바이트

f=(y=+Date().slice(11,15)+543,d=2,n=10)=>y>1?y%d?f(y,d+1,n):f(y/d,d,n-1):!n

내 배치 답변 포트. 특정 테스트를 수행 하려면 태국 연도에 합격하십시오. 편집 : @dandavis 덕분에 4 바이트가 절약되었습니다.


어떻 new Date().getYear()+2443
Matt

@Matt Ugh, 그것은 MDN이 말하는 것이 아닙니다 ...하지만 더 이상 사용되지 않으므로 어쨌든 사용 해야하는지 확실하지 않습니다.
Neil

2017 년 통과 == false? shortners : +Date().slice(11,15)+543y?대신은y>1
dandavis

@dandavis y?는 의미 y가 없으며 결코 0이 아닙니다.
Neil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.