Im thailändischen Kalender entspricht das Jahr 2017 2560. Der thailändische Kalender ist dem gregorianischen Kalender immer 543 Jahre voraus.
Beobachter werden bemerken, dass 2560 gleich ist 2^9 * 5
, mit anderen Worten, es hat 10 Primfaktoren. Dies wird für weitere 896 Jahre nicht wieder vorkommen! Wir nennen ein Jahr zäh, wenn es genau zehn Primfaktoren hat.
Schreiben Sie ein Programm, das einen Wahrheitswert ausgibt, wenn das aktuelle Jahr unter Verwendung des thailändischen Kalenders, basierend auf der Systemuhr, hartnäckig ist, und ansonsten einen falschen Wert.
Testfälle:
- Wenn das Programm im Jahr 2017 ausgeführt wird,
true
- Wenn das Programm in einem der Jahre 2018 bis 2912 läuft,
false
- Wenn das Programm während 2913 ausgeführt wird,
true
(2913 + 543 =2^7 * 3^3
)
Antworten:
Bash + Coreutils, 35 Bytes
Die Ausgabe ist entweder eine nicht leere Zeichenfolge (wahr) oder eine leere Zeichenfolge (falsch).
Probieren Sie es online!
Alternative Version: 37 Bytes.
Nicht so golfen, aber ich mag dieses.
Probieren Sie es online!
Wie es funktioniert
Das arithmetische Erweiterungsdatum
$[
+% Y wird+543]
ausgeführtdate +%Y
, um das aktuelle (vollständige) Jahr abzurufen , und fügt dem Jahr 543 hinzu .Der Faktor nimmt die Summe als Argument und gibt sie als Primfaktor aus: zuerst die zu berücksichtigende Zahl, dann eine Liste der einzelnen Primfaktoren.
Schließlich filtert awk die Eingabe und druckt nur Zeilen mit genau 11 Feldern (die Zahl plus 10 Primfaktoren).
quelle
05AB1E , 10 Bytes
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
CJam , 13 Bytes
Probieren Sie es online!
Erläuterung
quelle
Mathematica,
3731 Bytes5 Bytes gespart durch lanlock4 .
Anonyme Funktion. Nimmt keine Eingabe und gibt
True
oderFalse
als Ausgabe zurück.quelle
Now
ist implizit. Sie können verwendenDateValue@"Year"
.&
am Ende? AußerdemDate[][[1]]
sind ein paar Bytes kürzer alsDateValue@"Year"
(wenn Sie nichts dagegen haben,Date
ist das veraltet).#&@@Date[]
anstelle von speichernDate[][[1]]
. Außerdem denke ich, dass "Mathematica + REPL-Umgebung" hier eine gültige Programmiersprache ist, für die Sie die Terminierung nicht benötigen&
.Pyth, 11 Bytes
Online-Dolmetscher hier verfügbar.
Erläuterung
quelle
Japt ,
18 1413 Bytes4 Bytes gespart dank ETHproductions. 1 Byte dank obarakon gespeichert.
Probieren Sie es online!
quelle
A¥º543+Ki¹k l
oder543+Ki¹k l ¥A
¹
verwendet, würde nicht)
das Gleiche tun?)
stattdessen verwenden.Python 2 ,
9289 Bytes-3 Bytes dank Jonathan Allan
Probieren Sie es online!
Iterieren Sie bis zu dem Jahr, indem Sie die Primfaktoren extrahieren (und couten).
Die exec-Zeile entspricht:
quelle
c=i=1
:;c-=1
;print-9==c
.Oktave , 31 Bytes
Probieren Sie es online!
Zwei hier verwendete Tricks:
clock()(1)
direkt in die Ausgabe von indexierenclock
(clock(1)
funktioniert nicht)nnz
stattdessennumel
, da alle Einträge garantiert ungleich Null sind.Alternative Version, gleiche Bytezahl
Diese Version kann nur seit Jahren verwendet werden , übersteigt
30
, aberoffensichtlichohne Berücksichtigung Zeitreise darunter fallen alle Jahre , in denen das Programm ausgeführt werden. Das funktioniert auch in Matlab.quelle
PHP,
1116866zählt direkt die Anzahl der Primfaktoren.
Alte Idee:
11190Dies stellt keinen Primzahl factortoring builtin verwenden , aber im Grunde ein Zählen prime Sieb die Anzahl der Primfaktoren einer Zahl zu bekommen <10000. Diese Karten auf das 4 - stelligen Jahr , dass PHP bietet mit
date('Y')
:quelle
Y
braucht keine Anführungszeichen mit-nr
.$a[$i*$j]=($a[$i]?:1)+($a[$j]?:1)
spart 13 Bytes.$j=++$i<1e4
spart einen. Und keine Zitate mehr fürY
zwei.MATL , 14 Bytes
Probieren Sie es online!
quelle
Batch, 123 Bytes
Sie können das Skript durch manuelles Überschreiben der
date
Variablen vor dem Ausführen herausfiltern .quelle
J , 18 Bytes
Programmkörper:
Probieren Sie es online!
10=
ist zehn gleich#
die Bilanz vonq:
die Hauptfaktoren von543+
Diese Nummer wurde zu hinzugefügt{.
der Kopf (erster Punkt, dh das Jahr) von6!:0''
das Datum (als YMD hms)quelle
JavaScript (ES6),
79 bis75 BytePort of My Batch Antwort. Bestehen Sie das thailändische Kalenderjahr, wenn Sie einen bestimmten Test durchführen möchten. Bearbeiten: 4 Bytes dank @dandavis gespeichert.
quelle
new Date().getYear()+2443
false
? Shortners:+Date().slice(11,15)+543
undy?
anstelle vony>1
y?
ist sinnlos,y
ist nie Null.