O quebra-cabeça:
Considere um console / jogo portátil com um d-pad em que você deve digitar um nome. Isso apareceu em muitos jogos mais antigos antes que o uso do QWERTY fosse popularizado nos consoles (por exemplo, acredito que o Wii use um layout de teclado QWERTY para entrada). Normalmente, o teclado na tela parece o efeito de *:
Padrão:
0 1 2 3 4 5 6 7 8 9
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 _ + ^ =
Com o caso alternado:
0 1 2 3 4 5 6 7 8 9
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 - + ^ =
Ou seja, todas as chaves alfanuméricas e o seguinte:
_: Um único espaço
-: Um hífen
+: Alternar maiúsculas e minúsculas apenas para a próxima letra
^: Alternar maiúsculas e minúsculas (ou seja, alternar maiúsculas e minúsculas)
=: Digite, conclua
* Obviamente, troquei teclas como "BKSP" e "ENTER" por versões mais curtas
E então o hardware incluiria um d-pad (ou alguma forma de controle onde você pode ir up, down, lefte right)
A tela também normalmente permite mover-se de um lado diretamente para o outro. Ou seja, se você estivesse focado na letra J, pressionar pressionaria rightpara mover para a letra A.
Sempre que eu estava digitando meu nome, eu sempre tentava descobrir a maneira mais rápida de fazer isso.
Objetivo:
Seu programa terá entrada de string, que pode incluir qualquer caractere alfanumérico, incluindo espaço e hífen, e seu objetivo é produzir a menor quantidade de pressionamentos de tecla no d-pad para produzir a string necessária.
Considerações:
Você não precisa incluir a tecla pressionada para pressionar o caractere real.
O foco sempre começa no A
Enter e =deve ser pressionado no final
Exemplo:
input: Code Golf
output: 43
Explicado:
A -> C= 2
C-> ^= 6 (movendo-se para a esquerda)
^-> o= 5
o-> d= 2
d-> e= 1
e-> += 5
+-> _= 1
_-> += 1
+-> G= 3
G-> o= 3
o-> l= 3
l-> f= 5
f-> == 6
Observe que é mais rápido pressionar as +duas vezes por a _e a Gdo que bater ^uma vez e depois trocar de volta.
A submissão vencedora (permitirei pelo menos 1w) será a solução mais curta (em bytes). Como esta é minha primeira pergunta, espero que isso seja claro e não muito difícil.