O objetivo deste código golf é converter números inteiros em palavras em inglês.
O programa solicita entrada. Se essa entrada não for um número inteiro, imprima NaN
. Se for um número inteiro, converta-o para palavras em inglês e imprima-as. Entrada mínima: 0 (zero). Entrada máxima: 9000 (nove mil).
Portanto, 5
retornos five
(maiúsculas e minúsculas não importam) e 500
retornos five hundred
ou five-hundred
(traços não importam).
Algumas outras regras:
Um one
antes hundred
ou thousand
é opcional: one hundred
está correto, mas hundred
também (se a entrada for, é 100
claro).
A palavra and
por exemplo também one hundred and forty five
é opcional.
O espaço em branco é importante. Então, para 500
, five-hundred
ou five hundred
está correto, mas fivehundred
não está.
Boa sorte!
Respostas:
Perl 281 bytes
Novas linhas adicionadas para sanidade horizontal. O acima pode ser usado interativamente ou canalizando um valor via stdin.
Funciona corretamente para todos os valores inteiros no intervalo [0, 19999] , valores fora desse intervalo exibem comportamento indefinido. Valores não inteiros serão truncados em direção a zero e, como tal, somente os valores verdadeiramente não numéricos serão relatados
NaN
.Uso da amostra:
Saída de amostra:
fonte
NaN
."JavaScript (375)
Provavelmente uma tentativa terrível, mas enfim, aqui vai ...
Bonito-impresso (como uma função):
Conversão de amostra (observe que ela sai mesmo
NaN
fora dos limites, ou seja, entrada inválida):fonte
+1
é muito difícil fazer melhor em uma linguagem como javascript. (você pode remover o espaço emN(s,z) {return
para salvar 1 caractere)O
string. Eu vou consertar isso ..Mathematica
6057Uso:
Editar:
fonte
Lisp,
7256 caracteresPercebo 1) que isso é antigo e 2) que ele depende inteiramente da biblioteca padrão para funcionar, mas o fato de você poder fazer com que o sistema de impressão c-lisp faça esse tipo de coisa sempre me impressionou. Além disso, isso de fato recebe a entrada de um usuário, converte e imprime.
Totaliza 72 caracteres.
:junk-allowed
faz com que parse-number inteiro retorne zero na falha, em vez de gerar um erro.~:[if-nil~;if-non-nill]
condicional baseado em zero, manipula NaN onde necessário~:*
faz backup da interpretação do argumento para consumir novamente a entrada~r
imprime o número como uma sequência de palavras em inglês, conforme solicitado, exceto com pontuação totalmente corrigidaAmostra:
Lisp informação principalmente de Practical Common Lisp .
Editar, jogado corretamente com até 56 caracteres
Esta versão funciona de maneira bastante diferente. Em vez de ler uma linha e convertê-la, ele invoca o leitor lisp para interpretar a entrada como uma expressão lisp s, tenta usá-la como um número e, se algum erro for produzido, os ignora, produzindo nada para alimentar a sequência de formatação condicional. Esta pode ser a primeira instância que eu vi do lisp produzindo um programa verdadeiramente conciso ... Divertido!
(read)
Invoca o leitor / analisador lisp para ler uma expressão da entrada padrão e convertê-la em um objeto apropriado(floor)
tentativas de converter qualquer tipo numérico para o número inteiro inferior mais próximo, os tipos não numéricos causam um erro(ignore-errors ...)
faz o que diz na lata, captura e ignora quaisquer erros na expressão incluída, retornando nulo para alimentar o ramo NaN da sequência de formataçãofonte
PHP,
327310308 bytestoma o número como parâmetro, trabalha para 0 <= n <= 12999
demolir
fonte
SAS, 70 caracteres
As instruções
window
edisplay
abrem o prompt de comandos do SAS. A entrada paran
continua na linha 1. Isso tira proveito do formato SAS,words.
que imprimirá o número como uma palavra ou série de palavras com "e", "" e "-" conforme apropriado.fonte
PHP
777 caracteres
Esta é definitivamente uma tentativa terrível, mas você não pode me acusar de tirar proveito de quaisquer brechas, além de ser um número muito sortudo. Obrigado ao ProgramFOX pela dica.
Mão longa
fonte
array('zero','one','two')
.['zero','one','two']
(php 5.4+). E se você não se importaE_NOTICE
,[zero,one,two]
também funcionaria.Python 2.x - 378
A derivada da resposta de Fireflys, embora mudando
P
para incluir milhões ou trilhões, etc., poderia recursivamente ser usada para qualquer faixa de números positivos. Isso também suporta valores de até 999.999Teste de amostra (entrada é
<<<
, saída é>>>
):Embora, se alguém puder explicar esse problema estranho de "buffer underflow" que eu tenho, isso seria ótimo ...
fonte
print divmod(-2,1000) #-> (-1, 998)
-1*1000
e um "restante" de998
.SmileBASIC,
365Trezentos e Quarenta e Sete bytesHá um espaço à direita se os últimos um ou dois dígitos forem 0.
fonte
MOO - 55 caracteres
player:tell($string_utils:english_number(read(player)))
Ou, se eu não precisar imprimir em "stdout" - 42 caracteres:
$string_utils:english_number(read(player))
Nota: este código não imprime nenhum prompt na saída padrão e é impresso em
zero
vez deNaN
quando a entrada não é um número.Como um bônus, esse código pode lidar com qualquer número dentro dos limites do idioma moo (
2147483647
--2147483648
).fonte
Wolfram Language
2740 bytesFazendo uso da função nativa,
IntegerName
,O acima solicita a entrada do usuário. A implementação atual retorna "NaN" se o usuário digitar algo diferente de um número inteiro.
Alguns exemplos (com entradas predefinidas) :
fonte
Python 2 , 333 bytes
Experimente online!
Isso é bom para 1 a 999.999, inclusive.
fonte
Pitão,
239242 bytesA entrada é um número inteiro no intervalo [0-999.999]. Experimente online aqui . Explicação pendente.
Versão anterior, operação muito semelhante, mas não suporta 0:
Explicação da versão anterior:
fonte