"Somme numérique" fait référence à la somme de tous les chiffres d'un nombre.
Par exemple, la somme numérique de 1324
est 10
, car 1+3+2+4 = 10
.
Le défi est d'écrire un programme / une fonction pour calculer le plus petit nombre plus grand que l'entrée dont la somme numérique est l'entrée.
Exemple avec procédure pas à pas
Par exemple, prenez le nombre 9
en entrée:
9 = 1+8 -> 18
9 = 2+7 -> 27
9 = 3+6 -> 36
...
9 = 8+1 -> 81
9 = 9+0 -> 90
La sortie valide serait le plus petit nombre ci-dessus, qui est 18
.
Spécifications
Notez que ce 9
n'est pas la sortie valide pour cet exemple, car le nombre inversé doit être supérieur au nombre d'origine.
Notez que l'entrée sera positive.
Cas de test:
2 => 11 (2 = 1 + 1)
8 => 17 (8 = 1 + 7)
12 => 39 (12 = 3 + 9)
16 => 79 (16 = 7 + 9)
18 => 99 (18 = 9 + 9)
24 => 699 (24 = 6 + 9 + 9)
32 => 5999 (32 = 5 + 9 + 9 + 9)
Les références:
Il s'agit d' OEIS A161561 .
Edit: Ajout d'un testcase supplémentaire (18)
Merci à Martin Ender pour l' extrait de classement
var QUESTION_ID=81047,OVERRIDE_USER=31373;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
code-golf
arithmetic
levanth
la source
la source
Réponses:
05AB1E,
19178 octetsCode:
Expliqué:
Essayez-le en ligne
Edit: 9 octets enregistrés grâce à @Adnan
la source
SO
est un moyen plus court d'obtenir la somme des chiffres (au lieu deJ`)O
). De plus, sans affectation de variable, vous pouvez le faire[>DSO¹Q#
:).Python 2, 33 octets
Une expression directe. Fait une chaîne de nombres avec 9 à la fin et le reste au début. Sauf, pour un chiffre
n
, donnen+9
.Certaines sorties ont des zéros non significatifs (
099
pour18
).la source
Rétine ,
3931 octetsPrend entrée en unaire .
Essayez-le en ligne! (Les deux premières lignes permettent d'exécuter plusieurs cas de test à la fois et convertissent de décimal en unaire pour plus de commodité.)
Cela ne recherche pas réellement le résultat de façon linéaire, mais le calcule explicitement:
n
est supérieure à 9, nous la remplaçonsn % 9
par desn / 9
neuf (au sol).n + 9
.En utilisant
!
(ou toute autre chose qui ne l'est pas1
) comme chiffre unaire, je peux enregistrer un octet de plus avec l'approche suivante:Mais ce format d'entrée est un peu exagéré, je pense.
la source
Pyth , 8 octets
Suite de tests.
la source
Java 7,
6861 octetsFait à peu près la même chose que la plupart des autres réponses ici. Je voulais montrer l'approche Java sans utiliser de manipulation de chaîne ni de boucles.
Merci à FryAmTheEggman de me rappeler que je suis stupide;)
la source
MATL ,
109 octetsEssayez-le en ligne!
Explication
la source
V!U
+1 de ma part. Cela devrait aller dans notre liste d'idiomes MATL.JavaScript (ES7), 32 octets
38 octets comme ES6:
la source
Python 3,
128948474 octetsSans sortie, approche directe, golfeur débutant;)
la source
print(m)
parreturn m
(n'enregistre aucun octet mais vous n'avez pas à imprimer dans la fonction elle-même). Vous pouvez toujours imprimer le retour de la fonction de sortie avecprint(r(n))
pour tester votre fonctionm=n+1;f=1
etif s==n:f=0
En fait, 17 octets
Essayez-le en ligne!
Explication:
la source
;)
)C
7365 octetsUne macro avec une fonction d'assistance.
La
e
fonction calcule simplement des puissances de dix, et laF
macro utilise la même méthode de résolution que ce rubis et cette réponse python . malheureusement, il estplus long quela même longueur que ces deux réponses réunies. Mais c'est la première réponse C.(8 octets enregistrés par l'astuce de suppression de Lynn
int
.)la source
int
, économisant 8 octets.Brachylog , 8 octets (non concurrent)
=
a été modifié après la publication de ce défi, de sorte qu'il fonctionne désormais sur des domaines éventuellement infinis, ce qui est le cas ici.Explication
Cela fera marche arrière
=
jusqu'à ce que la valeur de Output rende ce prédicat entier vrai.la source
TSQL (sqlserver 2012),
10799 octetsEssayez-le en ligne!
la source
Python 2, 39 octets
Arithmétique entière pure.
Programme complet avec sortie
Sortie:
la source
eval
PowerShell v2 +, 62 octets
Prend l'entrée
$n
puis exécute unefor
boucle. Nous initialisons la boucle en définissant notre numéro cible,,$a
pour être un plus grand que$n
(car il doit être plus grand, et cela garantit un1..9
fonctionnement correct). Chaque boucle est incrémentée$a++
. Rien ne se passe dans la boucle proprement dite, mais le conditionnel est l'endroit où la logique du programme se produit. Nous prenons littéralement le nombre cible sous la forme d'une chaîne, le convertissons en un tableau de caractères,-join
ing le tableau avec+
, puis le redirige versiex
(similaire àeval
). Nous testons si c'est égal à notre nombre d'entrée ou non, et continuons à boucler en conséquence. Une fois que nous avons quitté la boucle, nous avons atteint où notre numéro cible est une somme numérique égale à notre numéro d'entrée, il$a
est donc placé sur le pipeline et la sortie est implicite.Pour référence, voici la méthode "construire une chaîne avec le nombre approprié de 9" que d'autres ont fait, à 67 octets
ou la méthode "arithmétique d'entier pur" que d'autres ont fait, à 70 octets
Aucun des deux n'est plus court, mais les deux sont plus intéressants.
la source
param($n)for($a=$n+1;([char[]]"$a"-join'+'|iex)-$n){$a++}$a
Pyke,
987 octets, non concurrent - utilise une version plus récenteEssayez-le ici!
la source
1
. Btw pourquoiMissing arg to Equals, evaling input
vient-il? Je veux dire que je lui donne un numéro d'entréeJavaScript (ES2015),
453933 octetsSauvegardé encore 6 octets grâce à @Conor O'Brien et @Shaun H.
Je pense que je vais le laisser tel quel, car cette version diffère de la réponse de @ Neil en utilisant
String.repeat()
.Version précédente (sauvé 6 octets grâce à @Qwertiy):
Première version:
la source
~~(v/9)
=>v/9|0
,'1'+v-1
=>v+9
v <= 9
. Je pense que si je peux retourner toutes les valeurs numériques, ce qui pourrait être un autre économiseur d'octets (pas de .repeat () et une valeur de retour enveloppante dans + ()).v>9
est de 2 octets plus court,string.repeat
fixera une valeur décimale non|0
nécessaire**
bien sûr.Lua, 52 octets
Destiné à être enregistré dans un fichier et exécuté avec l'interpréteur Lua, par exemple
lua <file> <input number>
Vous pouvez également l'essayer ici: https://repl.it/CXom/1
(Sur repl.it, le numéro d'entrée est codé en dur pour faciliter les tests)
la source
n>9
fonctionner correctement, il doit d'abord être contraint à un nombre....+0>9
marcherait?Raquette 70 caractères, 71 octets
Même algorithme que la plupart des autres. Assez triste de ne pas avoir% pour modulo, ou ** pour expt, ou une division entière par défaut, sinon cela pourrait être beaucoup plus court et j'aurais pu dépasser C et Java. J'adore toujours la langue
la source
Hexagonie ,
40 3130 octetsOu, si vous préférez que votre code soit un peu moins linéaire et un peu plus polygonal:
Essayez-le en ligne!
Merci à @FryAmTheEggman pour quelques idées et inspiration: o)
La version précédente:
<.:->+_.!(..'!.\><9!%>@.{.}|.?"
Version précédente:
<><.-_|@"'!{|(.9+!8=@>{/".'/:!?$.%\1$..\
la source
Perl 6 ,
3829 octets(apparemment l'approche directe est plus courte)
Explication:
Tester:
la source
Java 10,
11462 octetsEssayez-le en ligne.
EDIT:
13073 octets sans zéros non significatifs (Merci à @ levanth` ):Essayez-le en ligne.
Explication:
la source
String c(int n){return""+(n>9?(n%9)+s(n):n+9);}
parint c(int n){return Integer.parseInt((n>9?(n%9)+s(n):n+9));}
""+
dansint c(int n){return Integer.parseInt(""+(n>9?(n%9)+s(n):n+9));}
Rubis, 33 octets
Il s'agit d'une version arithmétique int qui se trouve être identique à la réponse python de xnor. C'est une fonction anonyme qui prend et retourne un int.
la source
MathGolf ,
87 octetsEssayez-le en ligne!
Entrée implicite oui.
Explication:
la source
k
).Rubis, 38 octets
Cette réponse renvoie une chaîne ou un entier selon la taille d'entrée. C'est une solution récursive qui demande une solution pour 9 de moins puis ajoute un "9" à la fin.
Rubis, 39 octets
Pour un octet de plus, cette réponse renvoie toujours un entier. même algorithme que ci-dessus mais avec des nombres.
la source
C, 80 octets
Essai non golfé en ligne
la source
PHP, 77 caractères
la source
Oracle SQL 11.2,
165octetsNon golfé
la source
Python 3 55 octets
Prend deux arguments identiques
c'est-à-dire que pour l'appeler, vous utiliseriez f (x, x)
la source
Japt , 9 octets
Essayez-le
la source
Powershell, 54 octets
Script de test:
Sortie:
Expalantion
[$_-gt9]
renvoie un premier chiffre et une queue$_%9
)'9'*(($_-$_%9)/9))
($_+9)
la source