Die 21 Frisuren der Apokalypse
Bei einer Liste von Zahlen zwischen 1 und 21 (oder 0 und 20) wird eine "zusammengenähte" Zeichnung der folgenden Flächen ausgegeben ( siehe Regeln für Nähinformationen ):
___ ,,, ooo === +++ ### -*~*-
(o o) (o o) (o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
*** ||| _/7 ))) ((( xxx @__
(o o) (o o) (o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
((_ >X< '*` ^^^ )|( \|/ &&&
(o o) (o o) (o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
Jedes einzelne Gesicht, das in einer neuen Zeile aufgeführt ist (das # ist die Ganzzahl-ID für das Gesicht):
___
(o o)
ooO--(_)--Ooo #1
,,,
(o o)
ooO--(_)--Ooo #2
ooo
(o o)
ooO--(_)--Ooo #3
===
(o o)
ooO--(_)--Ooo #4
+++
(o o)
ooO--(_)--Ooo #5
###
(o o)
ooO--(_)--Ooo #6
-*~*-
(o o)
ooO--(_)--Ooo #7
***
(o o)
ooO--(_)--Ooo #8
|||
(o o)
ooO--(_)--Ooo #9
_/7
(o o)
ooO--(_)--Ooo #10
)))
(o o)
ooO--(_)--Ooo #11
(((
(o o)
ooO--(_)--Ooo #12
xxx
(o o)
ooO--(_)--Ooo #13
@__
(o o)
ooO--(_)--Ooo #14
((_
(o o)
ooO--(_)--Ooo #15
>X<
(o o)
ooO--(_)--Ooo #16
'*`
(o o)
ooO--(_)--Ooo #17
^^^
(o o)
ooO--(_)--Ooo #18
)|(
(o o)
ooO--(_)--Ooo #19
\|/
(o o)
ooO--(_)--Ooo #20
&&&
(o o)
ooO--(_)--Ooo #21
Das Gesicht ist wie folgt:
hhhhh
(o o)
ooO--(_)--OooS
Wo h
ist die dynamische apokalyptische Frisur und S
ist der mögliche Stichbindestrich.
Beispiele
Eingang: [1,2,3,4,5]
Ausgabe:
___ ,,, ooo === +++
(o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
Eingang: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]
Ausgabe:
___ ,,, ooo === +++ ### -*~*- *** ||| _/7 ))) ((( xxx @__ ((_ >X< '*` ^^^ )|( \|/ &&&
(o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
Eingabe: ["Fraggle Rock"]
/ [22]
/ [-21041024]
/[22,23,24,25,26]
Ausgabe: Nobody cares.
Eingang: [1,1,1,1]
Ausgabe:
___ ___ ___ ___
(o o) (o o) (o o) (o o)
ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-ooO--(_)--Ooo-
Regeln
- Vorhergehende und nachfolgende Zeilenumbrüche / Leerzeichen / Bindestriche sind in Ordnung.
- Gesichter können in der Eingabe mehrmals vorkommen.
- Wenn die Eingabe eine ungültige Nummer enthält, liegt möglicherweise ein undefiniertes Verhalten vor.
- Die Naht:
- Die zusammengefügten Flächen werden durch einen einzelnen Bindestrich in der unteren (3.) Zeile verkettet.
- Die Gesichter werden alle auf einer einzigen Linie sein (im Gegensatz zur ersten Zeichnung).
- Die Eingabe kann mit 0 oder 1 indiziert sein, wobei 20 für 0, 21 für 1 maximal ist.
- Dies ist Code-Golf , die niedrigste Anzahl an Bytes gewinnt.
Antworten:
Japt
-R
,12211711311010910710510410310210099 Bytes1-indiziert, mit Indexumbruch. Ich habe hier die Spezifikation befolgt, die einen Bindestrich zwischen der letzten Zeile jedes Gesichts erfordert , und nicht die Testfälle, die einen Bindestrich nach der letzten Zeile jedes Gesichts enthalten.
Versuch es
quelle
&
Vorteilem³
war genial. Zumal das 1-basiert machte.&
dorthin bewegen könnte, wenn ich es 1-basiert machen würde;) Ich habe immer noch das Gefühl, dass es hier mehr zum Golfen gibt, aber es ist spät, so dass es bis morgen warten muss.Python 2 , 209 Bytes
Probieren Sie es online!
0-basierte Indizierung; hier nichts besonders Kluges, nur Daten, auf die per Slicing und Exec zugegriffen wird, anstatt einer Schleife.
quelle
Kohle ,
103102 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Den Eingang zweimal durchlaufen. Jedes Ergebnis wird dann implizit in einer eigenen Zeile gedruckt.
Generieren Sie in der zweiten Schleife einfach die Augen.
Wickeln Sie Frisur 6 in
-
s, andere Frisuren in Räumen.Extrahieren Sie die drei Frisurzeichen aus einer komprimierten Zeichenfolge.
Fügen Sie neun Leerzeichen zwischen den Haaren oder Augen ein.
Verschiebe 4 Felder nach links.
Drucken Sie die restlichen Gesichter zusammen mit einem
-
.quelle
R ,
413391 BytesVielen Dank an Giuseppe für 22 weniger Bytes und dafür, dass diese unter 400 Bytes liegen.
Probieren Sie es online!
quelle
utf8ToInt
undintToUtf8
rep
:for(i in s)K(I(c(rep<--
JavaScript (ES6),
200 bis199 ByteErwartet eine 1-indizierte Eingabe.
Probieren Sie es online!
Kommentiert
quelle
Ruby , 164 Bytes
Null indiziert. Probieren Sie es online!
Das ganze schwierige Zeug passiert in der obersten Zeile.
"_,o=+# *| )(x ^ &"
alle enthalten die Frisuren mit 3 identischen Zeichen, aus denen wir die wähleni
te Zeichen,j
.Wenn
j
es sich nicht um ein Leerzeichen handelt, gibt der folgende Ausdruck 3 Kopien des Zeichens zurück. Wenn es sich um ein Leerzeichen handelt, wählen wir die richtige Frisur aus%w{}
. Die "ungeraden" Frisuren haben die Nummern 6,9,13,14,15,16,18,19 undi%11-2
geben einen perfekten Hash dazu0..7
Alles, was bleibt, ist, 14 Felder (zentriert) aufzufüllen und eine angemessene Anzahl von Mitten / Böden zu drucken.
quelle
center(14)
Python 2 , 204 Bytes
Probieren Sie es online!
quelle
Java 8,
273263 BytesProbieren Sie es online aus.
Erläuterung:
quelle
R ,
247242 BytesProbieren Sie es online!
Versuchen Sie nun, R auf eine handlichere Byteanzahl zu bringen ...
Da das Ausführen von Zeichenmanipulationen in R so hoffnungslos ausführlich ist, habe ich mich darauf festgelegt, alle Gesichts- und Frisurenmuster so aufzulisten, wie sie sind. Zum hübschen Drucken der Frisuren benutze ich die
format
Funktion mitjustify="centre"
. Leider müssen wir ein zusätzliches Auffüllzeichen verwenden,i==20
daformat
das Auffüllen so berechnet wird, als ob der Backslash maskiert wäre\\|/
.Die aktuelle Version verwendet keinen nachgestellten Bindestrich.
Edit: Gutschrift an JayCe für -2 und Giuseppe für -3 Bytes.
quelle
justify="centre"
ich es wahrscheinlich wiederverwenden kann. Minus zwei Zeichen :"/"=rep
format(h[i],,,,"c",14+!20-i)
*
noch besser aussieht - jetzt ähnelt es derstring * number
in vielen anderen Sprachen üblichen Operation!C! ( C-Wow 1.1.0), 251 Bytes
(Erfordert die Übergabe von Argumenten bei der Programmausführung, durch Leerzeichen getrennt)
Ungolfed-Version:
quelle
Rot ,
333319 BytesProbieren Sie es online!
quelle
Rubin , 163 Bytes
Probieren Sie es online!
0-indiziert. Ich spielte mit der Antwort von Level River St und fand einen anderen Ansatz, um die Frisuren zu verschlüsseln, anscheinend von ähnlicher Golfiness. Hier behandeln wir den "längsten" 5-Zeichen-Haarschnitt als Sonderfall, triviale Muster im ersten Teil der Liste werden mit je 1 Zeichen codiert, und im zweiten Teil werden alle 3-Zeichen-Muster wörtlich aufgelistet, egal - sind diese Zeichen verschieden oder nicht. Endlich kommt das Affengesicht-Kochfeld.
quelle
C (GCC) ,
210212 Bytes-4 Bytes dank Ceilingcat . (Es ist wieder gewachsen, als ich einen Fehler behoben habe, den der ursprüngliche Code hatte.)
Ziemlich einfach.
Probieren Sie es online!
quelle
PowerShell ,
187171 Byte-16 Bytes dank mazzy
Probieren Sie es online!
0-indiziert, hat einen nachgestellten Bindestrich.
Abgerollt:
Nichts Besonderes. Nur die erste Zeile enthält eine anständige Logik. Es indiziert die Haarschnur mit
$current_entry_value*3
unds
schöpft den Teil mit Ubstrin ausg
, bevor alle Teile zu einer großen Linie zusammengefasst werden. Stieß auf das Problem, dem nächsten Caret zu entkommen, und fragte mich, warum ich einen IndexOutOfBounds-Fehler bekam, der jedoch behoben wurde. Verwenden Sie jetzt eine viel bessere Methode, um die erste Zeile zu kombinieren.195 Bytes, um der Angabe ohne führende / nachfolgende Bindestriche zu folgen
quelle
Python 3 , 240 Bytes
Probieren Sie es online!
quelle
Runenverzauberungen , 313 Bytes
Probieren Sie es online!
Ziemlich kompakt im Hinblick auf die Komprimierung der Zeichenfolgen und die Wiederverwendung von Segmenten, sofern möglich, sowie die Verwendung der Eingabewerte als direkte Sprungoffsets beim
B
Ranching.Wenn übermäßiger nachgestellter Speicherplatz zulässig ist, kann dieser durch Weglassen
4-
der letzten Zeile um 2 Byte verkürzt werden . +2 Bytes für a,1-
wenn das Finale-
nicht vorhanden sein soll (passende Spezifikation, verletzende Beispiele).Es
" (o o) "
ist ärgerlich, dass der Chunk unmöglich komprimiert werden kann, da die Erstellung mit Dingen wie" "4*
genau der gleichen Anzahl von Bytes endet.Eingaben> 21 machen Spaß. ZB eine einzelne 22 sorgt für eine gründliche Rasur .
quelle