(inspiriert von einer Frage bei Code Review)
Angenommen, zwei Personen spielen Hangman , aber Sie haben das Spiel nur mitgehört und möchten den aktuellen Status zeichnen.
Geben Sie bei zwei eingegebenen Wörtern, bei denen die Wörter übereinstimmen, [A-Z]+
oder [a-z]+
(nach Ihrer Wahl) den aktuellen Status des Henkerspiels als ASCII-Grafik gemäß den folgenden Regeln aus.
- Das erste Wort ist das zu erratende Wort und das zweite Wort sind die bereits erratenen Buchstaben. Diese können in beliebiger Reihenfolge eingegeben werden.
- Das zu erratende Wort ist garantiert nicht leer, aber die bereits erratenen Buchstaben können leer sein (dh als wäre es der Beginn des Spiels).
- Das Spiel wird immer ein gültiges Henkerspiel sein (dh erratene Buchstaben werden nicht dupliziert, Buchstaben werden nach dem Ende des Spiels nicht erraten, Sie erhalten nur Buchstaben als Eingabe usw.).
- Unterhalb der Henkerzeichnung muss sich das zu erratende Wort befinden. Anstelle
_
der noch unbekannten Buchstaben müssen Leerzeichen verwendet werden. Wenn zum Beispiel das zu erratende Wort lauteteBOAT
, muss es unter der Henkerzeichnung stehen_ _ _ _
. Wenn das WortBOAT
mitA
erraten wurde, dann muss unten die Zeichnung stehen_ _ A _
. - Unter dem zu erratenden Wort müssen sich bereits erratene Buchstaben befinden, die nicht im Wort enthalten sind. Diese können in beliebiger Reihenfolge angegeben werden und bei Bedarf durch ein nicht alphabetisches Trennzeichen voneinander getrennt werden.
Hier sind die Zustände des Henkerspiels vom Anfang bis zum Ende des Spiels. Jeder falsch erratene Buchstabe rückt den Staat um eins vor. Der erste falsch erratene Buchstabe lässt den Kopf O
erscheinen, der nächste lässt den Körper |
erscheinen usw.
+---+
| |
|
|
|
|
=========
+---+
| |
O |
|
|
|
=========
+---+
| |
O |
| |
|
|
=========
+---+
| |
O |
/| |
|
|
=========
+---+
| |
O |
/|\ |
|
|
=========
+---+
| |
O |
/|\ |
/ |
|
=========
+---+
| |
O |
/|\ |
/ \ |
|
=========
Eingang
- Zwei Zeichenfolgen in einem beliebigen Format , wobei die erste garantiert nicht leer ist.
- Sie können die Eingabe in beliebiger Reihenfolge vornehmen (z. B. zu erratende Wörter und dann erratene Buchstaben oder umgekehrt). Bitte geben Sie bei Ihrer Einsendung die Eingabereihenfolge an.
Ausgabe
Die resultierende ASCII-Grafikdarstellung des laufenden Henkerspiels, wie oben beschrieben, wieder in einem beliebigen geeigneten Format.
Regeln
- Führende oder nachfolgende Zeilenumbrüche oder Leerzeichen sind optional, sofern die Zeichen selbst korrekt ausgerichtet sind.
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Beispiele
# 1
BOAT
und ATG
+---+
| |
O |
|
|
|
=========
_ _ A T
G
# 2
ZEPPELIN
und
+---+
| |
|
|
|
|
=========
_ _ _ _ _ _ _ _
#3
ZEPPELIN
und EATOLINSHR
+---+
| |
O |
/|\ |
/ \ |
|
=========
_ E _ _ E L I N
A T O S H R
# 4
RHYTHM
und ABCDE
+---+
| |
O |
/|\ |
/ |
|
=========
_ _ _ _ _ _
EDCBA
# 5
BOAT
und ATOB
+---+
| |
|
|
|
|
=========
B O A T
# 6
AIRPLANE
und AJKEI
+---+
| |
O |
| |
|
|
=========
A I _ _ _ A _ E
KJ
Antworten:
Python 2 ,
215192184183 Bytes-8 Bytes dank Raphaël Côté
-1 Bytes dank Jonathan Frech
Probieren Sie es online!
quelle
|
) anstelle des linken Arms (/
) anzeigen, wenn zwei falsche Buchstaben angezeigt werden"\\/"
ist gleich"\/"
.Kohle ,
836968 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 14 Bytes durch Umschalten auf gespeichert
switch
. 1 Byte durch Drucken der Single|
als Literal gespeichert . Hinweis: Die Frage Damals wurde festgelegt,switch
hat nicht funktioniert überhaupt in Verbose - Modus und einen nachgestellten benötigt«
in Prägnante Modus (die aktuelle Version auf TIO weder Fehler hat, so ist es die Prägnante Übersetzung als 67 Bytes zeigt), währendMap
‚s Fehler haben mich daran gehindertPrint(Join(Map(q, Ternary(Count(h, i), i, "_")), " "));
. Zum Glück habe ich es geschafft, einen Kludge für die gleiche Länge zu finden (und zwar habe ich auch versucht, die andere Schleife auf eine Map umzuschalten, aber es ist auch mit der gleichen Länge herausgekommen). Erläuterung:quelle
Python 2 , 220 Bytes
Probieren Sie es online!
-35 Bytes dank Raphaël Côté
-20 Bytes mit Sets
-1 Bytes dank Micsthepick
quelle
translate
aber das stellte sich als länger heraus lol.for i in range(7):s=s.replace(`i`,'O|/\\/\\'[i] if i<c else ' ')
Es gibt Ihnen eine einzelne Schleife und Sie schalten gerade das Ersetzen aus, wenn Sie über c sind. Sie können auf diese Weise auf 251 Byte senken :)Jelly ,
7273 Bytes+1 Behebung eines Ass-Spielfehlers, bei dem die Person, die vollständig gehängt wurde, angezeigt wurde (geändert
LN
gegenLạ6
Ende)Ein dyadischer Link, der das Wort links und die (eindeutigen und spielinternen) Buchstaben rechts aufnimmt und eine Liste von Zeichen zurückgibt, oder ein vollständiges Programm, das die Eingabe als Befehlszeilenargumente verwendet und das Ergebnis druckt.
Probieren Sie es online!
Wie?
Zuerst:
Ist der numerische Wert des vollen Erhängten in der Basis 9, wobei jede der neun Ziffern eines des Zeichens darstellen:
<space>
,<newline>
,-
,|
,O
,/
,\
,=
, oder+
.der Rest des Programms:
quelle
BOAT
und fehlATOB
. Probieren Sie es online!Japt v2 ,
94918381 Bytes-3 Bytes von einigen Ideen aus @ETHproductions 'Ansatz dazu .
-8 Bytes durch mehrzeilige Zeichenfolgenrotation.
-2 Bytes mit v2.
Nimmt beide Worteingaben als Arrays von Zeichen, wobei das erratene Wort an erster Stelle und die erratenen Buchstaben an zweiter Stelle stehen. Falsche Buchstaben werden durch
,
s getrennt angezeigt . Wenn keine falschen Buchstaben vorhanden sind, ist die letzte Zeile leer (was bedeutet, dass die Ausgabe eine zusätzliche nachgestellte Zeile enthält).Probieren Sie es online!
Erläuterung
Implizit:
U
undV
sind Eingabezeichen-Arrays.Starten Sie ein Array und drücken Sie die um 90 ° nach links gedrehte Zeichenfolge im Hanging-Man-Format.
Ersetzen Sie (
r
) jede Ziffer (\d
) durch die folgende Funktion:Wenn die Ziffer
>=
(¨
) die Anzahl der falschen Vermutungen (VkU l
) ist, wird ein Leerzeichen (S
) angezeigt. Andernfalls erhalten Sie das entsprechende Körperteil für diese Ziffer ("..."gZ
).Drehen Sie den hängenden Mann um 90 ° nach rechts und drücken Sie ihn
=
3 * 3 (³³
) Mal wiederholt auf das Array.Schieben Sie das zu erratende Wort mit den Buchstaben
¡
, die entweder auf sich selbst (X
) abgebildet sind ( ), wenn sie inV
(VøX
) enthalten sind, oder,_
wenn nicht, mit Leerzeichen (¸
) in das Array.Schieben Sie die erratenen Buchstaben, wobei die Buchstaben im zu erratenden Wort entfernt sind (
k
), in das Ausgabe-Array. Schließen Sie das Array und verbinden Sie es mit newlines (·
).Drehung visualisiert:
quelle
W
funktionieren kann, da die Körperteile nicht von links nach rechts / von oben nach unten angezeigt werden . Ich konnte jedoch ein paar Bytes Ihrer Version speichern.05AB1E , 83 Bytes
Probieren Sie es online!
Die Bitmap:
05AB1E , 18 Bytes
Probieren Sie es online!
Dadurch wird der folgende Bitmap-Plan übertragen:
Wobei die folgenden zusätzlichen Bytes:
05AB1E , 13 Bytes
Probieren Sie es online!
Ersetzen Sie die Teile der Bitmap durch die entsprechenden Zeichen und lassen Sie die 5 für das spätere Ersetzen der Teile des Henkers:
Die Gehenkten:
Als nächstes berechnen wir, wie oft der Benutzer falsch geraten hat, indem wir die Buchstaben in der zweiten Eingabe, aber nicht in der ersten Eingabe erfassen:
05AB1E , 6 Bytes
Probieren Sie es online!
Schließlich verwenden wir eine sekundäre Bitmap, um den Erhängten durch Zeilenumbrüche zu ersetzen und ihn für den endgültigen Druck vorzubereiten:
05AB1E , 26 Bytes
Probieren Sie es online!
Dies führt zu den ersten Stücken, wobei die einzigen verbleibenden Stücke die beiden Wörter am unteren Rand in einem unterschiedlichen Format ausgeben ...
Die Wörter unten:
Gib das erste Wort ohne die fehlenden Vermutungen aus:
05AB1E , 15 Bytes
Probieren Sie es online!
05AB1E , 5 Bytes
Probieren Sie es online!
Drucken Sie die berechneten fehlenden Vermutungen aus, die wir zuvor in einem Register gespeichert haben.
quelle
/
) vor dem Körper (|
). Zwei falsche Buchstaben sollten zu Kopf- und Körperteilen führen. Versuchen Sie es onlineJelly , 86 Bytes
Probieren Sie es online!
Puh ... das hat Spaß gemacht. Ich habe noch nie so viele
¤
Zeichen verwendet.Wie es funktioniert
quelle
C #
305296 BytesSvaed 9 Bytes dank @raznagul.
Probieren Sie es online!
Voll / Formatierte Version:
Dies funktioniert auch für 314 Bytes (könnte wahrscheinlich noch kürzer sein):
quelle
g.Select(c=>!w.Contains(c)?c+"":"")
mitg.Where(c=>!w.Contains(c))
.JavaScript (ES6),
203196187186185184180177176 BytesNimmt die Eingabe als 2 Arrays einzelner Zeichen in der aktuellen Syntax an.
Versuchen Siees zu spielenquelle
1
,324
,5 6
(siehe letzten Testfall).Scala ,
392389 BytesDies könnte immer noch schwer Golf sein.
Dies ist innerhalb einer Funktion unter
s
undt
als Parameter, wobeis
das zu erratende Wort undt
die Zeichenfolge bereits ausprobierte Buchstaben enthalten.EDIT:
-1 Byte:
t.contains(x) -> t contains x
-1 Byte:
s.contains(x) -> s contains x
-1 Byte:
.mkString(" ") -> mkString " "
Probieren Sie es online!
quelle
PHP 7, 246 Bytes
Nimmt Eingaben von Befehlszeilenargumenten entgegen. Laufen Sie mit
-nr
oder versuchen Sie es online .quelle