Dado um número inteiro não negativo ( n
), crie uma função que retorne n
em ordem alfabética, de acordo com a ortografia literal de cada dígito em n
.
Exemplos:
Input: 101
>> one, zero, one
>> one, one, zero
Output: 110
Input: 31948
>> three, one, nine, four, eight
>> eight, four, nine, one, three
Output: 84913
Input: 5544
>> five, five, four, four
>> five, five, four, four
Output: 5544
Input: 1234567890
Output: 8549176320
Nota: as operações no exemplo são apenas ilustrativas e não precisam ser incluídas na saída. Apenas o número classificado alfabeticamente precisa ser retornado.
Isso é código-golfe, então o código mais curto em bytes vence.
Editar: a entrada pode ser obtida em qualquer formato desejado que melhor se adapte ao seu idioma e a saída pode ser produzida da mesma forma retornando da função ou impressão. A entrada sempre será um número natural (incluindo 0) e não conterá os zero iniciais.
Entrada OEIS relevante (A057846) encontrada por @DomHastings
00
....849
, isso significa que podemos imprimir o número,849
mas não a string"849"
? Na IMO, esse é apenas um formato de E / S complicado (ruim!), Além de um excelente desafio.001
? Se eles são significativos e o resultado não é1
, a maioria dos idiomas exigirá cadeias de caracteres como entrada, pelo simples fato de ser bruto, impraticável e geralmente quase impossível pedir ao analisador para preservar os zeros à esquerda nos números literais da base 10.Respostas:
Perl 6 ,
3228 bytesExplicação:
Teste:
fonte
05AB1E,
121110 bytesExplicado
Experimente online
Guardado 1 byte graças a Adnan
fonte
JavaScript (ES6), 54
Edite a mesma contagem de caracteres, mas evitando a variável global
z
Entrada / saída como strings
Teste
fonte
z
...Haskell,
62 5144 bytesComo o @nimi sugeriu, o uso de uma compreensão de lista é mais curto do que as funções de composição:
Para referência minha versão:
A versão sem ponto é um pouco mais longa:
Direto: filtre os dígitos na ordem correta e concatene o resultado.
fonte
Pyth,
1210 bytesNão tenho certeza se ele pode ser jogado mais. A entrada precisa estar entre aspas.
2 bytes salvos graças a @isaacg!
No pseudocódigo pitônico:
Teste aqui .
fonte
549176320
porC" Ȁ\0
\0
. Esse é provavelmente o problema que você estava enfrentando.Perl, 37 bytes
Código de 36 bytes + linha de comando de 1 byte (-F)
Exemplo de uso:
fonte
MATL , 19 bytes
Experimente online!
Explicação
fonte
Gelatina, 11 bytes
Experimente aqui.
Explicação
fonte
Mathematica
35 7847 bytes31 bytes salvos graças a uma sugestão do LIAMnYP!
IntegerDigits
divide o número em dígitos que são classificados de acordo com seus nomes em inglês.FromDigits
reúne os dígitos em um número de base 10.8549176320
fonte
FromDigits@SortBy[IntegerName]@IntegerDigits@#&
Interpreter
é dolorosamente lento, então esse é um bônus adicional.C,
142141117Passe o parâmetro quanto
long long *
af()
; a função modifica o parâmetro:long long
é necessário, pois o último caso de teste estourou eint
quando classificado.fonte
Python 2 - 95 bytes
Tentando jogar mais golfe ... Eu acho que a linha 2 é desnecessária e isso pode se tornar 1 lambda.
EDIT: versão 49 caracteres nos comentários, thx para xnor e vaultah para obter ajuda.
fonte
lambda n:''.join(sorted(`n`,key="8549176320".find))
8
para que ofind
dá -1.lambda n: "".join(sorted(n,key="549176320".find))
, que é realmente semelhante ao que você sugeriu, vaultah. Você deve publicá-lo!- Oracle 11 (SQL): 164 bytes
Forma longa e explicação
Obtenha a entrada como parâmetro para o script:
"crie" linhas usando connect by com base no comprimento da entrada:
Retire cada dígito da sequência de caracteres para cada posição:
Converta o dígito em data juliana e volte para Char para obter a ortografia:
Verifique se há zero - caso especial.
Use a função LISTAGG para concatenar linhas de volta em uma única lista de linhas, delimitada por vírgulas, ordenada alfabeticamente
Sempre divertido tentar ajustar o SQL para coisas assim ... :) realmente testa meu conhecimento sobre o bugger ...
fonte
Ruby, 60 bytes
fonte
Raquete,
142130 bytesDe que as conversões são
mais do quequase metade do comprimento (7664 bytes).fonte
(+ 1 answer)
para raquete!TSQL, 260 bytes
Usou classificação de bolha reversa para evitar referência ao comprimento e salvar alguns bytes
Golfe:
Ungolfed:
Insistir em usar tipos inteiros como entrada e saída adicionou 37 bytes
fonte
DECLARE @ varchar(99)=101
0.o é101
transformado em uma string automaticamente?stuff
é um nome de função objetivamente terrível.squash
oushove
oupack
seria melhor: Pstuff
porque é isso que as funções fazem: elas fazem coisas. Em seguida, seu código pode ser parecido comstuff(stuff(4, 5, stuff), stuff(stuff()).(stuff())()); stuff(stuff)
ClojureScript, 45 bytes
Utiliza alguma conversão de string-> int de vazamento de Javascript, por isso não é um Clojure válido.
fonte
Firebird, 317 bytes
Golfe:
Ungolfed:
Não há funcionalidade dividida no Firebird. Em vez disso, criei uma consulta recursiva para obter o próximo caractere repetidamente. Em seguida, selecione novamente aqueles ao classificar por nossa ordem correta. Por fim, concatene esses resultados novamente em uma lista. Substitua o delimitador de vírgula padrão por em branco. Eu poderia economizar 11 bytes criando uma nova tabela fictícia em vez de
rdb$database
mas pensei que isso poderia ser contra as regras.fonte
ZX Spectum, código da máquina,
5348474544 bytesconvtab defb 249 ; zero defb 244 ; one defb 248 ; two defb 247 ; three defb 2+205 ; four defb 1+205 ; five defb 246 ; six defb 245 ; seven ; defb 0 ; eight ; defb 3 ; nine ; last 2 conversions hidden in call-command
fonte
Fator, 128
Viva as construções! : D
fonte
PHP, 126 bytes
Até onde eu sei, o php não tem nenhum built-in que realmente ajude com isso (o melhor que eu poderia fazer usando um usort (str_split ()) tinha 5 bytes a mais), então a única coisa que estou feliz nessa resposta é a seguinte: jogos jogados com $ i para salvar alguns bytes na iteração.
fonte
APL, 23 bytes
Explicação:
n←⍕⍵
: obtenha a representação de stringn
e armazene-a emn
'8549176320'⍋
: encontre uma permutaçãon
desse tipo,n
dada a ordem8549176320
.n[
...]
: reordenarn
por essa permutação⍎
: avalie o resultado (para transformá-lo novamente em um número)fonte
⍎
e⍕
. Converter para tradfn removendo{
e}
e substituindo⍞
por⍵
. Por fim, remova0
como os tipos não listados no final:n['854917632'⍋n←⍞]
Clojure, 53 bytes
Bem, a ideia de compreensão de lista da solução Haskell parece ser a mais curta:
Minha abordagem original tem 1 byte a mais:
Você pode ver as duas funções on-line aqui: https://ideone.com/afac5n
fonte
Lisp comum, 104
Ungolfed
Converta inteiro como string, classifique caracteres usando a
string<=
comparação enquanto usa uma:key
função personalizada que converte um determinado caractere como a representação em inglês do valor numérico que representa. Normalmente, eu não usaria uma função-chave que faça tanto quanto essa, mas custa menos em bytes do que decorar / classificar / não decorar.fonte
Python 3, 234 bytes
Esta é uma tradução direta da minha resposta do fator , apenas por diversão.
A semântica da avaliação dos objetos "preguiçosos" do mapa e do zip é a peça mais sutil e difícil de encontrar nos excrementos de cavalos genuínos e difíceis de encontrar no universo. Às vezes,
s = map(f, x)
não permitirás
que seja usado corretamente ou de forma alguma.fonte
Pyke, 14 bytes
Experimente aqui!
fonte
C, 80 bytes
Pega uma sequência que contém um número na base 10 e imprime em
stdio
:fonte
Python 2.7.11, 67 bytes
Pega uma string como entrada e gera uma string.
fonte
Python 3, 74 bytes
fonte
PHP , 107 bytes
Experimente online!
Usa uma função de comparação definida pelo usuário para ajustar a ordem de classificação.
Saída
fonte