Antes de ler isso, sugiro ler este pequeno quebra-cabeça: /puzzling/11408/longest-word-with-adjacent-letters-on-a-keyboard
Quero que você crie um programa que aceite um argumento, uma palavra (apenas letras minúsculas) e emita "Sim" se a palavra puder ser digitada com as teclas adjacentes do teclado (consulte o artigo) e "Não" se a palavra puder seja digitado com letras adjacentes.
Aqui está o layout do teclado usado neste desafio:
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
| 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 |
└───┴───┴───┴───┴───┴───┴───┘
Lembre-se: este é um codegolf, então a resposta mais curta ganha!
code-golf
puzzle-solver
keyboard
Loovjo
fonte
fonte
Respostas:
Pyth, 66
Experimente aqui.
Fiquei surpreso ao saber que Pyth não tem uma função de hipotenusa, portanto isso provavelmente será superado por um idioma diferente. Vou propor uma função de hipotenusa a Pyth, para que essa atrocidade não aconteça no futuro.
Explicação
Eu transformei o teclado nisso:
Que eu codifico como
"qwertyuiopasdfghjkl*zxcvbnm"
. Então eu usei o divmod com o módulo 9.5 para descobrir as coordenadas 2D de cada tecla. Depois, calculo as distâncias entre as teclas consecutivas e verifico se a distância ao quadrado <2.fonte
CJam,
837574 bytesExperimente online.
Explicação
A abordagem geral é produzir uma grande sequência de adjacência contendo todos os pares de caracteres adjacentes do teclado e, em seguida, verificar se todos os pares de caracteres de entrada adjacentes estão contidos nessa sequência.
Estou muito feliz com o modo como consegui construir a cadeia de adjacência, que usa uma lógica muito simples e compacta.
fonte
J, 77 bytes
Uso:
Método:
Para cada letra de entrada, eu gero a coordenada 2D (semelhante à imagem na pergunta) com base no índice da string
'qazwsxedcrfvtgbyhnujmikXolX'
. Para cada par de cartas na entrada I verificar se as suas coordenadas Manhattan distância é menor do que 2. Se todos são, eu de saídaYes
,No
de outra forma (por abusar do `operador).Experimente online aqui.
fonte
p
.i.
operador retorna o valorindex of the last element + 1
para que eu possa salvar 1 byte sem escreverp
e ainda assim obter o índice correto.CJam, 75
Experimente aqui ( Firefox aqui ).
Negligenciou a parte Sim / Não ... Corrigido.
fonte