Du bist ein Weltraumtourist auf dem Weg zum Planeten Flooptonia! Der Flug wird weitere 47.315 Jahre dauern. Wenn Sie also die Zeit verstreichen lassen möchten, bevor Sie kryogen gefroren sind, schreiben Sie ein Programm, mit dem Sie den Floopton-Kalender besser verstehen können.
Hier ist der 208-tägige Floopton-Kalender:
Month Days Input Range
Qupu 22 [0-22)
Blinkorp 17 [22-39)
Paas 24 [39-63)
Karpasus 17 [63-80)
Floopdoor 1 [80]
Dumaflop 28 [81-109)
Lindilo 32 [109-141)
Fwup 67 [141-208)
Herausforderung
Ihr Programm gibt bei einem ganzzahligen Tag im Jahr (Bereich [0-208)
) den entsprechenden Tag des Monats und den Namen des Monats aus (z 13 Dumaflop
. B. ).
Es gibt jedoch eine Ausnahme: Floopdoor ist eine besondere Zeit für Flooptonianer, die anscheinend eine eigene Kalenderseite verdient. Aus diesem Grund wird Floopdoor nicht mit einem Tag geschrieben (dh die Ausgabe erfolgt Floopdoor
nicht 1 Floopdoor
).
Testfälle
0 => 1 Qupu
32 => 11 Blinkorp
62 => 24 Paas
77 => 15 Karpasus
80 => Floopdoor
99 => 19 Dumaflop
128 => 20 Lindilo
207 => 67 Fwup
Regeln
- Sie müssen ein vollständiges Programm schreiben.
- Sie können davon ausgehen, dass die Eingabe immer gültig ist.
- Ihre Ausgabe enthält möglicherweise einen nachgestellten Zeilenumbruch, muss jedoch ansonsten frei von zusätzlichen Zeichen sein. Der Fall sollte auch mit den bereitgestellten Beispielen übereinstimmen.
- Sie können Datums- / Uhrzeitfunktionen verwenden.
- Die Codelänge ist in Bytes zu messen.
o
, die anderen Instanzen des Namens jedoch nicht.Antworten:
Pyth -
1051039088 BytesVerwendet die Basisumwandlung. Zwei einfache Nachschlagetabellen, eine für die Namen und eine für die Startdaten und eine ternäre am Ende für Floopdoor.
Komprimiert die Zeichenfolge nicht als Basis 128, sondern als Basis 23. Zunächst wird sie in Indizes des Alphabets übersetzt. Dies erforderte, dass das Trennzeichen
c
in keinem der Monatsnamen vorkommt. Dann wird codiert, dass zehn von einer Zahl zur Basis 23 (der höchste Wert, der angezeigt wurdew
, war ), und dann zu Basis 256 konvertiert.Die Startdaten sind ihre Unicode-Codepunkte, keine Basiskonvertierung.
Probieren Sie es hier online aus .
Test Suite .
quelle
Python 3,
159156152151150148 BytesDas bytes-Objekt in
zip
enthält nicht druckbare Zeichen:(Danke an @xnor für den Vorschlag einer
for/zip
Schleife für -3 Bytes)quelle
b
direkt mitfor
anstatt mit einer Weile zu iterieren , mit so etwas wiefor c in b"...":i+=n>0;n-=c
.n
um aufhören zu sinken.x=n>c;n-=c*x;i+=x
Sollte immer noch mit so etwas möglich sein , weiß aber nicht, ob es sich lohnt.Piet 2125 Bytes
Es ist keineswegs das kürzeste, aber es ist hübsch und farbenfroh ...
Jedes Pixel wird von Hand von mir platziert. So führen sie gehen hier in FireFox (Chrome wird nicht funktionieren) und laden Sie es mit einer CODEL Breite von 1 (es wird schwarz erscheinen, keine Sorge), geben Sie die Nummer und drücken Sie die Taste Run!
Kleines Programm:
Vergrößert (Codel width von 10):
quelle
dead chex
die Byteanzahl nicht erhöht?Pyth
178156153147 BytesPermalink
Zum zweiten Mal ist jedes Pyth-Feedback sehr hilfreich.
Erläuterung
quelle
J=...
in den ternären Zustand zu versetzen .CJam,
989693 BytesDas obige ist ein umkehrbarer Hexdump, da der Quellcode nicht druckbare Zeichen enthält.
Die meisten nicht druckbaren Zeichen sind für den Online-Interpreter kein Problem, aber das Null-Byte in der ersten Zeichenfolge ist ein Deal Breaker.
Auf Kosten eines Bytes können wir dies beheben, indem wir 1 zur Eingabe und 1 zu jedem Codepunkt der ersten Zeichenfolge hinzufügen. Sie können diese Version im CJam-Interpreter ausprobieren .
Wenn der Permalink in Ihrem Browser nicht funktioniert, können Sie den Code aus dieser Paste kopieren .
Testfälle
Wie es funktioniert
quelle
SWI-Prolog,
237232213 BytesHier verwenden wir den Rückverfolgungsmechanismus von Prolog, um wiederholt
nth1/3
auf die Liste anzuwendenL
, um das erste ElementLastDay+1:MonthName
zu erhalten,L
für dasX < LastDay+1
gilt. Wir suchen dann den Monat unmittelbar vor diesem in der Liste, um den Tag des Monats auszuwerten.quelle
Q,
134146 Byteszweiter Schnitt - Programm (146 Bytes)
first cut - Funktion (134 Bytes)
testen
quelle
Julia,
231216184175 BytesDies liest eine Zeile aus STDIN und konvertiert sie in eine Ganzzahl, findet das erste Element einer umgekehrten Liste von Monatsstarttagen, an denen die Eingabe größer oder gleich dem Start ist, und druckt dann entsprechend.
quelle
Swift 1.2, 256 Bytes
Setzen Sie zum Ausführen den Code alleine in eine
.swift
Datei und führen Sie ihn mit ausswift <filename> <inputNumber>
quelle
Java,
357339 BytesEs ist nicht das effizienteste, aber ich mag, wie es funktioniert. Es wird der gesamte Flooptonia-Kalender erstellt und anschließend das Datum der Nummer ermittelt.
Input-Output:
77 --> 15 Karpasus 80 --> Floopdoor
Mit Zwischenräumen und Tabs versehen:
quelle
Java,
275269266257256252246244243 BytesFormatiert:
Interessanterweise ist es ein paar Bytes kürzer
quelle
JavaScript mit ES6
171164163 BytesIch bin nicht der beste JavaScript-Programmierer, aber ich habe mein Bestes gegeben und den folgenden Code erhalten
Um das Ergebnis zu sehen, müssen Sie auf den obigen Code in einer HTML-Datei verweisen und ihn ähnlich wie den folgenden Code verwenden
Im obigen Code ist fp.js die Datei, die den Javascript-Code enthält.
Kombinierter HTML- und JavaScript-Code mit Einzug ist
Bearbeiten:
Ich möchte Vihan dafür danken, dass er mir geholfen hat, die return-Anweisung zu entfernen und meinen Code um 17 Byte zu reduzieren
@ipi, danke, dass du mir geholfen hast, 7 Bytes zu sparen
quelle
"Qupu0Blinkorp0Paas0Karpasus0Floopdoor0Dumaflop0Lindilo0Fwup".split(0)
und 7 Bytes zu sparen.You must write a complete program
Ich denke das muss alleine laufen, eventuell muss man so etwas wie prompt () benutzen.Python 2, 168 Bytes
Dies behandelt den Tag
80
intern als18 Karpasus
, ignoriert ihn jedoch, wenn er zum Drucken aufgerufen wird. Auch dieinput()
Funktion von Python 2 (im Gegensatz zuraw_input()
) war hier praktisch.quelle
Perl 5, 140
Benötigt Laufen über
perl -E
:Testausgabe (gestohlener Testcode von @Dennis):
quelle
Haskell,
171167 BytesDas Programm liest seine Eingabe von stdin, die nicht auf NL enden darf. Beenden Sie die Eingabe mit EOF / ^ D oder verwenden Sie etwas wie
echo -n 80 | ./what-day-is-it
. (Einigeecho
verstehen den-n
Schalter nicht und lassen die NL standardmäßig weg).So funktioniert es: Die
main
Funktion liest die Eingabe, konvertiert sie in eineInteger
und ruft auf,f
dieFloopdoor
bei einer Eingabe ein Literal zurückgibt80
oder eine Liste aller möglichen Daten aufbaut, dh["1 Qupu", "2 Qupu", ... "1 Blinkorp", ... "67 Fwup"]
von der sie dasn
th-Element auswählt. Ich macheKarpasus
einen Tag länger.18 Karpasus
ist auf Position80
und behebt das FehlenFloopdoor
in der Liste.Edit: @MtnViewMark hatte die Idee des
18 Karpasus
Tricks und sparte 4 Bytes.quelle
,1
und "x" - da 80 durch die Musterübereinstimmung dafür abgefangen werden.Swift 2.0, 220 Bytes
Nichts Schlaues, nur Filter aus einer Sammlung von Tupeln ...
Bearbeitet, um Fehler zu korrigieren, ein Leerzeichen entfernt
quelle
JavaScript (ES6 auf Node.js), 196 Byte
Nimmt ein Befehlszeilenargument an:
Demo
Da
process.argv
im Browser kein Befehlszeilenargument ( ) vorhanden ist , wurde der Code im Snippet in eine Funktion eingefügt, die ein Argument akzeptiert:quelle
Swift 2.0,
215204Dies ist ein vollständiges Programm, das den Benutzer auffordert, die Nummer in STDIN einzugeben.
quelle
Matlab, 187 Bytes
Erweiterte Version:
Liest eine Zeile von der Konsole (
stdin
), findet das erste Element einer umgekehrten Liste von Monatsbeginntagen, an denen die Eingabe größer oder gleich dem Array-Element ist, und druckt dann entsprechend.Dies ist fast identisch mit der
Julia
Antwort, mit Ausnahme der Anzeigebühne. ( Wir können ihren ternären Operator nicht schlagen, der in Matlab nicht verfügbar ist .) Um eine vollständigeif
Aussage zu machen, verwenden wir einen kleinen Trick (ein BackspaceZeichen im Druckformat), um die Zahl 1 für den speziellen Tag / Monat zu "löschen"Floopdoor
In Zusammenarbeit mit den Chat-Teilnehmern Matlab und Octave .
quelle
Javascript ES5 mit 168 Bytes
Ungolfed:
quelle
C 241 Bytes
Nichts zu aufregend. Hätte 27 Bytes rasieren können, wenn es ein vollständiges Programm sein müsste.
quelle