Cierta compañía de cable conocida tiene una característica algo torpe de 'Búsqueda de programas' que funciona a través del control remoto. Se necesita presionar mucho el botón; así que, como admirador de la economía del movimiento, pensé en buscar la ayuda de un programador para minimizar la cantidad de movimientos de los dedos que tengo que hacer.
La función de búsqueda Craptastic presenta un diseño de celdas seleccionables, 1 fila de 3 celdas seguidas de 6 filas de 6 celdas, que se ve así:
del spa sav
A B C D E F
G H I J K L
M N O P Q R
S T U V W X
Y Z 0 1 2 3
4 5 6 7 8 9
Hay celdas para cada una de las letras A-Z
, y spa
que se utilizan para agregar un espacio a la cadena de búsqueda. del
se supone que se usa para eliminar un personaje; y sav
está destinado a usarse para guardar la cadena de búsqueda. Ignoraremos estas funciones reales para este desafío; pero las celdas aún son seleccionables para nuestros propósitos.
Comenzamos con una cadena de búsqueda vacía y la A
celda seleccionada; y usamos los botones de flecha izquierda, derecha, arriba y abajo para cambiar la celda seleccionada. Cuando se presiona la tecla central 'OK', el carácter en la celda seleccionada se agrega a la cadena de búsqueda. Para mayor comodidad, usaremos <
, >
, ^
, v
y _
para la izquierda, derecha, arriba, abajo y OK, respectivamente.
Para las letras y los números, la acción de los botones direccionales es sencilla. No hay 'envoltura'; por ejemplo, si la celda actual es G
, entonces <
no tiene efecto.
Entonces, para ingresar la cadena de búsqueda BIG
, podríamos usar la secuencia
>_>v_<<_
( >
se requiere la inicial para movernos de la celda inicial predeterminada A
a la celda B
). Alternativamente, podríamos, por supuesto, usar >_v>_<<_
; pero tenga en cuenta que no hay una secuencia más corta que 8 teclas que pueden hacer el trabajo.
Ahora, dado que la fila superior tiene solo tres celdas, la acción allí es ligeramente diferente y complica un poco las cosas:
Primero, si la celda seleccionada está en la fila superior de letras A-F
, la ^
tecla mueve la celda seleccionada directamente arriba; así que A,B
ve del
, C,D
ve spa
y E,F
ve sav
.
Por otro lado, si la celda seleccionada es 'del', la v
tecla mueve la celda seleccionada a A
, y la >
tecla hace que la celda seleccionada spa
. Del mismo modo, la v
tecla mueve la celda seleccionada de spa
a C
, y sav
a E
.
Esto significa que, por ejemplo, si está actualmente en la B
celda, la secuencia ^v
no lo regresa a la B
celda; en cambio te lleva a la A
celda.
Y comenzando en la A
celda, la secuencia v>>^
nos mueve a la C
celda; mientras la secuencia ^>>v
nos mueve a la E
celda.
El reto
Dado un programa de TV o título de película s
, que consta únicamente de caracteres A-Z
, 0-9
y space
, su programa / función debe generar una de las secuencias de pulsaciones de teclas de longitud mínima para ingresar s
como la cadena de búsqueda desde el estado inicial en forma Craptastic.
Su salida debe ser una cadena o una lista de valores distintos que representen una secuencia de arriba, abajo, derecha, izquierda y OK; por lo que no está restringido al conjunto de caracteres <>^v_
(por ejemplo, udrl*
o una lista con elementos enteros 0,1,2,3,4 serían alternativas aceptables, siempre que articule cuál es su esquema).
Este es el código de golf ; se aplican los habituales tabúes legales. Que las probabilidades estén siempre a tu favor para cada idioma.
Casos de prueba
A continuación hay entradas y un ejemplo de respuesta aceptable (otras secuencias diferentes también serán correctas, pero deben tener como máximo la longitud de los ejemplos proporcionados).
(Vuelvo a publicar el teclado aquí para que uno pueda jugar visualmente más fácilmente, si no es así ...)
del spa sav
A B C D E F
G H I J K L
M N O P Q R
S T U V W X
Y Z 0 1 2 3
4 5 6 7 8 9
BIG >_>v_<<_
THE OFFICE >vvv_^^_>>>^_^<_vvv_>>>^^__<<<v_^_>>_
FARGO ^>>v>_^<<v_^>>v>vv_<<<<<^_>>v_
BUFFY >_>vvv_>>>^^^__^<<vvvvv_
DALLAS >>>_<<<_^>>v>v__^^<<v_vvv_
THX1138 >vvv_^^_>>>>vv_<<v__>>_<v_
ON DEMAND >>vv_<_^^^>_v>_>_<<<<vv_^^_>vv_>>^^_
NEWS RADIO >vv_>>>^^_vvv_<<<<_^^^^>_>vvv>_^^^<<v_>>>_<v_v_
ROOM 909 ^>>v>vv_<<<__<<_^^^>_>vvvvvv>_<<<^_>>>v_
FA
no va derecho, sino arriba y abajodel
ysav
inútil aquí?del
ysav
no tienen función si se usa 'OK' cuando se seleccionan; pero eso desperdiciaría una pulsación de tecla.Respuestas:
JavaScript (ES6), 196 bytes
Jugar golf a este código por debajo de 200 bytes fue básicamente una pesadilla (pero fue divertido). Realmente estoy esperando una implementación más simple y más corta.
Pruébalo en línea!
¿Cómo?
Variables
p es la posición actual en el teclado de acuerdo con el siguiente mapeo e inicializado a 6 (la tecla "A" )
P es la posición del personaje objetivo c
Mover codificación
Hay 7 movimientos posibles. Codificamos cada uno de ellos como un entero de 7 bits. Los 4 bits menos significativos tienen el valor de desplazamiento V + 6 y los 3 bits más significativos sostienen el símbolo ID S .
Alineación con teclas de función.
Al comienzo de cada iteración, ejecutamos el siguiente código para asegurarnos de que p esté alineado con la tecla de función actual si estamos ubicados en la primera fila:
Mover la lógica
El movimiento se elige con una (demasiado) larga cadena de operadores ternarios que se detalla a continuación.
fuente
Python 2 ,
294293289 bytesPruébalo en línea!
fuente
JavaScript, 311 bytes
No estoy seguro de cómo jugar golf ...
f
: convierte 'A-Z0-9' a 1-36, espacio a "S"g
: obtener 4 hermanos de la clave dadah
: encuentra la ruta más corta de p a qF
: la respuestafuente