Aqui está um simples para esticar seus músculos de compressão. Seu código (um programa completo) deve gerar a representação em inglês de todos os números cardinais de 1 a 100 e, em seguida, todos os números ordinais de 1 a 100. Os números em cada lista devem ser delimitados por vírgulas e espaços e adequadamente hifenizado. Cada lista deve começar com uma única letra maiúscula e concluir com um período. As duas listas devem ser separadas por uma nova linha.
Por uma questão de clareza, você deve produzir este fluxo de bytes exato:
One, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty, twenty-one, twenty-two, twenty-three, twenty-four, twenty-five, twenty-six, twenty-seven, twenty-eight, twenty-nine, thirty, thirty-one, thirty-two, thirty-three, thirty-four, thirty-five, thirty-six, thirty-seven, thirty-eight, thirty-nine, forty, forty-one, forty-two, forty-three, forty-four, forty-five, forty-six, forty-seven, forty-eight, forty-nine, fifty, fifty-one, fifty-two, fifty-three, fifty-four, fifty-five, fifty-six, fifty-seven, fifty-eight, fifty-nine, sixty, sixty-one, sixty-two, sixty-three, sixty-four, sixty-five, sixty-six, sixty-seven, sixty-eight, sixty-nine, seventy, seventy-one, seventy-two, seventy-three, seventy-four, seventy-five, seventy-six, seventy-seven, seventy-eight, seventy-nine, eighty, eighty-one, eighty-two, eighty-three, eighty-four, eighty-five, eighty-six, eighty-seven, eighty-eight, eighty-nine, ninety, ninety-one, ninety-two, ninety-three, ninety-four, ninety-five, ninety-six, ninety-seven, ninety-eight, ninety-nine, one hundred.
First, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth, fourteenth, fifteenth, sixteenth, seventeenth, eighteenth, nineteenth, twentieth, twenty-first, twenty-second, twenty-third, twenty-fourth, twenty-fifth, twenty-sixth, twenty-seventh, twenty-eighth, twenty-ninth, thirtieth, thirty-first, thirty-second, thirty-third, thirty-fourth, thirty-fifth, thirty-sixth, thirty-seventh, thirty-eighth, thirty-ninth, fortieth, forty-first, forty-second, forty-third, forty-fourth, forty-fifth, forty-sixth, forty-seventh, forty-eighth, forty-ninth, fiftieth, fifty-first, fifty-second, fifty-third, fifty-fourth, fifty-fifth, fifty-sixth, fifty-seventh, fifty-eighth, fifty-ninth, sixtieth, sixty-first, sixty-second, sixty-third, sixty-fourth, sixty-fifth, sixty-sixth, sixty-seventh, sixty-eighth, sixty-ninth, seventieth, seventy-first, seventy-second, seventy-third, seventy-fourth, seventy-fifth, seventy-sixth, seventy-seventh, seventy-eighth, seventy-ninth, eightieth, eighty-first, eighty-second, eighty-third, eighty-fourth, eighty-fifth, eighty-sixth, eighty-seventh, eighty-eighth, eighty-ninth, ninetieth, ninety-first, ninety-second, ninety-third, ninety-fourth, ninety-fifth, ninety-sixth, ninety-seventh, ninety-eighth, ninety-ninth, one hundredth.
Este é o código de golfe, a resposta mais curta em bytes ganha.
Pyth,
366342340 bytesDemonstração ao vivo.
Versão de 342 bytes:
Versão de 366 bytes:
fonte
PHP - 491 bytes
Pequena fraude aqui para os cardeais (estou usando a classe NumberFormatter que vem como padrão no PHP):
(adicionadas algumas novas linhas para facilitar a leitura)
fonte
@
(-4 bytes). Use uma nova linha em vez de escrever\n
(-1 byte). Coloque a definição de$z
na inicialização do segundofor
loop (-1 byte).PHP 5.3 ou superior, 195 bytes
Isso inclui o caractere de nova linha.
Faz parte da
NumberFormatter
aula, assim como a resposta de razvan . Exceto que eu explico os cardeais e ordinais de acordo com a UTI.Relacionado: https://stackoverflow.com/a/19411974/404623
fonte
Bytes 231 do Oracle SQL
SqlFiddleLiveDemo
fonte
JavaScript ES6,
562464 bytesAinda nem terminou o golfe!
Se isso não funcionar, talvez seja necessário adicionar um hexdump por causa de todos os caracteres especiais. Informe-me se for esse o caso e chegarei até você amanhã.
Se houver algum erro de digitação também me avise.
Código em pastebin (testado no Safari Nightly)
Explicação
Pode parecer um monte de personagens ilegíveis, mas na verdade é bem simples.
Começamos gerando os cardeais. Essa matriz é compactada usando a
btoa
funçãoPara percorrer um "intervalo", usamos o seguinte:
Agora, geramos uma matriz de comprimento 89 usando. O
...
é o que descompacta a matrizEntão mapeie através dele, i é o índice:
Agora, para a condição,
i < 1
ou se for o primeiro item, usaremos uma versão em maiúscula de um / primeiroCaso contrário ... se for inferior a 20, produzimos onze ... dezenove
Caso contrário ... usando
(i-i%10)/10
, obtemos o último dígito do número. Adicionamos 18 a ele para compensar 1..19. Nós adicionamos um-
e depois adicionamos o último dígito, ou i% 10Finalmente, adicionamos 'cem' até o fim, porque não o fazemos.
Repetimos isso para os dois tipos de números e separamos com uma nova linha
fonte
hundred
. Geral: ótimo trabalho | +1C ++
704642620602Sem o uso de biblioteca diferente
ostream
operator<<()
parachar*
s.Versão ao vivo .
Com algum espaço em branco e alguns comentários:
A cadeia compactada é decodificada de
a
parab
:Sem as novas linhas. Durante a descompressão,
|
s são substituídos por'\0'
e~
s são substituídos por' '
(peculiaridade da maneira como os caracteres são codificados em ASCII imprimível). Essas seqüências 'primitivas' são pesquisadas pelo índice nab
matriz usando ap
função e usadas para montar a saída.A compactação é um esquema simples do tipo LZ, onde os caracteres são codificados como literais ou como um deslocamento negativo no buffer e um comprimento de execução (codificado em dois caracteres) se uma correspondência de comprimento> = 3 for encontrada. A string pode ser compactada ainda mais usando caracteres não imprimíveis, mas eu gosto que meu código seja copiado e colado com segurança :)
fonte
Javascript (ES6), 713
Semelhante ao meu segundo envio de PHP sobre esta questão . (2444 - 713) / 2444 = compressão de 70,8%.
Violino
fonte
Mathematica
415 391407Os cardeais são dados por
IntegerName[n]
. Os ordinais são derivados dos cardeais.Saída:
fonte
eightth
"first" -> "\nFirst"
para"fir" -> "\nFir"
salvar 4 bytes.StringJoin
editada, "vigésimo primeiro ... trigésimo primeiro ..." se tornará "vigésimo primeiro ... trigésimo primeiro ...".JavaScript (ES6), 480
fonte
PHP - 842 bytes
Omitindo tags iniciais e finais regulares do PHP, a compactação é de 1 - 842/2445 = 65,6%
Basicamente, obtendo a saída
base64_encode(gzdeflate($input, 9));
e revertendo as operações. Obviamente, se eu optar pela saída em 8 bits puros vs. 64 base, seria 25% menor, mas correndo o risco de encontrar caracteres de escape ou não imprimíveis.fonte