Introdução
Ultimamente, estou me acostumando a digitar com o Swype .
Notei que certas palavras podem ser produzidas desenhando uma linha reta da sua letra inicial até a letra final ou pulando as letras que se repetem.
Por exemplo, eu posso digitar a palavra balloon
passando rapidamente pelas seguintes letras:
b> a> l> o> n.
Desafio
Vamos definir o caminho mais curto do Swype ou SSP
, como o número mínimo de segmentos de linha distinguíveis necessários para digitar uma sequência. Um segmento de linha é uma linha reta contínua entre duas ou mais letras. Qualquer mudança de direção inicia um novo segmento de linha - embora algumas palavras possam ser Swyped desenhando apenas uma única linha reta.
Use este layout de teclado QWERTY simples :
q w e r t y u i o p
a s d f g h j k l
z x c v b n m
No exemplo acima, a palavra balloon
terá um SSP
dos 4
detalhes na sequência abaixo:
1) Start at `b` (line segments = 0)
2) slide to `a` (line segments = 1)
3) slide to `l` (line segments = 2)
4) slide to `o` (line segments = 3)
5) slide to `n` (line segments = 4)
A cadeia qwerty
tem SSP
= 1, pois nenhuma mudança de direção é necessária ao digitar esta palavra.
Entrada
Uma cadeia de palavras única contendo qualquer a-z
via STDIN, argumento de função ou linha de comando.
Resultado
Imprima por STDOUT, retorne ou pelo seu idioma a alternativa mais próxima, o número que n
representa a string SSP
.
Uma nova linha à direita opcional no outut. Lacunas padrão não permitidas. O menor envio em bytes vence.
Notas
- Uma mudança de direção inicia um novo segmento de linha.
- As cartas que se repetem são contadas apenas uma vez (por exemplo:
bookkeeper
devem ser tratadas comobokeper
). - Normalmente, o Swpye corrige as letras perdidas observando as letras vizinhas e preenchendo sua melhor estimativa. Para esse desafio, suponha que não haja aprimoramentos de linguagem natural, texto preditivo ou correção de erros.
- As
A-Z
entradas em maiúsculas são tratadas como suas contrapartes em minúsculas. - Ignore quaisquer números
0-9
na entrada. - Caminhos diagonais são permitidos - isto é, uma linha recta que cobre letras
o
,k
,n
, por exemplo, contam como1
segmento. Esta regra aplica-se a qualquer inclinação diagonal (por exemplo: cartasc
,h
,i
estão em linha).
Exemplos
Input Output
---------------------
a 0
aa 0
aaaaaa 0
aaaaaabc 2
in 1
int 2
java 3
qwerty 1
chicago 5
balloon 4
BALLOON 4
typewriter 5
bookkeeper 6
stackexchange 11
2hello7 3
2HELLO7 3
Respostas:
CJam,
7876736862 bytesObserve que o código contém caracteres não imprimíveis.
Emprestando a idéia inteligente de @ isaacg de usar o RLE para contar os caminhos salvos em 6 bytes.
Experimente on-line no intérprete CJam . Se o link não funcionar, copie o código desta pasta .
Como funciona
fonte
Pitão,
535049 bytesFormato de compactação do teclado graças a @Dennis.
Esta resposta contém alguns caracteres não imprimíveis. Veja os links abaixo para o código correto.
Demonstração . Equipamento de teste.
Explicação:
fonte