Bem, o nome de usuário do Doorknob no GitHub, Reddit e outros sites é KeyboardFire . Isso me dá uma idéia...
A tarefa
Você trabalha na KeyboardFire Inc., uma empresa que fabrica teclados especiais. E, com "especial", quero dizer que, sempre que você pressiona uma tecla, algo em sua casa acende! Com a nova série das maçanetas KeyboardFire, os objetos que acendem fogo são maçanetas.
No entanto , devido a estúpidas regulamentações governamentais, seus usuários precisam saber quais maçanetas da casa acenderão.
Considere esta arte ASCII de uma parte de um teclado QWERTY:
1|2|3|4|5|6|7|8|9|0
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
(Os |
representam os limites entre as chaves.)
Podemos tratar esse desenho ASCII exato como um tipo de "gráfico", em que cada caractere no intervalo [a-z0-9]
tem um índice x (horizontal) e y (vertical), onde (0,0)
está 1
. Por exemplo, a letra d
possui as coordenadas (2,6)
(tubos e espaços são incluídos no cálculo de coordenadas).
Agora vamos pensar na casa de cada usuário. Cada casa pode ser vista de cima para baixo como uma arte ASCII de 20x4 (neste mundo onde é legal vender teclados destrutivos, cada casa é do mesmo tamanho). Podemos usar D
's' para marcar as posições de cada maçaneta da casa. Aqui está um exemplo:
D D D D
D
D D
Vamos chamar isso de "mapa da casa". (Sim, são muitas maçanetas!)
Pressionar qualquer tecla acenderá a maçaneta da porta mais próxima. Por exemplo, se usarmos as coordenadas anteriores da letra d
, a maçaneta da porta mais próxima (por distância de Manhattan) estará nas coordenadas (1,4)
. Esta é a maçaneta da porta que acenderá quando a letra d
for atingida. Se marcássemos a maçaneta em chamas com um F
, o resultado seria:
D D D D
F
D D
As especificações
Seu programa terá duas entradas:
- Uma sequência que corresponde ao padrão
[a-z0-9]+
. - Um mapa da casa. Pode ser uma sequência, uma lista de sequências ou algo equivalente.
Você precisa passar por cada letra da string e acender a respectiva maçaneta (altere sua letra para um F
). Se a maçaneta da porta mais próxima já estiver pegando fogo, deixe-a como está. Se houver mais de uma maçaneta da maçaneta acesa usando esse método, você poderá acender a que desejar.
Depois que toda a cadeia é processada dessa maneira, você precisa imprimir o mapa da casa resultante.
Código-golfe, o programa mais curto vence. Falhas padrão banidas como de costume.
Exemplo
Corda:
helloworld123
Mapa da casa:
D D D D
D
D D
Resultados possíveis:
F F F D
F
D F
Ou:
F D F D
F
D F
Ou:
F F D D
F
F F
Ou:
F D D D
F
F F
EDIT: Uh ... há uma razão para eu ter uma resposta, mesmo com uma recompensa de +50? Se você achar as instruções complicadas / vagas, ficaria feliz se você postasse nos comentários ou algo assim ... ou se estou fazendo algo errado ...
EDIT 2: A recompensa expira em menos de um dia! Poste outra coisa! Por favor! POR FAVOR!!!! :(
d
as cordas (2, 6) e não (2, 2)? 2) Por que o exemplo tem tantas respostas possíveis? 3) Quando você explica como as coisas acenderão fogo, por que você está falandod
? Por que não dizer de maneira direta que pressionar pressionaráa
alguma casa em chamas? Será qued
fazê-lo também?Respostas:
JavaScript (ES6), 204 bytes
Tudo bem, eu atendo. ;)
Explicação
Teste
fonte
Ruby, 229 bytes
Não é muito bom, mas eu só tinha que obter a primeira resposta.
Versão ligeiramente não comentada / comentada:
fonte