Para cada uma dessas nove palavras semelhantes e confusas , atribua um número de 1 a 9 da maneira que desejar:
though
through
thorough
Thoreau
throw
threw
trough
tough
troll
Escreva um programa que aceite uma string. Se a entrada for uma dessas nove palavras, imprima o número que você atribuiu a ela. Se a entrada não for uma das palavras acima, o programa poderá fazer qualquer coisa (incluindo erro ou loop para sempre).
As palavras diferenciam maiúsculas de minúsculas, por exemplo Thoreau
, devem produzir um número de 1 a 9, mas thoreau
não necessariamente fazem o mesmo.
Exemplo
Suponha que você atribua os números da seguinte maneira:
though 9
through 2
thorough 7
Thoreau 6
throw 3
threw 5
trough 4
tough 1
troll 8
Então, quando tough
é entrada, 1
deve ser emitida.
Quando through
é entrada, 2
deve ser saída.
Quando throw
é entrada, 3
deve ser saída.
. . .
Quando though
é entrada, 9
deve ser saída.
Todas as outras entradas podem fazer qualquer coisa.
Detalhes
- Pegue a string de entrada via stdin ou na linha de comando e envie para stdout.
- A saída pode conter uma única nova linha à direita.
- Em vez de um programa, você pode escrever uma função que pega uma string e imprime o resultado normalmente ou o retorna.
- O menor envio em bytes vence .
fonte
find
método de string Python . Então as regras mudaram. Idéia inteligente, não tão inteligente agora.Respostas:
CJam,
11 97 bytesComo funciona :
Estamos fazendo uso do fato de que a soma dos códigos ASCII + 2 modificados com 11 fornece uma ordem muito agradável de 1 a 9 e, em seguida, 10 para as nove palavras em questão. Aqui está o pedido:
Explicação do código :
4 bytes salvos graças ao user23013
Experimente online aqui
fonte
q1b2+B%
.Pitão, 8 caracteres
Experimente on-line: Demonstration or Test Suite
Estou usando a tarefa:
Explicação:
Btw, eu encontrei o número mágico 8109 usando este script:
fqr1 10Sme%CdT.z1
.fonte
Python 2,
9254 bytesA cadeia de índice é criada com
for word in words: print chr(hash(word)%95+32),
. Como apontado na resposta de Jakube, a função hash fornecerá resultados diferentes, dependendo da versão do Python. Essa string de índice é calculada no Python 2.7.6 de 64 bits.Resposta mais longa (92 bytes), mas menos enigmática:
Os programas retornam de 1 a 9 para que, por meio de um arremesso completo de Thoreau, joguei trolls difíceis nessa ordem. Quando a entrada não for encontrada, find retornará um -1 que convenientemente se transforma em zero após o
+1
.fonte
0
material não é mais necessário. Desculpe por mudar isso em você.Python 2.7.9 versão de 32 bits, 22 bytes
Observe que a versão é realmente importante aqui. Você obterá resultados diferentes se estiver usando uma versão de 64 bits do Python. Como o
hash
método calculará valores de hash de 64 bits em vez de 32 bits.A atribuição é:
Experimente online: http://ideone.com/Rqp9J8
fonte
sorted(...)==range(1,10)
eu parei.Pitão, 7 bytes
Estou usando a seguinte atribuição:
Cz
interpreta a entrada como um número 256 básico. Então, pegamos esse mod 31, subtraímos 1 e pegamos o resultado mod 10. Pseudocódigo equivalente:Demonstração , equipamento de teste .
fonte
Python 2, 27 bytes
Com esta tarefa:
São possíveis várias variações, por exemplo
fonte
Japonês , 6 bytes
Experimente | Verifique todas as palavras
Explicação
Aproveita o fato de que, ao analisar uma
n
string de base em um número inteiro, o JavaScript para de analisar se encontrar um dígito maior quen
e retornar o resultado até esse ponto. Ao usar a base-32 aqui (dígitos0-v
), osw
s em "jogou" e "jogou" são, essencialmente, ignorados.JavaScript, 22 bytes
Uma tradução direta - não parece valer a pena publicá-la separadamente.
fonte
C (gcc) , 66 bytes
Experimente online!
fonte
-O
sinalizador do compilador.h;f(char*s){for(h=33;*s;)h^=*s++;h=index("(Z5qW]2@H",h)-"H"+9;}
Java 8,
5325 bytesou
Porto de @Optimizer resposta CJam 's, porque ele (o mais provável) não pode ser feito a qualquer menor em Java ..
Experimente online.
fonte
parseInt
, não é? Uma porta da minha solução não seria mais curta?parseInt
uma base específica, mas infelizmente é excessivo de bytes devido ao requisito de classe estática:Long.parseLong(...,32)
como a variante mais curta. Além disso, parece falhar"throw"
(e"threw"
também) em Java por algum motivo .w
está fora do intervalo da base 32, ao que parece (e usar 33 fornece resultados incorretos).Geléia , 7 bytes
Experimente online!
Porta chata Jelly da fantástica resposta CJam.
fonte