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 spaque se utilizan para agregar un espacio a la cadena de búsqueda. delse supone que se usa para eliminar un personaje; y savestá 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 Acelda 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 <, >, ^, vy _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 Aa 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,Bve del, C,Dve spay E,Fve sav.
Por otro lado, si la celda seleccionada es 'del', la vtecla mueve la celda seleccionada a A, y la >tecla hace que la celda seleccionada spa. Del mismo modo, la vtecla mueve la celda seleccionada de spaa C, y sava E.
Esto significa que, por ejemplo, si está actualmente en la Bcelda, la secuencia ^vno lo regresa a la Bcelda; en cambio te lleva a la Acelda.
Y comenzando en la Acelda, la secuencia v>>^nos mueve a la Ccelda; mientras la secuencia ^>>vnos mueve a la Ecelda.
El reto
Dado un programa de TV o título de película s, que consta únicamente de caracteres A-Z, 0-9y space, su programa / función debe generar una de las secuencias de pulsaciones de teclas de longitud mínima para ingresar scomo 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_
dely savinútil aquí?
dely savno tienen función si se usa 'OK' cuando se seleccionan; pero eso desperdiciaría una pulsación de tecla.
FAno va derecho, sino arriba y abajo