Uma certa empresa de cabo conhecida possui um recurso um pouco desajeitado de 'Pesquisar programa' que funciona através do controle remoto. É preciso pressionar muito o botão; portanto, sendo um admirador da economia de movimento, pensei em procurar a ajuda de um programador para minimizar o número de movimentos dos dedos que tenho que fazer.
O recurso de pesquisa do Craptastic apresenta um layout de células selecionáveis, 1 linha de 3 células seguida por 6 linhas de 6 células, com a seguinte aparência:
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
Existem células para cada uma das letras A-Ze spaque são usadas para adicionar um espaço à string de pesquisa. deldeve ser usado para excluir um caractere; e savdeve ser usado para salvar a sequência de pesquisa. Ignoraremos essas funções reais para esse desafio; mas as células ainda são selecionáveis para nossos propósitos.
Começamos com uma string de pesquisa vazia e a Acélula selecionada; e usamos os botões de seta para a esquerda, direita, para cima e para baixo para alterar a célula selecionada. Quando a tecla central 'OK' é pressionada, o caractere na célula selecionada é adicionado à string de pesquisa. Por conveniência, nós usaremos <, >, ^, ve _para a esquerda, direita, para cima, para baixo e OK, respectivamente.
Para as letras e números, a ação dos botões direcionais é direta. Não há 'wrap-around'; por exemplo, se a célula atual estiver G, <não terá efeito.
Então, para inserir a string de pesquisa BIG, poderíamos usar a sequência
>_>v_<<_
(a inicial >é necessária para nos mover da célula inicial padrão Apara a célula B). Como alternativa, é claro que poderíamos usar >_v>_<<_; mas observe que não há uma sequência menor que 8 teclas que podem fazer o trabalho.
Agora, como a linha superior tem apenas três células, a ação é um pouco diferente e complica um pouco as coisas:
Primeiro, se a célula selecionada estiver na linha superior da letra A-F, a ^tecla move a célula selecionada diretamente acima; então A,Bvá para del, C,Dvá para spae E,Fvá para sav.
Por outro lado, se a célula selecionada é 'del', a vtecla move a célula selecionada para Ae a >tecla faz a célula selecionada spa. Da mesma forma, a vtecla move a célula selecionada de spapara Ce savpara E.
Isso significa que, por exemplo, se você estiver atualmente na Bcélula, a sequência ^vnão retornará você para a Bcélula; em vez disso, leva você para a Acélula.
E começando na Acélula, a sequência v>>^nos move para a Ccélula; enquanto a sequência ^>>vnos move para a Ecélula.
O desafio
Dado um programa de TV ou título de filme s, consistindo apenas de caracteres em A-Z, 0-9e space, seu programa / função deve exibir uma das seqüências de pressionamentos de tecla de comprimento mínimo para inserir scomo a sequência de pesquisa do estado inicial, da maneira Craptastic.
Sua saída deve ser uma sequência ou uma lista de valores distintos que representam uma sequência de cima, baixo, direita, esquerda e OK; para que você não fique restrito ao conjunto de caracteres <>^v_(por exemplo, udrl*ou uma lista com elementos inteiros 0,1,2,3,4 seria uma alternativa aceitável, desde que você articule qual é o seu esquema).
Isso é código-golfe ; os tabus usuais da brecha se aplicam. Que as probabilidades estejam sempre a seu favor para cada idioma.
Casos de teste
Abaixo estão as entradas e um exemplo de resposta aceitável (outras seqüências diferentes também estarão corretas, mas devem ter no máximo o comprimento dos exemplos fornecidos).
(Volto a postar o teclado aqui para que você possa tocar mais facilmente visualmente, se for o caso ...)
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_
dele savinútil aqui?
dele savnão tem função se 'OK' for usado quando forem selecionados; mas isso desperdiçaria um pressionamento de tecla.
FAnão vá em frente, mas para cima e para baixo