Em Keep Talking and Nobody Explodes , os jogadores são encarregados de desarmar bombas com base nas informações de seus "especialistas" (outras pessoas com um manual). Cada bomba é composta de módulos, um dos quais podem ser senhas, onde o especialista recebe essa lista de senhas possíveis, com as cinco letras:
about after again below could
every first found great house
large learn never other place
plant point right small sound
spell still study their there
these thing think three water
where which world would write
E o jogador recebe uma lista de 6 letras possíveis para cada local na senha. Dadas as combinações possíveis de letras, produza a senha correta. A entrada pode estar em qualquer formato razoável (matriz 2D, sequência separada por nova linha etc.) Você pode descontar o código usado para compactar / gerar a lista / sequência / matriz / qualquer que seja a senha. (Obrigado @DenkerAffe)
NOTA: As senhas não diferenciam maiúsculas de minúsculas. Você pode assumir que a entrada resolverá apenas uma senha.
Exemplos / Casos de Teste
A entrada aqui será representada como uma matriz de seqüências de caracteres.
["FGARTW","LKSIRE","UHRKPA","TGYSTG","LUOTEU"] => first
["ULOIPE","GEYARF","SHRGWE","JEHSDG","EJHDSP"] => large
["SHWYEU","YEUTLS","IHEWRA","HWULER","EUELJD"] => still
<
na minha solução Bash, por exemplo.Respostas:
Pitão, 13 bytes
Suíte de teste.
fonte
Bash, 22 bytes
Execute assim:
fonte
fold -5<<<ABOUTAFTERAGAINBELOWCOULDEVERYFIRSTFOUNDGREATHOUSELARGELEARNNEVEROTHERPLACEPLANTPOINTRIGHTSMALLSOUNDSPELLSTILLSTUDYTHEIRTHERETHESETHINGTHINKTHREEWATERWHEREWHICHWORLDWOULDWRITE|grep `printf [%s] $@`
JavaScript (ES6), 62 bytes
53 bytes no Firefox 48 ou anterior:
Teria 49 bytes se não fosse o requisito de insensibilidade a esse caso:
Mostrar snippet de código
fonte
Braquilog , 25 bytes
Os bytes não contados são a matriz de palavras, incluindo os colchetes.
Explicação
fonte
Ruby,
484239 bytesAgora que está pronto, é muito parecido com a solução Pyth,
mas sematé o ponto em que é basicamente uma porta direta agora.%s
formatarSe você produzir apenas o resultado
puts
, não precisará[0]
do final, poisputs
ele lidará com isso para você.Com casos de teste:
fonte
JavaScript (ES6), 71 bytes
Uso:
fonte
Python,
646057 bytesCódigo para criar a lista de palavras
w
como sequência, as palavras são separadas por espaço (os bytes são descontados do comprimento do código da solução):Solução atual (57 bytes): salvou 3 bytes graças a @RootTwo
Esta função usa um
tuple
(nãolist
!) De exatamente 5 strings que representam as letras possíveis para cada caractere de senha como entrada.Veja este código em execução no ideone.com
Segunda versão (60 bytes):
Esta função usa um
tuple
(nãolist
!) De exatamente 5 strings que representam as letras possíveis para cada caractere de senha como entrada.Veja este código em execução no ideone.com
Primeira versão (64 bytes):
Esta função aceita qualquer iterável (por exemplo,
list
outuple
) de exatamente 5 strings que representam as letras possíveis para cada caractere de senha como entrada.Veja este código em execução no ideone.com
fonte
"(?i)\\b"+"[%s]"*5%a
w=...
linha de código: " A solução real (57 bytes, salvou 3 bytes graças a @RootTwo): "Hoon , 125 bytes
Ungolfed:
Hoon não possui regex, apenas um sistema combinador de analisador. Isso torna bastante complicado fazer tudo funcionar:
(mask "abc")
traduz-se aproximadamente para regex[abc]
e é o núcleo do analisador que estamos construindo.;~(plug a b)
é um vínculo monádico de dois analisadores abaixo++plug
, que deve analisar o primeiro e depois o segundo, caso contrário ele falha.++knee
é usado para criar um analisador recursivo; fornecemos a ele um tipo (*tape
) do resultado e um retorno de chamada para gerar o analisador real. Nesse caso, o retorno de chamada é "chamar o fechamento inteiro novamente, mas com o final da lista". O?~
teste de runas é que a lista está vazia e fornece(easy ~)
(não analise nada e retorne ~) ou acrescente outramask
e recue novamente.Tendo construído o analisador, podemos usá-lo.
++skip
remove todos os elementos da lista para os quais a função retorna sim.++rust
tenta analisar o elemento com nossa regra, retornando umunit
que é[~ u=result]
ou~
(nossa versão do Talvez de Haskell). Se for~
(Nenhum, e a regra falhou ao analisar ou não analisou todo o conteúdo), a função retornará true e o elemento será removido.O que resta é uma lista, contendo apenas a palavra em que cada letra é uma das opções da lista fornecida. Estou assumindo que a lista de senhas já está no contexto sob o nome
pass
.fonte
Python 3, 81 bytes
Uma função anônima que recebe entrada de uma lista de seqüências de caracteres
x
e retorna a senha.A lista de senhas possíveis
l
é definida como:Esta é uma força bruta simples; Eu estava interessado em ver quão curto eu poderia conseguir isso sem regexes.
Como funciona
Experimente no Ideone
fonte