Der Mel-Kalender wird in der fiktiven Welt von Kaldia verwendet. Ihr Ziel ist es, Daten in den Mel-Kalender umzuwandeln.
Dieser Kalender hat 13 Monate mit jeweils 28 Tagen plus 1 oder 2 zusätzliche Tage nach dem letzten Monat. Ein Jahr, das durch 4, aber nicht durch 100 oder durch 400 teilbar ist, hat 366 Tage, und andere Jahre haben 365 (dh unsere Schaltjahrregeln, aber mit Jahren im Mel-Kalender).
Sie sollten die Abkürzungen für Monats- und Tagesnamen verwenden :
Monate: dia vio lis gil ful dyu mel ral zan pal mik fav ruj
tage: dia vio lis gil ful dyu mel ral zan pal mik fav ruj ser rav tan lin rez jil din ket len lax nen pin mat kun mir
Der zusätzlichen Tage außerhalb eines jeden Monats hat die Monatsnamen von myuxet
(keine Abkürzung hier) und die Tag - Namen sind axet
und teems
jeweils.
0 dia dia
ist 1988/11/30.
Sie können das Eingabedatum als Zeichenfolge oder als Tupel (Jahr, Monat, Tag) verwenden. Alternativ kann der Parameter für Funktionen im Datumstyp Ihrer Standardbibliothek enthalten sein. Die Ausgabe sollte eine durch Leerzeichen getrennte Zeichenfolge sein.
Testfälle
1776-07-04 => -213 ral ket
1859-12-15 => -129 dia rav
1917-04-14 => -72 ful nen
1981-02-04 => -8 lis mik
1988-11-30 => 0 dia dia
1988-12-01 => 0 dia vio
1988-12-28 => 0 vio dia
2017-01-01 => 28 vio ful
2019-04-22 => 30 dyu lis
2019-11-30 => 30 myuxet axet
2019-12-01 => 31 dia dia
2021-11-29 => 32 myuxet axet
2021-11-30 => 32 myuxet teems
2089-11-30 => 101 dia dia
2389-11-30 => 400 myuxet teems
Sie sollten in der Lage sein, Daten von mindestens 1 n. Chr. Bis 9999 n. Chr. Zu verarbeiten.
Referenzimplementierung in Perl 6
Standardlücken sind verboten.
axet
undteems
am Ende des Jahres war ich verwirrt, bis ich den Link-213 Ral Ket
?Antworten:
Perl 6 , 174 Bytes
Probieren Sie es online aus!
Generieren Sie eine Liste aller gültigen Daten und indizieren Sie dann den Tag des Jahres in dieser Liste.
Erläuterung
quelle
Ruby ,
199195193 BytesOof, nur
232729 Bytes über dem Beispiel-Perl-Code gespeichert ...-4 Bytes von @NickKennedy.
-2 Bytes von @Neil.
Probieren Sie es online aus!
quelle
y<364
anstelle vonm<13
und dann die letzte Verwendung von verwendet wirdm
. Probieren Sie es online aus!Japt
-S
, 148 Bytes4 Bytes dank @Shaggy gespeichert. + Viel mehr Bytes aufgrund von Fehlerkorrekturen. Dauert Monate als 0-indizierte Zahlen.
Japt verfügt zwar über eine integrierte Datumsverwaltung, ist jedoch nicht sehr gut. Im Ernst, 34 Bytes, um ein Datum zu initialisieren, dann Tage davon zu subtrahieren und dann zu berechnen, welcher Tag des Jahres es ist?
Versuch es
quelle
-S
" sein. Sie können 2 Bytes speichern , indem Sie beide Vorkommen zu ersetzen13
mitD
. Ich werde am Morgen noch einmal nachsehen (wenn ich nicht in der Kneipe bin, auf meinem Handy), um zu sehen, ob ich noch andere Ersparnisse sehen kann, aber+1
in der Zwischenzeit eine Chance habe, Jelly deutlich zu schlagen.sT
; Dafür gibt es eine Abkürzung;)Gelee ,
181164 BytesProbieren Sie es online aus!
Jelly verfügt über keine integrierte Datumsverarbeitung, daher wird auf die Funktionalität im Zeitmodul von Python zurückgegriffen.
Erläuterung
quelle
diact viol lisk...
) ist seltsam geschrieben, um besser zu komprimieren?C # (Visual C # Interactive Compiler) , 247 Byte
Probieren Sie es online aus!
quelle
JavaScript (ES6),
297269252249245 ByteNimmt Eingaben als JavaScript-Datumsobjekt in UTC vor (wäre 1 Byte weniger als JavaScript-Zeitstempelnummer). Bearbeiten:
37 Bytes dank @Arnauld gespeichert.Probieren Sie es online aus! wenn das Snippet aus irgendeinem Grund immer noch nicht für Sie funktioniert.
quelle
30 dyu undefined
auf Firefox.Date.UTC
ist die gleiche Länge wienew Date
!Haskell ,
387373372 BytesProbieren Sie es online aus!
Nimmt die Eingabe als
Day
Objekt auf.Das Schreiben hat ziemlich viel Spaß gemacht! Die Grundidee besteht darin, eine Liste mit Daten zu erstellen und diese für das Ergebnis zu indizieren. Die Funktion
a
dauert ein Jahr und gibt jedes Datum in diesem Jahr in chronologischer Reihenfolge aus. Die Funktionf
erweitert diea
Verkettung für aufeinanderfolgende Jahre ab 0. Der Trick besteht darin, dass wir für Daten vor der Epoche ab dem Jahr -1 rückwärts durchlaufen müssen, damit wir die Werte -1, -2 ... übergeben und jede Liste umkehren einzeln, bevor sie zusammen verkettet werden. Schließlichf
berechnen wir in Funktion die Anzahl der Tage zwischen der Epoche und unserem Datum (Konvertierung vonInteger
inInt
) und den Index in unsere Liste, wobei wir darauf achten, unseren Index zu korrigieren, wenn er negativ ist.EDIT: Golf es runter (-14)
BEARBEITEN 2: Golf in der Liste der Tages- / Monatsnamen (-1)
quelle