Breve e doce descrição do desafio:
Com base nas idéias de várias outras perguntas deste site, seu desafio é escrever o código mais criativo em qualquer programa que tome como entrada um número escrito em inglês e o converta em forma inteira.
Especificações realmente secas, longas e completas:
- Seu programa receberá como entrada um número inteiro em inglês minúsculo entre
zero
enine hundred ninety-nine thousand nine hundred ninety-nine
inclusive. - Ele deve gerar apenas a forma inteira do número entre
0
e999999
e nada mais (sem espaço em branco). - A entrada NÃO conterá
,
ouand
, como emone thousand, two hundred
oufive hundred and thirty-two
. - Quando a casa das dezenas e as unidades são diferentes de zero e a casa das dezenas é maior que
1
, elas serão separadas por um caractere HYPHEN-MINUS em-
vez de um espaço. O mesmo vale para os dez mil e milhares de lugares. Por exemplosix hundred fifty-four thousand three hundred twenty-one
,. - O programa pode ter um comportamento indefinido para qualquer outra entrada.
Alguns exemplos de um programa bem-comportado:
zero
-> 0
fifteen
-> 15
ninety
-> 90
seven hundred four
-> 704
sixty-nine thousand four hundred eleven
-> 69411
five hundred twenty thousand two
->520002
popularity-contest
Abraão
fonte
fonte
Respostas:
Applescript
Um mash-up bobo e hacky que pode incomodar algumas pessoas de Cupertino / Mountain View, mas acho que é um mash-up criativo e bobo hacky.
Usa texto OSX em fala para falar o número do texto e a pesquisa de áudio do Google para ouvi-lo e convertê-lo em um número inteiro.
Exigências
Os tempos de atraso podem precisar ser ajustados, dependendo do tempo de carregamento do Chrome e do tempo de pesquisa no Google.
Exemplo de entrada:
Exemplo de saída:
fonte
Bash,
936455 caracteres *No fantástico
bsd-games
pacote disponível na maioria dos sistemas operacionais Linux, existe um pequeno brinquedo de linha de comando chamadonumber
. Transforma números em texto em inglês, ou seja, faz exatamente o oposto dessa pergunta. É exatamente o oposto: todas as regras da pergunta são seguidasnumber
. É quase bom demais para ser uma coincidência.Claro,
number
não responde à pergunta. Queremos o contrário. Eu pensei sobre isso por um tempo, tentei analisar as seqüências de caracteres e tudo mais, e então percebi que posso ligarnumber
para todos os números 999.999 e ver se alguma coisa corresponde à entrada. Nesse caso, a primeira linha em que corresponde tem o dobro do número da linha que estou procurando (number
imprime uma linha de pontos após cada número). Simples assim. Portanto, sem mais delongas, aqui está o código completo da minha entrada:Mesmo em curto-circuito, a conversão de "dois" é bastante rápida, e números ainda mais altos geralmente são decodificados em menos de um segundo na minha caixa. Aqui está um exemplo de execução:
Obviamente, você precisará ter
number
instalado para que isso funcione.*: Sim, eu sei, isso não é um
code-golf
desafio, mas falta é praticamente a única qualidade exigente da minha inscrição, então ... :)fonte
number
inverso é a coisa mais criativa nessa resposta. A golfiness também é boa :) :)Javascript
Você gosta de alguns
eval()
?Execute este script no console do seu navegador.
Edit: Obrigado pelo feedback. Bugs corrigidos (novamente).
fonte
twelve
quando ele retorna23
."twenty"
.seven thousand three hundred thirty five
me dê10335
Python
Só para fazer a bola rolar.
fonte
Perl + CPAN
Por que reinventar a roda, quando já foi feita?
Este programa lê seqüências de caracteres em inglês da entrada padrão (ou de um ou mais arquivos especificados como argumentos da linha de comando), uma por linha, e imprime os números correspondentes na saída padrão.
Testei esse código usando as entradas de amostra do desafio, bem como uma suíte de testes exaustiva composta pelos números de 0 a 999999 convertidos em texto usando o
number
utilitário bsd-games (obrigado, Wander Nauta!), E ele analisa corretamente todos eles. Como bônus, ele também entende entradas como, por exemplo,minus seven
(−7),four and twenty
(24),four score and seven
(87),one gross
(144),a baker's dozen
(13),eleventy-one
(111) egoogol
(10 100 ).( Nota: Além do próprio interpretador Perl, este programa também requer o módulo CPAN Lingua :: EN :: Words2Nums . Aqui estão algumas instruções para instalar os módulos CPAN . Os usuários do Debian / Ubuntu Linux também podem instalar este módulo através do gerenciador de pacotes APT como liblingua-en-words2nums-perl .)
fonte
Python
Uma solução recursiva geral, com verificação de validade. Pode ser simplificado para o intervalo de números necessário, mas aqui está o que eu acho:
fonte
VBScript 474
Essa é uma resposta bastante rotineira ... infelizmente, tão rotineira que o @Snack praticamente postou o mesmo processo, mas antes de mim.
fonte
Haskell
Semelhante a outras soluções recursivas, eu acho, mas tomei um tempo para torná-lo limpo.
Aqui está a fonte completa com todas as explicações: http://ideone.com/fc8zcB
fonte
Lisp comum, 94
A conversão de número em texto é incorporada ao CL, mas não o contrário. Constrói um mapeamento reverso para os números e verifica a entrada nele.
fonte