ENTRADA: Qualquer sequência que consiste exclusivamente em letras minúsculas via argumento de função, argumento de linha de comando, STDIN ou similar.
SAÍDA: Imprima ou retorne um número que representará a soma das distâncias das letras de acordo com a seguinte métrica:
Você pega a primeira e a segunda letra e conta a distância entre elas. A distância é definida pelo layout do teclado QWERTY, onde todas as letras adjacentes na mesma linha têm distância 1 e todas as letras adjacentes na mesma coluna têm distância 2. Para medir a distância entre as letras que não são adjacentes, siga o caminho mais curto entre os dois.
Exemplos:
q->w is 1 distance apart
q->e is 2 distance
q->a is 2 distance
q->s is 3 distance (q->a->s or q->w->s)
q->m is 10 distance
Então você pega a segunda e a terceira letra, depois a terceira e a quarta, etc., até chegar ao final da entrada. A saída é a soma de todas essas distâncias.
Exemplo de entrada e saída:
INPUT: qwer
OUTPUT: 3
INPUT: qsx
OUTPUT: 5
INPUT: qmq
OUTPUT: 20
INPUT: tttt
OUTPUT: 0
Aqui está uma imagem mostrando quais letras estão na mesma coluna:
Isso é código de golfe, então o código mais curto em bytes vence!
Respostas:
CJam, 50 bytes
Observe que o código contém caracteres não imprimíveis.
Experimente on-line no intérprete CJam . Se o link permanente não funcionar, copie o código desta pasta .
fundo
Começamos a atribuir as posições 0 a 9 às letras na linha superior, 10 a 18 às letras na linha inicial e 20 a 26 às letras na linha inferior.
As posições de todas as 26 letras, em ordem alfabética, são
Essa é uma matriz de comprimento 26. Como as matrizes são agrupadas em CJam, e o ponto de código da letra h é 104 = 4 × 26 , giramos a matriz 7 unidades para a esquerda, para que a posição de cada letra possa ser acessada por sua ponto de código.
Agora, codificamos essa matriz considerando seus dígitos de elementos de um número 27 base e convertemos o número inteiro resultante em base 257.
Substituindo cada número inteiro pelo caractere Unicode correspondente, obtemos a sequência do código-fonte.
Como funciona
fonte
Python 2,
220...124119 bytesMuito obrigado ao Sp3000 por economizar muitos bytes.
Uso:
Confira aqui.
Explicação levemente ungolfed:
fonte
Java, 266 bytes
Versão não destruída:
fonte
int v=0,l=q.length(),p[][]=new int[l][2];
Prolog SWI, 162 bytes
Exemplo:
a(`qmq`)
saídas20
(Etrue
depois disso, mas não há nada que eu possa fazer sobre isso).Edit: teve que usar mais 3 bytes. Meu programa original passou nos casos de teste fornecidos, mas estava incorreto (os valores absolutos foram extraviados / ausentes)
Nota: se você quiser usá-lo, digamos Ideone , precisará substituir todas as aspas
`
duplas por aspas duplas"
. As aspas no meu caso (que é o padrão atual no SWI-Prolog) representam uma lista de códigos para cadeias de caracteres e aspas duplas, mas isso é diferente nas versões mais antigas do SWI-Prolog.fonte