Bueno, resulta que el nombre de usuario de Doorknob en GitHub, Reddit y otros sitios es KeyboardFire . Eso me da una idea...
La tarea
Usted trabaja en KeyboardFire Inc., una compañía que fabrica teclados especiales. Y, por "especial", quiero decir que, cada vez que presionas una tecla, ¡algo en tu casa se enciende! Con la nueva serie KeyboardFire Doorknob, los objetos que se encienden son pomos de las puertas.
Sin embargo , debido a las estúpidas regulaciones gubernamentales, sus usuarios necesitan saber qué pomos de las puertas de sus casas se encenderán.
Considere este arte ASCII de una parte de un teclado QWERTY:
1|2|3|4|5|6|7|8|9|0
q|w|e|r|t|y|u|i|o|p
a|s|d|f|g|h|j|k|l
z|x|c|v|b|n|m
(Los |
's representan los límites entre las teclas).
Podemos tratar este dibujo ASCII exacto como una especie de "gráfico", donde cada carácter en el rango [a-z0-9]
tiene un índice x (horizontal) e y (vertical), donde (0,0)
está 1
. Por ejemplo, la letra d
tiene las coordenadas (2,6)
(las tuberías y los espacios se incluyen en el cálculo de coordenadas).
Ahora pensemos en la casa de cada usuario. Cada casa se puede dibujar desde arriba hacia abajo como un arte ASCII 20x4 (en este mundo donde es legal vender teclados destructivos, cada casa es del mismo tamaño). Podemos usar D
's para marcar las posiciones de cada pomo de la puerta de la casa. Aquí hay un ejemplo:
D D D D
D
D D
Llamaremos a esto el "mapa de la casa". (Sí, ¡son muchos pomos de las puertas!)
Al presionar cualquier tecla, se encenderá el pomo de la puerta más cercano. Por ejemplo, si tomamos las coordenadas anteriores de la letra d
, el pomo de la puerta más cercano (por distancia de Manhattan) está en las coordenadas (1,4)
. Este es el pomo de la puerta que se encenderá cuando d
se golpee la letra . Si marcamos el pomo de la puerta con un F
, el resultado sería:
D D D D
F
D D
Las especificaciones
Su programa tomará dos entradas:
- Una cadena que coincide con el patrón
[a-z0-9]+
. - Un mapa de la casa. Puede ser una cadena, una lista de cadenas o algo equivalente.
Debe pasar por cada letra de la cadena y encender el pomo de la puerta respectivo (cambie su letra a F
). Si el pomo de la puerta más cercano ya está en llamas, déjelo como está. Si hay más de 1 pomo de la puerta que se puede encender con este método, puede encender el que desee.
Después de que toda la cadena se procesa de esta manera, debe imprimir el mapa de la casa resultante.
Code-golf, por lo que gana el programa más corto. Lagunas estándar prohibidas como de costumbre.
Ejemplo
Cuerda:
helloworld123
Mapa de la casa:
D D D D
D
D D
Posibles resultados:
F F F D
F
D F
O:
F D F D
F
D F
O:
F F D D
F
F F
O:
F D D D
F
F F
EDITAR: Uh ... ¿hay alguna razón por la que tengo una respuesta, incluso con una recompensa de +50? Si encuentra las instrucciones complicadas / vagas, me alegraría si publicara en los comentarios o algo ... o si estoy haciendo algo mal ...
EDIT 2: ¡La recompensa caduca en menos de un día! ¡Publica algo más! ¡Por favor! ¡¡¡¡POR FAVOR!!!! :(
d
las coordenadas de (2, 6) y no (2, 2)? 2) ¿Por qué el ejemplo tiene tantas respuestas posibles? 3) Cuando explicas cómo se encenderán las cosas, ¿por qué estás hablandod
? ¿Por qué no decir directamente que presionara
encenderá una casa en llamas? ¿Lod
hace también?Respuestas:
JavaScript (ES6), 204 bytes
Bien, lo responderé. ;)
Explicación
Prueba
fuente
Rubí, 229 bytes
No muy bueno, pero solo tenía que obtener la primera respuesta.
Versión ungolfed / comentada:
fuente