Meus pais têm um dispositivo de home theater. O controle remoto está quebrado, tornando incrivelmente difícil navegar para a direita em um menu. Na maioria das vezes, ele não funciona, mas quando funciona, move-se para a direita incrivelmente rápido.
Isso é obviamente frustrante, mas é mais frustrante quando você deseja inserir um título de filme que exija a navegação em um teclado com a seguinte aparência:
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 1 2 3 4
5 6 7 8 9 0
Sua tarefa é tomar como entrada um título de filme e calcular o quão "frustrante" é digitar esse título de filme. O número de frustração de uma sequência específica é o número de letras que requerem mover-se diretamente da letra anterior a elas. Não nos importamos com o quão certo eles estão, pois se começamos a nos movermos para a direita, quase instantaneamente chegamos ao final da linha e não nos importamos com movimentos para cima, para baixo ou para a esquerda porque são fáceis.
Por exemplo, se quisermos digitar
keyboard
- Começamos
k
de graça. e
está logo acima,k
então não precisamos seguir em frente.y
está todo o caminho para a esquerda, portanto não há necessidade de se mover para a direita.b
no entanto, está na próxima coluna à direita, por isso precisamos avançar para a direita.o
está na próxima coluna, então precisamos mover para a direita para chegar a ela.a
está de volta na primeira coluna, então movemos para a esquerda para chegar a ela.r
está todo o caminho certo, então vamos direto para ele.d
são duas colunas à esquerda dar
coluna.
Os caracteres que precisam se mover para a direita bor
significam que isso é frustração 3.
Regras adicionais
Este é um desafio de código-golfe , para que suas respostas sejam pontuadas em bytes, com menos bytes sendo melhores. A entrada sempre consistirá em caracteres alfanuméricos, você poderá suportar letras maiúsculas ou minúsculas e precisará apenas de uma. A entrada nunca estará vazia.
Casos de teste
keyboard -> 3
2001aspaceodyssey -> 6
sorrytobotheryou -> 8
thinblueline -> 5
blast2 -> 3
"blast2" -> 3
(não é um filme real, mas algumas respostas têm problemas com esses casos de teste)90 -> 1
Respostas:
JavaScript (Node.js) ,
615554 bytesGuardado 1 byte graças a @nwellnhof
Recebe a entrada como uma matriz de caracteres.
Experimente online!
Quão?
Para todos os caracteres, mas dígitos maiores que0 0 , a coluna x indexada a 0 é fornecida por:
onde é o código ASCII do caractere.c
Para dígitos positivos , precisamos fazer:n
Exemplos:
Comentado
fonte
"blast2"
."234"
,.Gelatina , 11 bytes
Um link monádico que aceita uma lista de caracteres (maiúsculos).
Experimente online!
Quão?
Primeiro substitui qualquer
'0'
s por'4'
s (para que o restante do código os trate como estando na coluna mais à direita). Em seguida, lança para ordinais, adiciona um e módulo6
para obter índices de coluna baseados em 0. Em seguida, compara os vizinhos com is-less-than e soma o resultado.fonte
Perl 6 ,
4539 bytesExperimente online!
Funciona com letras maiúsculas.
(2-ord(c))%46%6
calcula a coordenada x invertida.fonte
Limpo , 85 bytes
Experimente online!
fonte
Ruby , 56 bytes
Experimente online!
Versão ingênua preliminar, será jogado golfe.
fonte
Japonês
-x
, 14 bytesExperimente online!
Porta desta resposta Jelly. Recebe a entrada como uma matriz de caracteres, com letras maiúsculas.
Explicação:
fonte
Java (OpenJDK 8) , 73 bytes
Não é uma solução ruim para Java! Esse zero no lado direito me custou vários bytes.
Experimente online!
Explicado
fonte
05AB1E ,
1211 bytes-1 byte graças a @Kevin Cruijssen
Outro porto da resposta de Jonathan Allan Jelly. Leva a entrada em maiúsculas.
Explicação:
Experimente online!
fonte
0'4
pode ser¾4
para salvar um byte ( dica 05AB1E relevante ).K (ngn / k) ,
32 3128 bytesExperimente online!
fonte
Retina 0.8.2 , 46 bytes
Experimente online! O link inclui casos de teste. Explicação:
Liste o alfabeto e os dígitos na ordem na OSK e mapeie cada um para um número de coluna (indexado 1).
Converta cada número de coluna em unário.
Conte o número de colunas que são seguidas por uma coluna maior (ou seja, à direita). O
&`
permite que as correspondências se sobreponham.fonte
Python 2 , 84 bytes
Experimente online!
fonte
Mathematica, 102 bytes
Função pura. Pega uma lista de caracteres como entrada e retorna um número como saída. Esta é uma solução bastante ingênua, sugestões de golfe são bem-vindas.
fonte
PHP,
74 8177 bytesExecute como pipe
-nR
ou experimente online .fonte
C (gcc) ,
82 7977 bytesExperimente online!
Esta função suporta apenas entradas em minúsculas
Ungolfed e comentou:
Se minha função tiver permissão para aceitar grandes cadeias de caracteres, ela poderá ser reduzida para 76 bytes com:
Experimente online!
Esta versão aceita apenas entrada, em
int*
vez dechar*
Edições:
c
)fonte