Esse desafio é baseado nesta questão do Stackoverflow .
Com um número positivo como entrada, produza-o como a soma de cada dígito multiplicado por sua representação de potência-10.
Entrada
Um número, como um número inteiro, uma sequência de caracteres ou uma lista de dígitos / caracteres.
- O número será estritamente positivo.
- Se você aceitar o número como uma sequência ou lista, ele não começará com a
0
.
Saída
Uma sequência que representa uma soma de cada dígito relevante da base 10, cada um multiplicado pelo seu respectivo poder da base 10. Uma soma é representada como a + b
. Você pode usar até um espaço ao redor de cada lado da +
placa, se desejar. Os operandos são listados em ordem decrescente.
0
nunca pode ser um operando válido.- O
+
sinal (cercado ou não por espaços) pode não ser a parte inicial ou final.
Exemplos
Input Output
12 10 + 2
or 10+2
or 10 +2
or 10+ 2
9 9
123 100 + 20 + 3
10 10
101 100 + 1
Saídas inválidas
2 1 + 1
10 10 + 0
1 0 + 1
12 + 10 + 2
12 10 + 2 +
12 2 + 10
Isso é código-golfe, então o código mais curto em bytes vence!
Respostas:
Python 3:
838079 bytesExperimente Online!
Minha primeira submissão ao Code Golf.
-3 bytes por ovs. Obrigado por essa dica útil :) -4 Bytes por mypetlion. Obrigado por essa dica de encurtamento :)
fonte
if'0'<t[i]
e alterando sua fórmula dex-i-1
parax+~i
. Aqui está um link do TIO com alterações passo a passo.print
instruçãoprint(*[t[i]+'0'*(x+~i)for i in range(x)if'0'<t[i]],sep='+')
para salvar 1 byte.Geléia , 9 bytes
Experimente online!
Como funciona
fonte
JavaScript (ES6), 47 bytes
Recebe a entrada como um número inteiro.
Experimente online!
Comentado
fonte
R , 55 bytes
Supondo que números inteiros estejam abaixo de 1e10, que é maior que o número máximo máximo de 32 bits de qualquer maneira ...
Experimente online!
fonte
10^(nchar(n):1-1
teoricamente trabalho para qualquer inteiro ...Linguagem de programação de Shakespeare ,
807806805804 bytesExperimente online!
-23 bytes se um caractere nulo puder ser gerado primeiro
Explicação
fonte
Python 2 , 64 bytes
Experimente online!
Python 2 , 66 bytes
Experimente online!
fonte
Geléia ,
1211 bytesUm programa completo que aceita o número como uma lista de dígitos (no formato Python) que imprime o resultado.
Experimente online!
Quão?
@ 12 bytes anteriores:
fonte
Haskell,
6054 bytesEdit: -6 bytes graças a Delfad0r.
Toma o número de entrada como uma sequência.
Experimente online!
fonte
tail.(>>=('+':)).filter(>="1").scanr((.('0'<$)).(:))""
economiza 6 bytes Experimente online! .05AB1E , 10 bytes
Implementação direta.
Insira como lista de dígitos.
Experimente online!
Explicação
fonte
Python 2 , 64 bytes
Uma função sem nome que pega uma lista de dígitos
n
e retorna uma string.Experimente online!
enumerate(n)
produziria tuplas deindex, item
diâmetron
com um índice começando em0
.No entanto
enumerate
, também tem um índice de partida opcional como seu segundo argumento, definindo isso para-len(n)
chegarmos índices (e
s) de-len(n)
,-len(n)+1
, ...,-1
.Isso significa que o número de zeros à direita necessários para qualquer item (
b
) é-1-e
, obtendo~e
assim~e*'0'
os zeros à direita necessários.`b`
obtém uma representação de string do dígito inteirob
e+
concatena isso com esses zeros.if b
filtra as entradas comb==0
.'+'.join(...)
depois une as seqüências resultantes aos+
caracteres.fonte
Python 2,
827371 bytes-9 bytes graças a @ovs
-2 bytes graças a @JonathanAllan
Experimente Online
fonte
Haskell ,
565552 bytes-4 bytes graças a nimi .
Experimente online!
explicação
Experimente online!
fonte
Perl 6 , 38 bytes
Experimente online!
Bloco de código anônimo que pega uma lista de dígitos e retorna uma string.
Explicação:
fonte
APL (Dyalog),
464140 bytes-5 bytes graças a @dzaima
Função de prefixo anônimo. Recebe a entrada como uma sequência. TIO
(Esta é a minha primeira vez usando APL no PPCG, provavelmente jogável. Além disso, maldição, zeros!)
fonte
⎕IO←0
Retina , 19 bytes
Experimente online! O link inclui casos de teste. Explicação:
Listar todos os dígitos diferentes de zero
Para cada dígito, anexe quantos zeros houverem dígitos finais.
Separe cada resultado com
+
s em vez da nova linha padrão.Retina 0.8.2 , 21 bytes
Experimente online! O link inclui casos de teste. Explicação:
Liste todos os sufixos da entrada que começam com dígitos diferentes de zero.
Substitua todos os dígitos finais por zeros.
Junte os resultados com
+
s.fonte
C (gcc) ,
7169 bytesCada etapa da função recursiva subtrai a parte que será impressa e passa o restante do número.
Agradecimentos a ceilingcat pela sugestão.
Experimente online!
fonte
Braquilog ,
3532 bytes-3 bytes porque 0 não é uma entrada válida
Experimente online! ou testinguite
Explicação
fonte
|∧Ṡ
do final. :)Brachylog v2, 15 bytes
Experimente online!
Muito, muito ineficiente.
De alguma forma, isso consegue usar apenas 6 bytes na parte mais difícil da maioria dos idiomas (dividindo o número no formato a 10 b, onde a é um dígito, em ordem decrescente) e 9 bytes inteiros para a "junção com
+
"(embutido na maioria dos idiomas de golfe, mas não no Brachylog).Ao contrário da maioria dos meus envios de Brachylog (que são funções), este é um programa completo, recebendo informações de entrada padrão e produzindo saída com saída padrão.
Explicação
(O motivo
wᵐ
é usado e não o mais normalc
é que estamos lidando com uma lista heterogênea - ela contém números e seqüências de caracteres - e, em vez de permitir que elas se misturem, é mais simples imprimi-las todas individualmente.)O algoritmo aqui força bruta sobre todas as partições aditivas da entrada até encontrar uma adequada (!). O Brachylog favorece o particionamento em menos possibilidades, e com as possibilidades classificadas em ordem crescente, então a primeira solução que ele encontrará é o inverso da solução que a pergunta está pedindo. Então, basta revertê-lo para obter a solução que queremos.
fonte
Limpo , 73 bytes
Experimente online!
Define a função que
$ :: String -> String
pega uma string e retorna uma string.fonte
Tela ,
1413 bytesExperimente aqui!
fonte
Anexo , 37 bytes
Experimente online!
Versão sem ponto (41 bytes):
Join&"+"##`\&:Id##`-&>Pairs@`'&0@Suffixes
Explicação
fonte
C (gcc), 87 bytes
Experimente online!
fonte
Powershell,
5552 bytesO script espera uma matriz de strings, cada string contém um dígito. Script de teste:
Saída:
fonte
Japonês , 13 bytes
Recebe a entrada como uma matriz de dígitos.
Tente
Explicação
Alternativo
Recebe a entrada como uma matriz de cadeias de dígitos.
Tente
fonte
Java 10,
8278 bytesResposta JavaScript do Porto de Arnauld (ES6) .
-2 bytes graças a @ceilingcat .
-2 bytes graças a Arnauld .
Experimente online.
Explicação:
fonte
n%m
atribuído a uma variável para facilitar a leitura.)m<n
deve funcionar.SNOBOL4 (CSNOBOL4) ,
134133129 bytesExperimente online!
Salvou um byte inteiro, processando as strings em vez da aritmética!
fonte
sed -E ,
10999977574 bytesCada linha da entrada é considerada um número separado. Experimente online .
Explicação:
... pode ser jogado mais longe, eu presumo.
fonte
01010101010
ou000000
, de acordo com a especificação do desafio. Isso salva alguns bytes?Brainfuck, 147 bytes
Experimente online! (Você precisará marcar a caixa marcada com "!" E digitar sua entrada após o "!" Na segunda linha do código, caso contrário, continuará solicitando entradas para sempre.)
Provavelmente, não será a resposta mais curta ou a menor possível, mas foi muito divertido tentar fazer isso em Brainfuck, para que eu possa postá-la.
Como o @JoKing apontou, este programa não remove 0s. Vou tentar corrigir isso, mas pode ser bastante difícil.
Explicação:
fonte
APL (Dyalog Unicode) , 20 bytes
Experimente online!
Recebe entrada como um vetor de dígitos. Produz um espaço antes e depois de cada um
+
e inclui uma quantidade variável de espaços à esquerda.Este é um trem. Está dividido no seguinte.
A primeira função é
⌽
, isso inverte a matriz, assim1 0 2
torna - se2 0 1
.Então entramos
(10×⊢)\
, que é aplicado à matriz invertida. Esta parte é inspirada na resposta da ngn ao desafio Boustrophedonise. A explicação do ngn de empréstimo, dado um vetor de dígitosA B C ...
, que se aplica(10×⊢)\
a esse vetor fornece o seguinte.Em
2 0 1
,(10×⊢)\
dá2 0 100
.Em seguida vem
0~⍨
. Isso remove todos os0
s da matriz, dando2 100
.Finalmente vem o
+
s.{⍵'+'⍺}/
é uma redução que começa da direita que concatena o argumento esquerdo com a+
, seguido pelo argumento direito. Efetivamente, isso reverte a matriz ao inserir+
s. Isso fornece100 '+' 2
, que é exibido como100 + 2
.fonte
MathGolf ,
121110 bytesExperimente online!
Explicação
O primeiro comando não é necessário, pois a entrada pode ser fornecida como uma lista de dígitos.
Posso adicionar um operador de multiplicação em pares que é de um byte, mas que atualmente não faz parte do idioma. Então eu poderia remover um byte desta solução.
fonte