Não marquei a caixa de areia antes de postar esse desafio - parece que esse desafio foi proposto por Cᴏɴᴏʀ O'Bʀɪᴇɴ .
Dada uma entrada inteira, escreva um programa que imprima o enigma "quatro é um número mágico"
- Quatro é o número mágico
- Cinco é quatro e quatro é o número mágico
- Seis é três e três é cinco e cinco é quatro e quatro é o número mágico
- Onze é seis e seis é três e três é cinco e cinco é quatro e quatro é o número mágico
- Quinhentos são onze e onze são seis e seis são três e três são cinco e cinco são quatro e quatro é o número mágico
Se você já conhece o enigma ou está com preguiça de resolvê-lo, ansioso para descobrir qual é o enigma, aqui está uma explicação
O próximo número é o número de letras no número anterior. Então, por exemplo, cinco tem quatro letras, então o próximo número é quatro .
seis tem três letras, então o próximo número é 3 , e três tem cinco letras, então o próximo número é 5 e cinco tem quatro letras, então o próximo número é 4
A razão pela qual o enigma termina às quatro é porque quatro tem quatro letras , e quatro é quatro e quatro é quatro e quatro é quatro ... (quatro é o número mágico)
Casos de teste
0 =>
Zero is four and four is the magic number
1 =>
One is three and three is five and five is four and four is the magic number
2 =>
Two is three and three is five and five is four and four is the magic number
3 =>
Three is five and five is four and four is the magic number
4 =>
Four is the magic number
5 =>
Five is four and four is the magic number
6 =>
Six is three and three is five and five is four and four is the magic number
7 =>
Seven is five and five is four and four is the magic number
8 =>
Eight is five and five is four and four is the magic number
9 =>
Nine is four and four is the magic number
10 =>
Ten is three and three is five and five is four and four is the magic number
17 =>
Seventeen is nine and nine is four and four is the magic number
100 =>
One Hundred is ten and ten is three and three is five and five is four and four is the magic number
142 =>
One Hundred Forty Two is eighteen and eighteen is eight and eight is five and five is four and four is the magic number
1,000 =>
One Thousand is eleven and eleven is six and six is three and three is five and five is four and four is the magic number
1,642 =>
One Thousand Six Hundred Forty Two is twenty nine and twenty nine is ten and ten is three and three is five and five is four and four is the magic number
70,000 =>
Seventy Thousand is fifteen and fifteen is seven and seven is five and five is four and four is the magic number
131,072 =>
One Hundred Thirty One Thousand Seventy Two is thirty seven and thirty seven is eleven and eleven is six and six is three and three is five and five is four and four is the magic number
999,999 =>
Nine Hundred Ninety Nine Thousand Nine Hundred Ninety Nine is fifty and fifty is five and five is four and four is the magic number
Regras
- A entrada pode ser retirada de
STDIN
ou como argumento para uma função - A entrada será um número positivo entre 0 e 999.999
- A entrada conterá apenas números (seguirá a regex
^[0-9]+$
) - A entrada pode ser tomada como um número inteiro ou uma sequência
- Quando convertidos em uma sequência de palavras, espaços e hífens não devem ser incluídos na contagem (100 [Cem] são 10 caracteres, não 11. 1.742 [Mil setecentos e quarenta e dois] possui 31 caracteres, não 36)
- Quando convertidos em uma sequência, 100 deve ser Cem, não Cem ou Cem, 1000 deve ser Mil, não Mil ou Mil.
- Quando convertido em uma sequência 142, deve ser cento e quarenta e dois, não cento e quarenta e dois
- A saída não diferencia maiúsculas de minúsculas e deve seguir o formato " N é K e K é M e M é ... e quatro é o número mágico" (a menos que a entrada seja 4, nesse caso, a saída deve ser simplesmente "quatro é o número mágico ")
- A saída pode usar números em vez de letras ("5 é 4 e 4 é o número mágico" em vez de "cinco é quatro e quatro é o número mágico"), desde que seu programa seja sempre consistente
- A saída pode ser o valor de retorno de uma função ou impressa para
STDOUT
- Aplicam-se brechas padrão
- Isso é código-golfe , então o programa mais curto em bytes vence. Boa sorte!
Bônus
-30 bytes se o programa funcionar quando a entrada estiver entre -999.999 e 999.999.
Os números negativos, quando convertidos em palavras, têm apenas "negativo" na frente deles. Por exemplo, -4
"Negativo Quatro", Negativo Quatro é doze e doze é seis e seis é três e três é cinco e cinco é quatro e quatro é o número mágico
-150 bytes se o programa não usar nenhuma função interna para gerar a representação de seqüência do número
Entre os melhores
Este é um snippet de pilha que gera um placar de líderes e uma visão geral dos vencedores por idioma.
Para garantir que sua resposta seja exibida, inicie sua resposta com um título, usando o seguinte modelo de remarcação
## Language Name, N bytes
Onde N é o tamanho, em bytes, do seu envio
Se você deseja incluir vários números em seu cabeçalho (por exemplo, localizar pontuações antigas ou incluir sinalizadores na contagem de bytes), verifique se a pontuação real é o último número em seu cabeçalho
## Language Name, <s>K</s> X + 2 = N bytes
Respostas:
Bash + utilitários comuns (incluindo bsd-games), 123 - 30 = 93 bytes
Felizmente, a saída do utilitário bsd-games
number
é quase exatamente o que precisamos. Os números de saída são todos escritos numericamente e não em palavras, conforme o oitavo ponto:fonte
C,
263261 bytes - 180 = 81Inspirado pela resposta de Cole Cameron . Eu pensei que poderia ser melhor sem a definição de macro. Embora eu tenha conseguido, demorou um pouco para conseguir!
Requer um conjunto de caracteres do host com letras consecutivas (para que o ASCII esteja correto, mas o EBCDIC não funcione). Isso é para o par de tabelas de pesquisa. Eu escolhi
j
o caractere zero e aproveitei a necessidade de duas pesquisas, para poder subtrair uma da outra, em vez de ter que subtrair meu zero de ambas.Versão comentada:
Existe uma extensão óbvia para suportar milhões, substituindo
f(n/1000,8)
porf(n/1000000,7)+f(n/1000%1000,8)
.Saída de teste
fonte
Mathematica, 156 - 30 = 126 bytes
Estou simplesmente surpreso que isso use strings e não seja ridiculamente longo.
fonte
Swift 2 ,
408419 - 30 = 389 bytesEu seria capaz de me livrar de 176 bytes se o Swift não fosse tão detalhado com expressões regulares (removendo hífens e espaços) * olha furioso para a Apple *
Isso pode ser testado em swiftstub.com, aqui
Corri um pouco para o loop, e acontece que
100003
é o número entre 0 e 999999 que tem o resultado mais longo da string, que tem 6 iterações e éUngolfed
fonte
NSStringCompareOptions.RegularExpressionSearch
E eu pensei que JSString.fromCharCode
era detalhado. : Pstring.replace
. Swift:String.stringByReplacingOccurrencesOfString
Haskell, 285 - 180 = 105 bytes
De fato, não há nenhum built-in para exibir o número. Eu ainda estou insatisfeito com o placar. Sinta-se livre para comentar. Vou experimentar ainda mais. Ainda assim, a pontuação é melhor que a pontuação de Swift
uso
Explicação.
m
é trivial o suficiente, no entanto, oc
não é.c
é a função para contar o número de caracteres e o nome em inglês do número.fonte
C, 268-180 = 88 bytes
Experimente aqui .
Ungolfed
fonte
Java, 800-150 = 650 bytes
De-golfe
fonte
==0
para<1
. Então:return P<1?_>0?d:e:P<R?f[P]+Q:P<Y?(f[R+(P/X)]+" "+a(P%X,0,e)).trim()+Q:P<Z?a(P/Y,0,O)+a(P%Y,0,e)+Q:a(P/Z,0," thousand ")+a((P/Y)%X,0,O)+a(P%Y,0,e)+Q;
( - 10 bytes )QC, 265-30 - 150 = 85 bytes
Suíte de teste
Ungolfed:
fonte
JavaScript, 382-150-30 = 202 bytes
A entrada é fornecida como parâmetro para a Expressão de Função Imediatamente Invocada.
Entrada de teste:
De-golfe:
fonte
Python 641-150 = 501 bytes
Pelo menos não é mais longo que Java! É baseado nisso, exceto no uso de strings.
EDIT : Esqueci 0 e preciso dizer "5 é 4", não pule para "4 é o número mágico" - isso acrescentou um pouco à pontuação.
Experimente aqui!
fonte
i(5)
imprime4 is the magic number
, em vez de5 is 4 and 4 is the magic number
.Moo,
182176/192188 bytes - 30 = 146/158Versão de 188 bytes:
Versão dependente da implementação de 176 bytes :
Ambos são funções.
fonte
PHP, 168 - 30 = 138 bytes
fonte