Wytrwały tajski kalendarz


13

W kalendarzu tajlandzkim rok 2017 odpowiada 2560. Kalendarz tajski ma zawsze 543 lata wcześniej niż kalendarz gregoriański.

Obserwatorzy kodujący zauważą, że 2560 jest równy 2^9 * 5, innymi słowy, ma 10 czynników pierwszych. To się nie powtórzy przez kolejne 896 lat! Rok nazywamy wytrwałym, jeśli ma dokładnie dziesięć głównych czynników.

Napisz program, który generuje prawdziwą wartość, jeśli bieżący rok korzystający z kalendarza tajlandzkiego, opartego na zegarze systemowym, jest wytrwały, aw przeciwnym razie - falsey.

Przypadki testowe:

  • Jeśli program zostanie uruchomiony w 2017 r., true
  • Jeśli program jest uruchamiany w którymkolwiek z lat od 2018 do 2912, false
  • Jeśli program jest uruchomiony podczas 2913, true(2913 + 543 = 2^7 * 3^3)

Jeśli używasz języka lub działasz w środowisku bez zegara systemowego, czy dopuszczalne jest przyjęcie aktualnego czasu jako danych wejściowych?
Tutleman

Odpowiedzi:


6

Bash + coreutils, 35 bajtów

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

Dane wyjściowe to niepusty ciąg znaków (prawda) lub pusty ciąg znaków (fałsz).

Wypróbuj online!

Alternatywna wersja: 37 bajtów.

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

Nie tak golfowo, ale podoba mi się ten.

Wypróbuj online!

Jak to działa

$[Data rozszerzenia arytmetycznej +% Y jest +543]wykonywana, date +%Yaby uzyskać bieżący (pełny) rok i dodaje 543 do roku.

Współczynnik przyjmuje sumę jako argument i wypisuje ją na czynniki pierwsze: najpierw liczba, która ma zostać uwzględniona, a następnie lista poszczególnych czynników pierwszych.

Na koniec awk filtruje dane wejściowe, drukując tylko wiersze z dokładnie 11 polami (liczba plus 10 czynników pierwszych).





4

Mathematica, 37 31 bajtów

5 bajtów zapisanych z powodu lanlock4 .

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

Funkcja anonimowa. Nie pobiera danych wejściowych i zwraca Trueani Falsedanych wyjściowych.


Nowjest niejawny. Możesz użyć DateValue@"Year".
Martin Ender

Czy potrzebujesz &na końcu? Ponadto Date[][[1]]jest o kilka bajtów krótszy niż DateValue@"Year"(jeśli nie przeszkadza, że Datejest przestarzały).
Nie drzewo

1
Możesz zapisać bajt za pomocą #&@@Date[]zamiast Date[][[1]]. Myślę też, że „środowisko Mathematica + REPL” jest tutaj poprawnym językiem programowania, dla którego nie trzeba kończyć &.
Greg Martin

@GregMartin No cóż, nigdy nie byłem wielkim fanem tego
LegionMammal978,


2

Japt , 18 14 13 bajtów

543+Ki¹k l ¥A

Oszczędność 4 bajtów dzięki produktom ETH. Zaoszczędzono 1 bajt dzięki obarakon.

Wypróbuj online!


Niezła odpowiedź! Możesz zapisać bajt, jeśli przenosisz rzeczy: A¥º543+Ki¹k llub543+Ki¹k l ¥A
Oliver

@obarakon Thanks! Dlaczego jest ¹używany, czy nie )zrobiłby tego samego?
Tom

Tak, możesz użyć )zamiast tego.
Oliver,

2

Python 2 , 92 89 bajtów

-3 bajty dzięki Jonathanowi Allanowi

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

Wypróbuj online!
Iteruj do roku, wydobywając (i wykreślając) czynniki pierwsze.
Linia wykonania jest równoważna z:

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

A 3 bajt zapisać: c=i=1; c-=1; print-9==c.
Jonathan Allan

1

Oktawa , 31 bajtów

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

Wypróbuj online!

Zastosowano tutaj dwie sztuczki:

  • clock()(1)indeksować bezpośrednio do wyniku clock( clock(1)nie działa)
  • nnzzamiast numel, ponieważ wszystkie wpisy są niezerowe.

Wersja alternatywna, ta sama liczba bajtów

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

Ta wersja może być używana tylko przez lata przekraczające 30, ale oczywiście bez uwzględnienia podróży w czasie obejmuje to wszystkie lata, w których program może być wykonywany. Działa również w Matlabie.


1

PHP, 111 68 66

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

bezpośrednio liczy liczbę czynników pierwszych.

$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

Stary pomysł: 111 90

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

Nie używa to wbudowanego głównego faktorowania, ale w zasadzie liczącego pierwsze sito, aby uzyskać liczbę czynników pierwszych o wartości <10000. To odwzorowuje na 4-cyfrowy rok, który PHP zapewnia, używając date('Y'):

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 bajty: Ynie wymaga cudzysłowów z -nr.
Tytus

1
Twój stary pomysł: po co inicjować? $a[$i*$j]=($a[$i]?:1)+($a[$j]?:1)oszczędza 13 bajtów. $j=++$i<1e4ratuje jeden. I brak cytatów dla Ydwóch kolejnych.
Tytus


0

Partia, 123 bajty

@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

Możesz podrobić skrypt, ręcznie nadpisując datezmienną przed jej uruchomieniem.


0

J , 18 bajtów

Treść programu:

10=#q:543+{.6!:0''

Wypróbuj online!

10= jest dziesięć równe

# suma z

q: główne czynniki

543+ ten numer został dodany do

{. głowa (pierwsza pozycja, tj. rok) z

6!:0'' data (jako YMD hms)


0

JavaScript (ES6), 79 75 bajtów

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

Port mojej odpowiedzi wsadowej. Przekaż tajlandzki rok kalendarzowy, jeśli chcesz wykonać określony test. Edycja: Zapisano 4 bajty dzięki @dandavis.


co powiesz nanew Date().getYear()+2443
Matt

@Matt Ugh, to nie to, co mówi MDN, robi ... ale jest przestarzałe, więc nie jestem pewien, czy i tak powinienem go używać.
Neil

mijający 2017 == false? krótsze: +Date().slice(11,15)+543i y?zamiasty>1
dandavis

@dandavis y?jest bezcelowy, ynigdy nie jest równy zero.
Neil
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.