Contribution:
Un nombre entier
Sortie:
Somme de l'entrée elle-même + la longueur de l'entrée + chaque chiffre individuel de l'entrée.
nr + nr-length + {sum of digits} = output
Exemples:
Entrée: 99
Sortie: 99
(nr) + 2
(nr-longueur) + (9 + 9)
(chiffres) →119
Entrée: 123
Sortie: 123 + 3 + (1 + 2 + 3)
→132
Règles du défi:
L'entrée peut également contenir une entrée négative, qui est résolue spéciale. Le
-
signe / moins correspond également+1
à la longueur et fait partie du premierdigit
.
Par exemple:Entrée:
-123
Sortie:-123 + 4 + (-1 + 2 + 3)
→-115
- Vous pouvez supposer que l'entrée ou la sortie ne seront jamais hors de la plage d'un entier (32 bits).
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
Cas de test:
87901 → 87931
123 → 132
99 → 119
5 → 11
1 → 3
0 → 1
-3 → -4
-123 → -115
-900 → -905
-87901 → -87886
Semi-apparenté: compte somme de tous les chiffres
code-golf
number
arithmetic
integer
Kevin Cruijssen
la source
la source
-123
la chaîne de somme devrait être(-1 + 1 + 2 + 3)
au lieu de(-1 + 2 + 3)
, non?-1 + 2 + 3
. Pour ce défi, j'ai choisi de fusionner le-
signe / moins au premier chiffre comme un chiffre négatif pour le rendre un peu plus intéressant.Réponses:
05AB1E,
2820188 octetsExplication
Essayez-le en ligne
10 octets enregistrés grâce à @Adnan
la source
ÐgsS'+ýO
.Python 2, 39 octets
Suite de tests
Utiliser le même eval-trick que dans ma réponse Pyth .
la source
eval
etjoin
sait-il prendre le premier chiffre négatif pour une entrée négative? Je pense-123
à devenir quelque chose comme- + 1 + 2 + 3
écrit, mais apparemment ce n'est pas .. (Ou est - ce, et automatiquement fusionné- + 1
à en-1
tant que deuxième étape?)-123
devient"-+1+2+3"
après avoir rejoint ce qui donne le résultat correct quand vouseval
le faites . Essayezeval("-+1")
par exemple ce qui se traduit par-1
.- + 1
->- 1
. L'opérateur unaire plus existe, il- + 1
est donc essentiellement le même que-(+(1))
.+a
est le même quea
pour les nombres.Pyth,
1110 octetsMerci à @LeakyNun pour un octet!
Suite de tests
Explication
la source
CJam, 18 ans
Essayez-le en ligne
Explication:
la source
Brachylog ,
3532 octetsExplication
la source
XSLT 1.0 (sans EXSLT), 673 octets
Légèrement gonflé:
Exécutez à l'aide de xsltproc:
Oui,
ild.xsl
est passé deux fois: une fois en tant que document XSLT puis en tant que document XML à transformer. Un document d'entrée doit être présent car un processeur XSLT en requiert généralement un pour démarrer. (XSLT est conçu pour définir une transformation d'un document d'entrée en un document de sortie; l'exécution d'une transformation uniquement avec des paramètres de ligne de commande comme je l'ai fait ici est atypique.) Pour ce programme, tout document XML bien formé suffira comme entrée , et, XSLT étant une application de XML, toute transformation XSLT bien formée est par définition un document XML bien formé.la source
name="i" select="..."
exemple<with-param name="i"select="substring($i,$s+2)"/>
?<p id=hello>
etc. Je suppose que si lesxsltproc
soucis sur les espaces , il ne laissera pas unquoted les choses par.MATL, 20 octets
Essayez-le en ligne
Tous les cas de test
Explication
la source
Clojure, 102 octets
Fonction anonyme qui construit une chaîne qui ressemble à
(+ -123 4 -1 2 3 )
et l'évale. Tout est assez verbeux, construisez une chaîne à partir du nombre, de sa longueur, puis mappez chaque symbole de la représentation sous forme de chaîne du nombre, sauf le moins à lui-même plus l'espace et le moins reste le mêmeVous pouvez le voir fonctionner ici: https://ideone.com/FG4lsB
la source
Dyalog APL ,
191716 octetsPrend la chaîne et retourne
≢
longueur+
plus#
dans l'⍎
évaluation de l' espace de noms racine des'\d'⎕R'&+'
chiffres de l'addition regex avec un plus,
suivi de⊢
la chaîne non modifiée–3 grâce à ngn
la source
Matlab,
7667 octets9 octets enregistrés grâce à @Luis Mendo
Explication:
la source
sum(t+1)+n
est plus court quesum([n numel(t) t])
dc, 57 octets
Expliqué:
C'était bien plus compliqué que ce à quoi je m'attendais! Bon défi :)
la source
10~
contre unA~
!Bash + coreutils, 36 octets
Explication:
Dans sed,
\B
correspond également entre deux caractères non verbaux consécutifs, donc pour un nombre négatif, il correspond entre '^' et '-'. Notez l'0$1
astuce nécessaire pour\B
donner0-1+2+3
, par exemple.Exemple d'exécution : 'input.txt' contient tous les cas de test dans l'énoncé de la question
Sortie:
la source
$()
. Il existe deux façons alternatives de le faire avec des backticks, mais les deux donnent une solution de 36 octets à la fin:sed 's:\B:+:g'<<<0$1
etsed s:\\\B:+:g<<<0$1
.PowerShell v4, 48 octets
Cela devrait fonctionner en v2 +, mais je n'ai testé qu'en v4.
Prend des informations
$n
. Crée un nouveau tableau avec l',
opérateur composé de$n
et le.length
quand$n
est converti en chaîne. Concatène avec cela la chaîne$n
transtypée en un tableau de caractères. Ensuite, l'ensemble de ce tableau est-join
édité avec+
avant d'être redirigé versiex
(similaire àeval
). Le résultat est laissé sur le pipeline et la sortie est implicite.Par exemple, pour l'entrée
-123
, le tableau ressemblerait(-123, 4, -, 1, 2, 3)
et la chaîne après le-join
ressemblerait-123+4+-+1+2+3
. EnsuiteInvoke-Expression
, cela se produit et le résultat est-115
comme prévu.la source
Facteur avec
load-all
, 175 octetsEh bien, ce n'est pas très court. La gestion spéciale du moins unaire est vraiment ennuyeuse; Je suppose que je pourrais faire mieux et je le ferai peut-être.
En utilisant cette expression régulière de substitution:
Nous pouvons transformer les cas de test de l'OP en une suite de tests Factor.
la source
C #, 118 octets
la source
1+ ++i
est complètement ridicule imos[i]<46
pour vérifier le moins++i+1
?SpecBAS - 147 octets
Construit une chaîne qui est ensuite exécutée. Malheureusement,
EXECUTE
ne fonctionne pas avec le?
raccourci pourPRINT
, mais aTEXT
enregistré 1 caractère.la source
C #, 106 octets
Je bat java mon un octet, ma vie est terminée
Non golfé (un peu)
la source
(n)=>{....
pour un lambda anonymen=>n+(n+"").Length+(n+"").Select((k,j)=>int.Parse((n+"")[k<48?1:j]+"")*(k<48?-2:1)).Sum()
le jouer à 89 octets: vous devrez ajouter +18 pourusing System.Linq;
lequel vous avez également oublié dans votre réponse actuelle.Java 8,
1741361221071059378 octets-14 octets grâce à @LeakyNun .
-15 octets grâce à @cliffroot .
Explication:
Essayez-le en ligne.
la source
int c(int i){char[]c=(i+"").toCharArray();int x=i,l=c.length,s=i+l,j=-1;for(;++j<l;x=1)s+=x>0?c[j]-38:38-c[++j];return s;}
int c(int i){char[]c=(i+"").toCharArray();for(int x=i,j=-1;++j<c.length;i+=1+Integer.parseInt(x<0?"-"+--c[j+=x=1]:c[j]+""));return i;}
c'était finalement comme jouer au golf en Java @LeakyNun votre variante fonctionne-t-elle? il donne d'abord de mauvaises réponses, puis se bloque.0
.38
en48
.int c(int i){byte[]c=(i+"").getBytes();for(int j=-1;++j<c.length;i+=(c[j]<48?50-c[++j]:c[j]-47));return i;}
yayPerl 6 - 30 octets
Aussi littéral que possible
Utilisez-le comme une fonction anonyme
la source
JavaScript (ES6), 38 octets
Utilise l'ancienne astuce join-and-eval. Économisez 4 octets si je peux insister sur l'entrée de chaîne:
la source
C ++, 255 octets
la source
Perl 5 - 37 octets
L'entrée est en $ _
la source
Javascript (en utilisant une bibliothèque externe) (45 octets)
En utilisant une bibliothèque que j'ai écrite pour apporter LINQ à Javascript, j'ai pu écrire ce qui suit:
la source
C,
13211611380La fonction
f()
prend l'entrée sous forme de chaîne et renvoie le résultat sous forme d'entier. Version complète du programme (113 octets):Nécessite un argument.
la source
Perl, 27 octets
Code de 22 octets + 5 pour
-paF
.Explication
Utilise l'
-a
option autosplit avec un délimiteur vide (-F
) créant un tableau des chiffres transmis. Utilise la variable magique$"
qui contrôle le caractère utilisé pour joindre un tableau lorsqu'il est interpolé dans une chaîne (nous utilisons"+"
ici) et le fait qu'une liste utilisé dans un contexte scalaire retournera la longueur de la liste (le nombre de chiffres).Usage
Perl, 27 octets
Code de 22 octets + 5 pour
-paF
.Solution alternative, qui est beaucoup plus lisible pour plus d'octets. Je préfère l'autre car il semble plus cryptique!
la source
dc, 56 octets
Pas plus court que Joe ci-dessus, mais une implémentation quelque peu différente (et une qui prend des nombres négatifs en entrée par rapport à une commande de soustraction). Peut probablement être joué au golf plus, mais le déjeuner ne dure que si longtemps.
la source
R, 108 octets
Un peu tard pour la fête encore une fois mais c'est parti:
Afin de diviser généralement les chiffres de n'importe quel nombre (par exemple, pour les additionner), R nous oblige à convertir d'abord en chaîne, puis à diviser la chaîne en un vecteur de chaîne. Pour résumer les éléments, le vecteur chaîne doit être converti en numérique ou entier. Ceci, à l'exception de la somme des chiffres d'un nombre négatif, consomme beaucoup d'octets.
L'exception peut être jouée un peu (jusqu'à 96 octets) si les messages d'avertissement sont autorisés.
Dans ce cas, le vecteur chaîne est converti en entier directement à l'aide de
as.integer
. Cependant, pour les nombres négatifs le premier élément dans le vecteur sera un signe moins:"-"
. Cela provoque des problèmes, par exemple:as.numeric(c("-",1,2,3))
reviendraNA 1 2 3
et un message d'avertissement. Pour contourner cela, supprimez le NA puis multipliez le premier élément par-1
avant de prendre la somme.la source
RProgN, 30 octets
Explication
Essayez-le en ligne!
la source
Perl 5 , 22 + 1 (-p) = 23 octets
Essayez-le en ligne!
la source
AWK ,
64 6361 octetsEssayez-le en ligne!
La liaison TIO a 6 octets supplémentaires
s=j=0;
pour permettre une entrée multiligne. C'est la méthode la plus courte que j'ai pu trouver. Je suis curieux de savoir si cela peut être fait plus rapidementAWK
.Enregistré 2 octets, merci Kevin
la source
$0=n+s+$0
jouer au golf à$0+=n+s
(-2 octets)?