Herausforderung
Ihre Aufgabe ist es, die Zeit (in 12 Stunden) in ASCII-Kunst auszugeben.
Alle Zeichen, die verwendet werden, sind wie folgt:
___ __ ___ ____ _ _ _____ __ ______
/ _ \ /_ | |__ \ |___ \ | || | | ____| / / |____ |
| | | | | | ) | __) | | || |_ | |__ / /_ / /
| | | | | | / / |__ < |__ _| |___ \ | '_ \ / /
| |_| | | | / /_ ___) | | | ___) | | (_) | / /
\___/ |_| |____| |____/ |_| |____/ \___/ /_/
___ ___
/ _ \ / _ \ _
| (_) | | (_) | __ _ _ __ _ __ _ __ (_)
> _ < \__, | / _` | ' \ | '_ \ ' \ _
| (_) | / / \__,_|_|_|_| | .__/_|_|_| (_)
\___/ /_/ |_|
(Konsultieren Sie für jede Zahl / jedes Symbol einzeln diese Liste ).
Sie erhalten Eingaben in einem Array des Formulars:
[hours, minutes, 'am/pm']
. Zum Beispiel[4, 57, 'am']
mit einfachen Anführungszeichen, die nur für am / pm verwendet werden- oder
"hours-minutes-am/pm"
. Zum Beispiel,"4-56-am"
- oder
[hours, 'minutes', 'am/pm']
für Sprachen, die keine führenden Nullen für Zahlen verarbeiten können. Zum Beispiel,[4, '07', 'am']
Sie können beide Eingabemethoden verwenden.
Die Ausgabe erfolgt in der Form 1 2 : 5 9 am
, in der ein Anfangsfeld, zwei Leerzeichen zwischen jeder Zahl (im Kern hat jede Zahl bereits ein Leerzeichen auf jeder Seite), ein Leerzeichen zwischen: (Doppelpunkt) und den benachbarten Zahlen und ein Leerzeichen vorhanden sind zwischen der letzten Nummer und am/pm
mit einem optionalen führenden und / oder nachfolgenden Zeilenumbruch. Alle Leerzeichen befinden sich zwischen dem Punkt ganz rechts des Symbols links und dem Punkt ganz links des Symbols rechts.
Implizite Ausgabe ist zulässig.
Die niedrigste Bytegröße gewinnt.
Die am/pm
werden so ausgerichtet , dass der Boden des p
in pm
mit dem Boden der den Rest des Ausgangs ausgerichtet ist, das heißt, die undercore die Oberseite Bezeichnen am/pm
beginnt in der dritten Zeile nach unten (keine führende Neue - Zeile zu zählen).
Der Doppelpunkt ist so auszurichten, dass sein erstes Zeichen (ein Unterstrich) in der zweiten Zeile nach unten beginnt (ohne eine führende neue Zeile).
Für den minutes < 10
Ausgang der Minuten mit einem führenden 0
(Sie sollen dies im Eingang empfangen). Zum Beispiel [8, 04, 'pm']
-> 8 : 0 4 pm
.
Sie dürfen die Daten für die Nummern nicht aus einer Bibliothek oder einer externen Ressource abrufen. Alle Daten müssen im Programm enthalten sein.
Für die Eingabe [12, 47, 'am']
wäre die Ausgabe beispielsweise wie folgt:
__ ___ _ _ ______
/_ | |__ \ _ | || | |____ |
| | ) | (_) | || |_ / / __ _ _ __
| | / / _ |__ _| / / / _` | ' \
| | / /_ (_) | | / / \__,_|_|_|_|
|_| |____| |_| /_/
(Wenn Sie Randfälle sehen, bei denen Sie sich nicht entscheiden können, was Sie tun sollen, posten Sie diese bitte in Kommentaren, und ich werde sie zu Beispielen hinzufügen.)
Antworten:
Perl,
592579540522510 BytesUnter einem Sektor!
Dieses Programm erwartet die Zeit im 2. Format ( "12-34 Uhr" ) als Befehlszeilenargument.
Kommentiert:
Beachten Sie, dass aufgrund von Problemen mit der Zeichencodierung beim Einfügen des obigen Codes in eine Datei die Ausgabe möglicherweise fehlerhaft ist. Hier ist also die Golfversion, Base-64-codiert. Kopieren Sie es und fügen Sie es ein in
base64 -d > 510.pl
:Hier ist die Schriftart, die ich verwende. Ich habe die Glyphen 12 Zeichen voneinander entfernt (die Größe von am / pm), um die Indizierung zu vereinfachen.
Diese Schriftart ist 592 Bytes.
Der vorherige Ansatz verwendete einige Variationen der RLE-Komprimierung, um diese auf 353 Bytes zu reduzieren, und zwar auf Kosten von 78 Bytes Dekomprimierungscode.
Die Huffman-Codierung komprimiert die Schriftart auf 221 Bytes auf Kosten von 154 Bytes für den Dekomprimierungsalgorithmus.
quelle
Bash + GNU-Dienstprogramme + figlet , 134
Ich bin mir nicht sicher, ob figlet erlaubt ist oder nicht, aber es scheint die richtigen Schriftarten bereitzustellen -
big
für die Ziffern undsmall
für die:
und{a,p}m
:Der Rest besteht darin, nur die richtigen Informationen zu erhalten
date
und die Formatierung so zu mischen, dass sie richtig aussieht:Figlet kann unter Ubuntu mit installiert werden
sudo apt-get install figlet
.quelle
C ++, 938 Bytes
Überarbeitete Version mit einigen grundlegenden Kompression von Eingangsdaten: Test hier
quelle
Haskell,
932699 BytesJa, unter 700 Bytes !!
Etwas ungolfed
Wie es funktioniert
(So funktioniert meistens das ungolfed Programm)
clock
nimmt ein Tupel der Zeit und gibt eine Zeichenfolge zurück.m
ist die aktuelle Minute, wobei der führende0
Wert hinzugefügt wird, wenn dies der Fall ist<10
.hm
ist die Stunden und Minuten mit einem verbunden:
. Als letztes wird die Ausgabe transponiert .Ziemlich einfach hier.
digit
ist eine Funktion, die die Zeichen Positionen in der gespeicherten Zeichenfolge zuordnet.Dies ist die magisch gespeicherte Zeichenfolge.
Die einzige wirkliche Änderung zwischen dem Golf- und dem Nicht-Golf-Programm besteht darin, dass das Golf-Programm eine gewisse Saitenkomprimierung hinzufügt, indem einige übliche Zeichenmuster durch ersetzt werden
!@$
. Die ursprüngliche Datenzeichenfolge bestand aus667
Bytes, nach der Ersetzungskomprimierung sind es nur noch390
Bytesquelle
JavaScript (ES6),
994985 ByteSchrecklicher Versuch mit Rohdaten, die überhaupt nicht komprimiert sind, und eine sehr schwierige Methode für die Ausgabe.
Aber hey ... es ist nur meine zweite Codegolf-Antwort!
Alte Übermittlung (994 Bytes) :
In Zeilen aufteilen, um das Lesen zu erleichtern.
Grundsätzlich:
quelle
Python 3,
10851072 BytesGolf gespielt
Ungolfed
quelle