(inspirado por una pregunta sobre la revisión de código)
Supongamos que dos personas están jugando al Ahorcado , pero solo has escuchado el juego y quieres dibujar el estado actual.
Dadas dos palabras como entrada, donde las palabras coinciden [A-Z]+
o [a-z]+
(a su elección), muestran el estado actual del juego del ahorcado como arte ASCII, siguiendo las siguientes reglas.
- La primera palabra es la palabra a adivinar, y la segunda palabra son las letras ya adivinadas. Estos pueden tomarse como entrada en cualquier orden.
- La palabra a adivinar está garantizada como no vacía, pero las letras ya adivinadas pueden estar vacías (es decir, como si fuera el comienzo del juego).
- El juego siempre será un juego de ahorcado válido (es decir, las letras adivinadas no se duplicarán, las letras no se adivinarán más allá del final del juego, solo recibirá letras como entrada, etc.).
- Debajo del dibujo del ahorcado debe estar la palabra a adivinar,
_
en lugar de letras aún desconocidas, separadas por espacios. Por ejemplo, si la palabra a adivinar eraBOAT
, entonces debajo del dibujo del ahorcado debe estar_ _ _ _
. Si la palabra fueBOAT
conA
adivinado, a continuación, debajo del dibujo debe ser_ _ A _
. - Debajo de la palabra a adivinar debe haber letras ya adivinadas que no están en la palabra. Estos pueden estar en cualquier orden y pueden estar separados por cualquier separador no alfabético, si así se desea.
Estos son los estados del juego del ahorcado, desde el inicio inicial hasta el final del juego. Cada letra adivinada erróneamente avanza el estado en uno. Entonces, la primera letra adivinada erróneamente hace O
aparecer la cabeza , la siguiente hace |
aparecer el cuerpo , etc.
+---+
| |
|
|
|
|
=========
+---+
| |
O |
|
|
|
=========
+---+
| |
O |
| |
|
|
=========
+---+
| |
O |
/| |
|
|
=========
+---+
| |
O |
/|\ |
|
|
=========
+---+
| |
O |
/|\ |
/ |
|
=========
+---+
| |
O |
/|\ |
/ \ |
|
=========
Entrada
- Dos cadenas en cualquier formato conveniente , con la primera garantizada no vacía.
- Puede tomar la entrada en cualquier orden (por ejemplo, palabra para adivinar y luego letras adivinadas, o viceversa). Indique en su envío el orden de entrada.
Salida
La representación de arte ASCII resultante del juego del ahorcado en progreso, como se describió anteriormente, nuevamente en cualquier formato conveniente.
Reglas
- Las nuevas líneas o espacios en blanco iniciales o finales son opcionales, siempre que los caracteres se alineen correctamente.
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Si es posible, incluya un enlace a un entorno de prueba en línea para que otras personas puedan probar su código.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Ejemplos
# 1
BOAT
y ATG
+---+
| |
O |
|
|
|
=========
_ _ A T
G
# 2
ZEPPELIN
y
+---+
| |
|
|
|
|
=========
_ _ _ _ _ _ _ _
# 3
ZEPPELIN
y EATOLINSHR
+---+
| |
O |
/|\ |
/ \ |
|
=========
_ E _ _ E L I N
A T O S H R
# 4
RHYTHM
y ABCDE
+---+
| |
O |
/|\ |
/ |
|
=========
_ _ _ _ _ _
EDCBA
# 5
BOAT
y ATOB
+---+
| |
|
|
|
|
=========
B O A T
# 6
AIRPLANE
y AJKEI
+---+
| |
O |
| |
|
|
=========
A I _ _ _ A _ E
KJ
Respuestas:
Python 2 ,
215192184183 bytes-8 bytes gracias a Raphaël Côté
-1 byte gracias a Jonathan Frech
Pruébalo en línea!
fuente
|
) en lugar del brazo izquierdo (/
) cuando hay 2 letras incorrectas: Pruébelo en línea"\\/"
es igual a"\/"
.Carbón ,
836968 bytesPruébalo en línea! El enlace es a la versión detallada del código. Editar: guardado 14 bytes al cambiar a
switch
. Se guardó 1 byte imprimiendo el single|
como literal. Nota: En el momento de definir la cuestión,switch
no funcionaba en absoluto en modo detallado y necesitaba un arrastre«
en modo sucinto (la versión actual de TIO tiene ni fallo, por lo que muestra la traducción sucinta como 67 bytes), mientras queMap
's los errores me impidieron usarPrint(Join(Map(q, Ternary(Count(h, i), i, "_")), " "));
. Afortunadamente, logré crear un kludge para la misma longitud (y de hecho también intenté cambiar el otro bucle a un Mapa, pero también salió a la misma longitud). Explicación:fuente
Python 2 , 220 bytes
Pruébalo en línea!
-35 bytes gracias a Raphaël Côté
-20 bytes usando conjuntos
-1 byte gracias a micsthepick
fuente
translate
pero resultó ser más largo jajaja.for i in range(7):s=s.replace(`i`,'O|/\\/\\'[i] if i<c else ' ')
. Le da un solo bucle y simplemente cambia el reemplazo si ha terminado c. Puede bajar a 251 bytes de esta manera :)Jalea ,
7273 bytes+1 arreglando un error del juego de as que mostraba a la persona colgada por completo (cambiado
LN
aLạ6
casi el final)Un enlace diádico que toma la palabra a la izquierda y las letras (únicas y dentro del juego) a la derecha y devuelve una lista de caracteres, o un programa completo que toma la entrada como argumentos de línea de comando e imprime el resultado.
Pruébalo en línea!
¿Cómo?
En primer lugar:
Es el valor numérico del ahorcado completa en la base 9, donde cada uno de los 9 dígitos representan uno de los personajes:
<space>
,<newline>
,-
,|
,O
,/
,\
,=
, o+
.El resto del programa:
fuente
BOAT
eATOB
caso de prueba. Pruébalo en línea!Japt v2 ,
94918381 bytes-3 bytes de algunas ideas del enfoque de @ETHproductions para esto .
-8 bytes mediante la rotación de cadenas multilínea.
-2 bytes usando v2.
Toma ambas entradas de palabras como matrices de caracteres, con la palabra de adivinanza primero y las letras adivinadas en segundo lugar. Las letras incorrectas se muestran separadas por
,
s. Cuando no hay letras incorrectas, la última línea está en blanco (lo que significa que la salida contiene una nueva línea final adicional).Pruébalo en línea!
Explicación
Implícito:
U
yV
son matrices de entrada de caracteres.Inicie una matriz y empuje la cadena de formato de hombre colgado, girada a la izquierda 90 °.
Reemplazar (
r
) cada dígito (\d
) con la siguiente función:Si el dígito es
>=
(¨
) la cantidad de conjeturas incorrectas (VkU l
), un espacio (S
), de lo contrario, obtenga la parte del cuerpo adecuada para ese dígito ("..."gZ
).Gire al ahorcado 90 ° hacia la derecha y empuje
=
repetidamente 3 * 3 (³³
) veces hacia la matriz.Empuje la palabra para adivinar, con letras asignadas (
¡
) a sí mismas (X
) si están contenidas enV
(VøX
), o_
si no, y unidas con espacios (¸
), a la matriz.Empuje las letras adivinadas, con las letras en la palabra para adivinar eliminadas (
k
), a la matriz de salida. Cierre la matriz y únase con nuevas líneas (·
).Rotación visualizada:
fuente
W
pueda funcionar ya que las partes del cuerpo no aparecen de izquierda a derecha / de arriba a abajo. Sin embargo, pude guardar algunos bytes de tu versión.05AB1E , 83 bytes
Pruébalo en línea!
El mapa de bits:
05AB1E , 18 bytes
Pruébalo en línea!
Esto empuja el siguiente plan de mapa de bits:
Donde los siguientes bytes adicionales:
05AB1E , 13 bytes
Pruébalo en línea!
Reemplace las piezas del mapa de bits con los caracteres apropiados, dejando los 5 para reemplazar las piezas del verdugo más tarde:
El Ahorcado:
A continuación, calculamos cuántas veces el usuario adivinó mal al tomar las letras que están en la segunda entrada, pero no en la primera entrada:
05AB1E , 6 bytes
Pruébalo en línea!
Finalmente, usamos un mapa de bits secundario para sustituir al ahorcado, separándolo por nuevas líneas y preparándolo para la impresión final:
05AB1E , 26 bytes
Pruébalo en línea!
Esto da como resultado las primeras piezas, las únicas piezas restantes emiten las dos palabras en la parte inferior en formato diff ...
Las palabras de abajo:
Imprime la primera palabra sin las conjeturas que faltan:
05AB1E , 15 bytes
Pruébalo en línea!
05AB1E , 5 bytes
Pruébalo en línea!
Imprima las conjeturas perdidas calculadas de antes que almacenamos en un registro.
fuente
/
) antes del cuerpo (|
). Dos letras incorrectas deben dar como resultado que se muestren las piezas de la cabeza y el cuerpo. Pruébelo en líneaJalea , 86 bytes
Pruébalo en línea!
Menos mal ... esto fue divertido. Nunca he usado tantos
¤
personajes.Cómo funciona
fuente
C #,
305296 bytesSvaed 9 bytes gracias a @raznagul.
Pruébalo en línea!
Versión completa / formateada:
Esto también funciona para 314 bytes (probablemente podría ser aún más corto):
fuente
g.Select(c=>!w.Contains(c)?c+"":"")
cong.Where(c=>!w.Contains(c))
.JavaScript (ES6),
203196187186185184180177176 bytesToma la entrada como 2 matrices de caracteres individuales en la sintaxis de curry.
Intentajugarlofuente
1
,324
,5 6
(véase el último caso de prueba).Scala ,
392389 bytesEsto aún podría ser muy golfable.
Esto está dentro de una función que toma
s
yt
como parámetros, cons
la palabra para adivinar yt
la cadena que contiene letras ya probadas.EDITAR:
-1 byte:
t.contains(x) -> t contains x
-1 byte:
s.contains(x) -> s contains x
-1 byte:
.mkString(" ") -> mkString " "
Pruébalo en línea!
fuente
PHP 7, 246 bytes
toma datos de los argumentos de la línea de comandos. Ejecutar
-nr
o probarlo en línea .fuente