La inspiración para este desafío debe ser ridículamente obvia al momento de la publicación.
La tarea
Debe crear un programa de estilo Shut the Box (no función, programa). Los conceptos básicos de cerrar la caja son:
Los jugadores intentan cerrar la caja girando un conjunto de palancas con la etiqueta 1-9. Deben hacerlo moviendo las palancas. La secuencia de eventos de cada turno es la siguiente:
- Se muestra la posición actual de las palancas.
- En un juego nuevo, la posición de las palancas debe mostrarse como
123456789
. - En un juego con palancas cerradas, todas las palancas cerradas se muestran como
-
. Por ejemplo, en un juego que tiene 1, 5 y 9 cerrados, la salida sería-234-678-
.
- En un juego nuevo, la posición de las palancas debe mostrarse como
- El di (c) e (es | son) enrollado.
- Si las palancas 7, 8 y 9 están apagadas, solo se lanza un dado de seis caras. De lo contrario, se lanzan 2 dados de seis caras.
- Se le pide al jugador que elija cuántas palancas desea voltear.
- Si el jugador elige un número> 9 o <0, el juego termina.
- Si el jugador elige una palanca ya cerrada, el juego termina.
- El jugador selecciona esa cantidad de palancas.
- Si la suma de las palancas no es igual al valor del di (c) e lanzado, el juego termina.
- Si todas las palancas están cerradas, felicidades, usted gana. De lo contrario, regrese al paso 1.
Reglas para el programa
- En cada turno, debe mostrar las posiciones actuales de las palancas.
- Debe generar el valor del rollo con la frase
You rolled:
(observe el espacio). - Debe solicitar (y esperar) el número de palancas para cambiar con la frase
How many levers to flip:
(observe el espacio). - Debe solicitar (y esperar) tantas palancas como el jugador especificado con la frase
Which lever to flip:
(observe el espacio). - Debe voltear las palancas especificadas.
- Si en algún momento el juego termina, debes dar salida
Game Over
. - Si el jugador termina un turno sin palancas abiertas, debes sacar
You win!
Juegos de ejemplo
123456789
You rolled: 5
How many levers to flip: 5
Which lever to flip: 1
Which lever to flip: 2
Which lever to flip: 3
Which lever to flip: 4
Which lever to flip: 5
Game Over
123456789
You rolled: 5
How many levers to flip: 3
Which lever to flip: 2
Which lever to flip: 2
Which lever to flip: 1
Game Over
123456789
You rolled: 12
How many levers to flip: 2
Which lever to flip: 3
Which lever to flip: 9
12-45678-
You rolled: 6
How many levers to flip: 2
Which lever to flip: 2
Which lever to flip: 4
1---5678-
You rolled: 11
How many levers to flip: 2
Which lever to flip: 5
Which lever to flip: 6
1-----78-
You rolled: 8
How many levers to flip: 1
Which lever to flip: 8
1-----7--
You rolled: 8
How many levers to flip: 2
Which lever to flip: 1
Which lever to flip: 7
---------
You win!
Respuestas:
Pitón 3, 348
Guardado 5 bytes gracias a Mathias Ettinger.
Guardado 7 bytes gracias a DSM.
Ooof, esta es larga. También odio que no haya una buena manera de hacer casos de prueba.
fuente
C,
405403398392390387 bytesSin golf
Editar: D'oh! Dejé una variable no utilizada en mi respuesta de golf. Lo había eliminado pero pegué la versión incorrecta.
fuente
PowerShell v2 +,
330322 bytesNuevas líneas para mayor claridad:
(Requiere la versión 2 o posterior ya
Get-Random
que no existía en PowerShell v1 ...)Explicación:
Comience con la configuración de la
$a
matriz de palancas tomando el rango1..9
, y también establezca$r
igual a un bloque de script que ejecutaremos más adelante (descrito a continuación con$b
). LaGame Over
redacción se establece al$g
comienzo de un bucle infinitofor(){...}
. En cada iteración, configuramos nuestra salida$o
y la enviamos inmediatamente (gracias a la(...)
encapsulación)-join
juntando la matriz y reemplazando cada0
una con a-
. (El0
se explica a continuación). Si la salida es igual a 9 guiones, salidaYou win!
yexit
.A continuación, establecemos nuestras tiradas de dados
$b
llamando a los almacenados$r
(vía&
) con algunos parámetros adicionales. ElGet-Random
comando con un-Maximum
de6
(-Maximum
está implícito) producirá un número entero de 0 a 5, inclusive. Agregamos1
a eso para obtener un dado de seis lados, y lo agregamos a otra tirada de dado aleatoria multiplicada por la(($a|sort)[8]-ge7)
cual verifica si el valor más alto que queda en las palancas es uno7,8,9
primero clasificando$a
y luego tomando el último elemento y verificando si es mayor -que-o-igual-a7
. Utilizamos la conversión de texto implícita para convertir el valor booleano en 0 (Falso) o 1 (Verdadero) para la multiplicación, por lo que el "dado" adicional esdie*0
odie*1
. Luego sacamos el resultado de la tirada del dado.El siguiente es el
Read-Host
en$l
por cuántos palancas. Tenga en cuenta que PowerShell agrega automáticamente el espacio de dos puntos:
después de unaRead-Host
solicitud, por lo que al menos lo obtenemos gratis. Luego verificamos que el número de palancas que el usuario desea voltear está entre 1 y 9, de lo contrarioexit
.Ahora entramos en un
while
bucle. En cada iteración de este ciclo, determinamosRead-Host
qué palanca, almacenamos$i
y restamos ese valor$b
. Luego también restamos la palanca correspondiente en la matriz y restamos cuántas veces más para consultar al usuario.La última línea (excepto la llave de cierre) prueba dos construcciones booleanas. El primero, solo
$b
, será solo$True
si el usuario no resta correctamente todos los números de la tirada del dado (en PowerShell, cualquier número que no sea cero es Verdad). La otra condición ordena$a
y toma el valor mínimo. Si restamos la misma palanca dos veces, entonces el valor mínimo será negativo (o Verdad); de lo contrario, el valor mínimo será0
(o Falsey).Ejemplo de ejecución:
fuente