Ce défi est basé sur cette question Stackoverflow .
Avec un nombre positif en entrée, sortez-le comme la somme de chaque chiffre multiplié par sa représentation de puissance de 10.
Contribution
Un nombre, sous forme d'entier, une chaîne ou une liste de chiffres / caractères.
- Le nombre sera strictement positif.
- Si vous acceptez le nombre sous forme de chaîne ou de liste, il ne commencera pas par un
0
.
Sortie
Une chaîne représentant une somme de chacun des chiffres de base 10 pertinents, chacun multiplié par sa puissance de base 10 respective. Une somme est représentée par a + b
. Vous pouvez utiliser jusqu'à un espace autour de chaque côté du +
panneau si vous le souhaitez. Les opérandes sont répertoriés par ordre décroissant.
0
ne peut jamais être un opérande valide.- Le
+
signe (entouré ou non d'espaces) peut ne pas être la partie avant ou arrière.
Exemples
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
Sorties invalides
2 1 + 1
10 10 + 0
1 0 + 1
12 + 10 + 2
12 10 + 2 +
12 2 + 10
C'est du code-golf donc le code le plus court en octets gagne!
Réponses:
Python 3:
838079 octetsEssayez-le en ligne!
Ma première soumission Code Golf.
-3 octets par ovs. Merci pour cette astuce utile :) -4 octets par mypetlion. Merci pour cette astuce de raccourcissement :)
la source
if'0'<t[i]
et en modifiant votre formule dex-i-1
àx+~i
. Voici un lien TIO avec des changements pas à pas.print
instructionprint(*[t[i]+'0'*(x+~i)for i in range(x)if'0'<t[i]],sep='+')
pour enregistrer 1 octet.Gelée , 9 octets
Essayez-le en ligne!
Comment ça marche
la source
JavaScript (ES6), 47 octets
Prend l'entrée comme un entier.
Essayez-le en ligne!
Commenté
la source
R , 55 octets
En supposant que les entiers sont tous inférieurs à 1e10, ce qui est de toute façon supérieur à l'entier 32 bits maximum ...
Essayez-le en ligne!
la source
10^(nchar(n):1-1
cela fonctionnerait théoriquement pour n'importe quel entier ...Langage de programmation Shakespeare ,
807806805804 octetsEssayez-le en ligne!
-23 octets si un caractère nul peut être sorti en premier
Explication
la source
Python 2 , 64 octets
Essayez-le en ligne!
Python 2 , 66 octets
Essayez-le en ligne!
la source
Gelée ,
1211 octetsUn programme complet acceptant le numéro comme une liste de chiffres (au format Python) qui imprime le résultat.
Essayez-le en ligne!
Comment?
Précédent @ 12 octets:
la source
Haskell,
6054 octetsEdit: -6 octets grâce à Delfad0r.
Prend le numéro d'entrée sous forme de chaîne.
Essayez-le en ligne!
la source
tail.(>>=('+':)).filter(>="1").scanr((.('0'<$)).(:))""
économise 6 octets Essayez-le en ligne! .05AB1E , 10 octets
Mise en œuvre simple.
Saisie sous forme de liste de chiffres.
Essayez-le en ligne!
Explication
la source
Python 2 , 64 octets
Une fonction sans nom qui prend une liste de chiffres
n
et retourne une chaîne.Essayez-le en ligne!
enumerate(n)
donnerait des tuples deindex, item
traversn
avec un index commençant à0
.Cependant
enumerate
prend également un indice de départ en option comme second argument, en mettant cela-len(n)
nous obtenons des indices (e
s) de-len(n)
,-len(n)+1
, ...,-1
.Cela signifie que le nombre de zéros de suivi requis pour tout élément (
b
) est-1-e
, qui est~e
donc~e*'0'
obtient les zéros nécessaires.`b`
obtient une représentation sous forme de chaîne du chiffre entierb
et+
concatène cela avec ces zéros.if b
filtre les entrées avecb==0
.'+'.join(...)
joint ensuite les chaînes résultantes avec des+
caractères.la source
Python 2,
827371 octets-9 octets grâce à @ovs
-2 octets grâce à @JonathanAllan
Essayez-le en ligne
la source
Haskell ,
565552 octets-4 octets grâce à nimi .
Essayez-le en ligne!
explication
Essayez-le en ligne!
la source
Perl 6 , 38 octets
Essayez-le en ligne!
Bloc de code anonyme qui prend une liste de chiffres et renvoie une chaîne.
Explication:
la source
APL (Dyalog),
464140 octets-5 octets grâce à @dzaima
Fonction de préfixe anonyme. Prend l'entrée sous forme de chaîne. TIO
(C'est ma première utilisation d'APL sur PPCG, probablement jouable au golf. Aussi, maudissez-vous, zéros!)
la source
⎕IO←0
Rétine , 19 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Liste tous les chiffres non nuls
Pour chaque chiffre, ajoutez autant de zéros qu'il y avait de chiffres de fin.
Séparez chaque résultat par
+
s au lieu de la nouvelle ligne par défaut.Retina 0.8.2 , 21 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Liste tous les suffixes de l'entrée commençant par des chiffres non nuls.
Remplacez tous les chiffres de fin par des zéros.
Joignez les résultats avec
+
s.la source
C (gcc) ,
7169 octetsChaque étape de la fonction récursive soustrait la partie à imprimer et transmet le reste du nombre.
Merci à plafondcat pour la suggestion.
Essayez-le en ligne!
la source
Brachylog ,
3532 octets-3 octets car 0 n'est pas une entrée valide
Essayez-le en ligne! ou suite de tests
Explication
la source
|∧Ṡ
de la fin. :)Brachylog v2, 15 octets
Essayez-le en ligne!
Très, très inefficace.
D'une manière ou d'une autre, cela parvient à n'utiliser que 6 octets sur ce qui est dans la plupart des langues la partie difficile (en divisant le nombre sous la forme a 10 b où a est un seul chiffre, dans l'ordre décroissant), et 9 octets pour le "joindre avec
+
"(qui est intégré dans la plupart des langues de golf, mais pas Brachylog).Contrairement à la plupart de mes soumissions Brachylog (qui sont des fonctions), celle-ci est un programme complet, prenant l'entrée de l'entrée standard et produisant la sortie sur la sortie standard.
Explication
(La raison
wᵐ
est utilisée plutôt que la plus normale,c
c'est que nous avons affaire à une liste hétérogène - elle contient à la fois des nombres et des chaînes - et plutôt que de les laisser se mélanger, il est plus simple de simplement les imprimer individuellement.)L'algorithme ici force brutalement toutes les partitions additives de l'entrée jusqu'à ce qu'elle en trouve une appropriée (!). Brachylog favorise le partitionnement en moins de possibilités, et avec les possibilités triées par ordre croissant, la première solution qu'il trouvera est donc l'inverse de la solution que la question demande. Il nous suffit donc de l'inverser pour obtenir la solution que nous voulons.
la source
Nettoyer , 73 octets
Essayez-le en ligne!
Définit la fonction
$ :: String -> String
prenant une chaîne et renvoyant une chaîne.la source
Toile ,
1413 octetsEssayez-le ici!
la source
Attaché , 37 octets
Essayez-le en ligne!
Version sans point (41 octets):
Join&"+"##`\&:Id##`-&>Pairs@`'&0@Suffixes
Explication
la source
C (gcc), 87 octets
Essayez-le en ligne!
la source
Powershell,
5552 octetsLe script attend un tableau de chaînes, chaque chaîne contient un chiffre. Script de test:
Sortie:
la source
Japt , 13 octets
Prend l'entrée comme un tableau de chiffres.
Essayez-le
Explication
Alternative
Prend l'entrée comme un tableau de chaînes de chiffres.
Essayez-le
la source
Java 10,
8278 octetsRéponse JavaScript du port d' Arnauld (ES6) .
-2 octets grâce à @ceilingcat .
-2 octets grâce à Arnauld .
Essayez-le en ligne.
Explication:
la source
n%m
assigné à une variable pour plus de lisibilité.)m<n
devrait fonctionner.SNOBOL4 (CSNOBOL4) ,
134133129 octetsEssayez-le en ligne!
Sauvegardé un octet entier en faisant du traitement de chaîne plutôt que de l'arithmétique!
la source
sed -E ,
10999977574 octetsChaque ligne de l'entrée est considérée comme un numéro distinct. Essayez-le en ligne .
Explication:
… Peut être joué au golf plus loin, je présume.
la source
01010101010
ou000000
, selon les spécifications du défi. Est-ce que cela économise des octets?Brainfuck, 147 octets
Essayez-le en ligne! (Vous devrez cocher la case "!" Et taper votre entrée après le "!" Sur la deuxième ligne du code sinon il continuera à demander des entrées pour toujours.)
Ce ne sera probablement pas la réponse la plus courte ou le plus court possible, mais c'était assez amusant d'essayer de le faire dans Brainfuck, alors je pourrais aussi bien le poster.
Comme l'a souligné @JoKing, ce programme ne supprime pas les 0. Je vais essayer de résoudre ce problème, mais cela pourrait être assez difficile.
Explication:
la source
APL (Dyalog Unicode) , 20 octets
Essayez-le en ligne!
Prend l'entrée comme un vecteur de chiffres. Sorties avec un espace avant et après chacune
+
, et comprend une quantité variable d'espaces de tête.Ceci est un train. Il est divisé comme suit.
La première fonction est
⌽
, cela inverse le tableau,1 0 2
devient ainsi2 0 1
.Ensuite, nous entrons dans
(10×⊢)\
, qui est appliqué au tableau inversé. Cette partie s'inspire de la réponse de ngn au défi Boustrophedonise. L'explication de l'emprunt ngn, étant donné un vecteur de chiffresA B C ...
, l'application(10×⊢)\
sur ce vecteur donne ce qui suit.On
2 0 1
,(10×⊢)\
donne2 0 100
.Vient ensuite
0~⍨
. Cela supprime tous les0
s du tableau, donnant2 100
.Vient enfin le par
+
.{⍵'+'⍺}/
est une réduction qui part de la droite qui concatène l'argument gauche avec a+
, suivi de l'argument droit. Effectivement, cela inverse le tableau lors de l'insertion de+
s. Cela donne100 '+' 2
, qui est affiché comme100 + 2
.la source
MathGolf ,
121110 octetsEssayez-le en ligne!
Explication
La première commande n'est pas nécessaire car l'entrée peut être donnée sous la forme d'une liste de chiffres.
Je pourrais ajouter un opérateur de multiplication par paire qui est d'un octet, mais cela ne fait pas actuellement partie du langage. Ensuite, je pourrais supprimer un octet de cette solution.
la source