Dies ist eine ziemlich einfache Herausforderung, aber (ich hoffe) eine lustige.
Aufgabe
Wenn im Moment entweder der Monat 4
und der Tag ist 20
, die Stunde (auf einer 12-Stunden-Uhr) 4
und die Minute ist 20
oder die Minute 4
und die Sekunde ist 20
, drucken Sie diese ASCII-Kunst:
.
.:.
:|:
.:|:.
::|::
:. ::|:: .:
:|:. .::|::. .:|:
::|:. :::|::: .:|:;
`::|:. :::|::: .:|::'
::|::. :::|::: .::|:;
`::|::. :::|::: .::|::'
:::|::. :::|::: .::|::;
`:::|::. :::|::: .::|::;'
`::. `:::|::. :::|::: .::|::;' .:;'
`:::.. `;::|::. :::|::: .::|::: ::::;
`:::::. ':|::. :::|::: .::|:' ,::::;'
`:::::. ':|:::::|:::::|:' :::::;'
`:::::.:::::|::::|::::|::::.,:::;'
':::::::::|:::|:::|:::::::;:'
':::::::|::|::|:::::::''
`::::::::::;'
.:;'' ::: ``::.
:':':
;
Sie können nachgestellte Leerzeichen haben.
Andernfalls drucken Sie die Anzahl der Minuten und Sekunden, die bis zur nächsten Gelegenheit verbleiben, im Format: %d minutes and %d seconds left until your next hit.
wobei die Zeit minimiert wird.
Dies ist Code-Golf , also gewinnt der kürzeste Code in Bytes !
PS Wenn diese Herausforderung für diese Site zu unangemessen ist, sag es mir und ich werde sie ändern.
code-golf
ascii-art
kolmogorov-complexity
date
Maltysen
quelle
quelle
Antworten:
Python 2, 371 Bytes
Diese Quelle enthält nicht druckbare Bytes und wird daher als Hexdump dargestellt, mit dem dekodiert werden kann
xxd -r
.Lesbarer Teil:
quelle
JavaScript (ES6), 537 Byte
Verwendet die CP-1252-Codierung.
Hinweis: Alle nicht lesbaren Elemente in diesem Beitrag werden maskiert,
\u00xx
damit das Stack Exchange-System sie nicht automatisch entfernt. Sie sollten eine Größe von einem Byte haben.Erläuterung
Verwendet ein Lauflängencodierungsschema zusammen mit dem Packen jedes Zeichens in 4 Bits. Die Hauptlogik des Codes ist 174 Bytes und die Blattzeichenfolge (einschließlich Dekomprimierung) ist 364 Bytes. Weitere Details der Komprimierungsmethode finden Sie unten.
Komprimierungsalgorithmen
Keine Komprimierung, 911 Bytes
Dies ist die Blattfolge ohne Komprimierung.
Lauflängencodierung, 542 Bytes
Da es viele aufeinanderfolgende wiederholte Zeichen gibt, verbessert die Lauflängencodierung die Byteanzahl erheblich.
Jedes Zeichen, das dreimal oder öfter wiederholt wird, wird durch das Zeichen ersetzt, gefolgt von einer Dezimalzahl von
amount - 3
. Die codierte Zeichenfolge wird mit folgendem Code generiert:4-Bit-Packing + RLE, 364 Bytes
Die ursprüngliche Zeichenfolge enthält 9 verschiedene Zeichen, was bedeutet, dass 4 die minimale Anzahl von Bits ist, die jeweils dargestellt werden sollen. Auf diese Weise können genau zwei Zeichendarstellungen in ein einzelnes Byte passen, sodass ein einfacher (und golffreundlicher) Dekomprimierungsalgorithmus verwendet werden kann. Darüber hinaus sind noch 7 Zeichen übrig, sodass vor dem Packen die Basislängencodierung für Basis 7 verwendet werden kann. Wenn Sie jeden 4-Bit-Index in die oberen und unteren Halbbytes jedes komprimierten Zeichens einfügen, werden 2 Zeichen pro Byte gespeichert, da die CP-1252-Codierung jedes Zeichen unter dem Codepunkt 256 als einzelnes Byte codiert.
Der folgende Code wird zum Codieren und Packen der Lauflänge verwendet:
Huffman-Codierung (mögliche zukünftige Verbesserung)
Bestimmte Zeichen kommen viel häufiger vor als andere, sodass eine Huffman-Codierung (Ganzzahlen variabler Länge, die jedes Zeichen darstellen) einige weitere Bytes einsparen kann. Dies führt jedoch zu einer viel höheren Komplexität des Dekomprimierungsalgorithmus. Abgesehen von der viel höheren Arbeit kann die Dekomprimierung auch mehr Bytes kosten, als in der codierten Zeichenfolge gespeichert wird.
quelle
Javascript ES6, 905 Bytes
Puh .. Die 12-Stunden-Uhr hat meine ansonsten kurze ( ahum ) Lösung getötet.
905 Bytes zum Drucken von 898 Zeichen von ASCII Art Yay
Ungolfed Code
Hinweis: Der ungolfed Code wird nicht ausgeführt
Versuch es!
Im folgenden Codeausschnitt können Sie das Datum zum Testen der ASCII-Grafik festlegen
quelle
15:16:20
wird eine Übereinstimmung auf Ihrer Regex sein und versehentlich die magische Zeichenfolge anzeigen?()
für dendate
Konstruktor notwendig sind :c=new d(), ...
kann gerecht werdenc=new d, ...