Antes de leer esto, sugiero leer este pequeño rompecabezas: /puzzling/11408/longest-word-with-adarest-letters-on-a-keyboard
Quiero que cree un programa que tome un argumento, una palabra (solo letras minúsculas) y que muestre "Sí" si la palabra se puede escribir con teclas adyacentes en el teclado (vea el artículo) y "No" si la palabra puede No se escriba con letras adyacentes.
Aquí está la distribución del teclado utilizada en este desafío:
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
| 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 |
└───┴───┴───┴───┴───┴───┴───┘
Recuerda: este es codegolf, ¡así que gana la respuesta más corta!
code-golf
puzzle-solver
keyboard
Loovjo
fuente
fuente
Respuestas:
Pyth, 66
Pruébalo aquí.
Me sorprendió saber que Pyth no tiene una función de hipotenusa, por lo que probablemente sea superado por un idioma diferente. Propondré una función de hipotenusa a Pyth, para que esta atrocidad no suceda en el futuro.
Explicación
Transforme el teclado en esto:
Que luego codifico como
"qwertyuiopasdfghjkl*zxcvbnm"
. Luego usé divmod con módulo 9.5 para descubrir las coordenadas 2D de cada tecla. Luego calculo las distancias entre teclas consecutivas y verifico si la distancia al cuadrado <2.fuente
CJam,
837574 bytesPruébalo en línea.
Explicación
El enfoque general es producir una gran cadena de adyacencia que contenga cada par de caracteres de teclado adyacentes y luego verificar que cada par de caracteres de entrada adyacentes esté contenido en esa cadena.
Estoy bastante contento con la forma en que logré construir la cadena de adyacencia, que utiliza una lógica muy simple y compacta.
fuente
J, 77 bytes
Uso:
Método:
Para cada letra de entrada que genero es su coordenada 2D (similar a la imagen en la pregunta) en función de su índice en la cadena
'qazwsxedcrfvtgbyhnujmikXolX'
. Por cada par de letras en la entrada, verifico si sus coordenadas 'Manhattan-distance es menor que 2. Si todas son, salgoYes
, de loNo
contrario (abusando del operador').Pruébelo en línea aquí.
fuente
p
.i.
operador devuelve elindex of the last element + 1
para que pueda guardar 1 byte al no escribirp
y aún así obtener su índice correcto.CJam, 75
Pruébalo aquí ( Firefox aquí ).
Pasó por alto la parte Sí / No ... Corregido.
fuente