"Digitale Summe" bezieht sich auf die Summe aller Ziffern einer Zahl.
Zum Beispiel kann die digitale Summe 1324
ist 10
, da 1+3+2+4 = 10
.
Die Herausforderung besteht darin, ein Programm / eine Funktion zu schreiben, um die kleinste Zahl zu berechnen, die größer ist als der Eingang, dessen digitale Summe der Eingang ist.
Beispiel mit exemplarischer Vorgehensweise
Nehmen Sie 9
als Beispiel die Nummer als Eingabe:
9 = 1+8 -> 18
9 = 2+7 -> 27
9 = 3+6 -> 36
...
9 = 8+1 -> 81
9 = 9+0 -> 90
Die gültige Ausgabe wäre die kleinste Zahl darüber 18
.
Technische Daten
Beachten Sie, dass dies 9
nicht die gültige Ausgabe für dieses Beispiel ist, da die umgekehrte Zahl größer sein muss als die ursprüngliche Zahl.
Beachten Sie, dass der Eingang positiv ist.
Testfälle:
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)
Verweise:
Dies ist OEIS A161561 .
Bearbeiten: Zusätzlicher Testfall hinzugefügt (18)
Vielen Dank an Martin Ender für das Leaderboard Snippet
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
quelle
quelle
Antworten:
05AB1E,
19178 BytesCode:
Erklärt:
Probieren Sie es online aus
Bearbeiten: 9 Bytes dank @Adnan gespeichert
quelle
SO
ist ein kürzerer Weg, um die Summe der Ziffern zu erhalten (anstelle vonJ`)O
). Auch ohne variable Zuweisung können Sie[>DSO¹Q#
:).Python 2, 33 Bytes
Ein direkter Ausdruck. Erstellt eine Zahlenfolge mit 9 am Ende und dem Rest am Anfang. Ausgenommen, für einstellige
n
gibtn+9
.Einige Ausgänge haben führende Nullen (
099
für18
).quelle
Retina ,
3931 BytesNimmt unäre Eingaben auf .
Probieren Sie es online! (In den ersten beiden Zeilen können mehrere Testfälle gleichzeitig ausgeführt und aus Bequemlichkeitsgründen von dezimal nach unär konvertiert werden.)
Dies sucht nicht linear nach dem Ergebnis, sondern berechnet es explizit:
n
größer als 9 ist, ersetzen wir sien % 9
durchn / 9
(mit Fußboden versehene) Neunen.n + 9
.Wenn ich
!
(oder irgendetwas anderes, was nicht1
der Fall ist ) als unäre Ziffer verwende, kann ich mit dem folgenden Ansatz ein weiteres Byte speichern:Aber dieses Eingabeformat ist meiner Meinung nach ein bisschen langwierig.
quelle
Pyth , 8 Bytes
Testsuite.
quelle
Java 7,
6861 BytesMacht ungefähr das Gleiche wie viele der anderen Antworten hier. Wollte den Java-Ansatz ohne String-Manipulation und Schleifen zeigen.
Danke an FryAmTheEggman, der mich daran erinnert hat, dass ich dumm bin;)
quelle
MATL ,
109 BytesProbieren Sie es online!
Erläuterung
quelle
V!U
+1 von mir. Das sollte in unsere Liste der MATL-Redewendungen aufgenommen werden.JavaScript (ES7), 32 Byte
38 Bytes als ES6:
quelle
Python 3,
128948474 BytesOhne Ausgabe, Direktansprache, Anfänger Codegolfer;)
quelle
print(m)
mitreturn m
(kein Bytes speichern , aber Sie nicht in der Funktion zum Drucken haben selbst). Sie können die Rückgabe der Ausgabefunktion immer noch mit ausdruckenprint(r(n))
, um Ihre Funktion zu testenm=n+1;f=1
undif s==n:f=0
Eigentlich 17 Bytes
Probieren Sie es online!
Erläuterung:
quelle
;)
) istC
7365 BytesEin Makro mit einer Hilfsfunktion.
Die
e
Funktion berechnet nur Zehnerpotenzen, und dasF
Makro verwendet dieselbe Lösungsmethode wie dieser Ruby und diese Python- Antwort. Leider ist eslänger alsungefähr so lang wie die beiden Antworten zusammen. Aber es ist die erste Antwort von C.(8 Bytes durch Lynns Trick des Entfernens gespart
int
.)quelle
int
löschen und 8 Bytes sparen.Brachylog , 8 Bytes (nicht konkurrierend)
=
wurde nach dem Posten dieser Challenge modifiziert, so dass es nun auf möglicherweise unendlichen Domains funktioniert, was hier der Fall ist.Erläuterung
Dies wird solange zurückverfolgt,
=
bis der Wert von Output dieses ganze Prädikat als wahr ansetzt.quelle
TSQL (SQL Server 2012),
107 bis99 ByteProbieren Sie es online!
quelle
Python 2, 39 Bytes
Reine Ganzzahlarithmetik.
Volles Programm mit Ausgabe
Ausgabe:
quelle
eval
PowerShell v2 +, 62 Byte
Übernimmt die Eingabe
$n
und führt dann einefor
Schleife aus. Wir initialisieren die Schleife, indem wir unsere Zielnummer so einstellen$a
, dass sie eine Nummer größer ist als$n
(da sie größer sein muss, wird dies auch sichergestellt)1..9
korrekt funktioniert). Jede Schleife wird inkrementiert$a++
. In der eigentlichen Schleife passiert nichts, aber die Bedingung ist, wo die Programmlogik passiert. Wir nehmen die Zielnummer buchstäblich als Zeichenkette, wandeln sie in ein Zeichen-Array um, setzen-join
das Array mit+
und leiten es dann weiteriex
(ähnlich wieeval
). Wir testen, ob dies unserer Eingabenummer entspricht oder nicht, und setzen die Schleife entsprechend fort. Sobald wir die Schleife verlassen haben, haben wir erreicht, dass unsere Zielzahl eine Ziffernsumme ist, die unserer eingegebenen Zahl entspricht$a
wird in die Pipeline eingefügt und die Ausgabe ist implizit.Als Referenz sehen Sie hier die Methode "Konstruiere eine Zeichenkette mit der entsprechenden Anzahl von 9", die andere Leute mit 67 Bytes durchgeführt haben
oder die "pure integer arithmetic" Methode, die andere Leute gemacht haben, bei 70 Bytes durchgeführt haben
Keiner von beiden ist kürzer, aber beide sind interessanter.
quelle
param($n)for($a=$n+1;([char[]]"$a"-join'+'|iex)-$n){$a++}$a
Pyke,
987 Bytes, nicht konkurrierend - verwendet eine neuere VersionProbieren Sie es hier aus!
quelle
1
. Übrigens, warum kommtMissing arg to Equals, evaling input
das? Ich meine, ich gebe ihm eine EingabenummerJavaScript (ES2015),
453933 BytesWeitere 6 Bytes dank @Conor O'Brien und @Shaun H. gespart.
Ich denke, ich lasse es so, wie es ist, da diese Version sich von der Antwort von @ Neil durch die Verwendung von unterscheidet
String.repeat()
.Vorherige Version (6 Bytes dank @Qwertiy eingespart):
Erste Version:
quelle
~~(v/9)
=>v/9|0
,'1'+v-1
=>v+9
v <= 9
. Ich werde überlegen, ob ich alle numerischen Werte zurückgeben kann, die ein weiterer Byte-Sparer sein könnten (keine .repeat () und den Rückgabewert in + () einschließen).v>9
ist 2 Bytes kürzer,string.repeat
wird einen Dezimalwert nicht|0
benötigt**
natürlich nicht benutze .Lua, 52 Bytes
Soll in einer Datei gespeichert und mit dem Lua-Interpreter ausgeführt werden, z
lua <file> <input number>
Sie können es auch hier versuchen: https://repl.it/CXom/1
(Bei Repl.it ist die Eingangsnummer zum leichteren Testen fest codiert.)
quelle
n>9
es richtig funktioniert, muss es zuerst zu einer Zahl gezwungen werden....+0>9
funktionieren würde?Schläger 70 Zeichen, 71 Bytes
Gleicher Algorithmus wie die meisten anderen. Ziemlich traurig darüber, dass ich nicht standardmäßig% für Modulo oder ** für Expt oder Ganzzahldivision habe, sonst könnte dies viel kürzer sein und ich hätte C und Java überrunden können. Trotzdem liebe ich die Sprache
quelle
Hexagony ,
40 3130 BytesOder, wenn Sie es vorziehen, dass Ihr Code etwas weniger linear und etwas polygonaler ist:
Probieren Sie es online!
Vielen Dank an @FryAmTheEggman für einige Ideen und Anregungen: o)
Vorherige Version:
<.:->+_.!(..'!.\><9!%>@.{.}|.?"
Vorgängerversion:
<><.-_|@"'!{|(.9+!8=@>{/".'/:!?$.%\1$..\
quelle
Perl 6 ,
3829 Bytes(offenbar ist der direkte Ansatz kürzer)
Erläuterung:
Prüfung:
quelle
Java 10,
11462 BytesProbieren Sie es online aus.
EDIT:
13073 Bytes ohne führende Nullen (Dank an @ levanth` ):Probieren Sie es online aus.
Erläuterung:
quelle
String c(int n){return""+(n>9?(n%9)+s(n):n+9);}
int c(int n){return Integer.parseInt((n>9?(n%9)+s(n):n+9));}
""+
in vergessenint c(int n){return Integer.parseInt(""+(n>9?(n%9)+s(n):n+9));}
Ruby, 33 Bytes
Dies ist eine int-arithmetische Version, die zufällig der Python-Antwort von xnor entspricht. Es ist eine anonyme Funktion, die ein int akzeptiert und zurückgibt.
quelle
MathGolf ,
87 BytesProbieren Sie es online!
Implizite Eingabe yay.
Erläuterung:
quelle
k
).Ruby, 38 Bytes
Diese Antwort gibt je nach Eingabegröße eine Zeichenfolge oder ein int zurück. Es ist eine rekursive Lösung, die nach einer Lösung für 9 weniger fragt und am Ende eine "9" hinzufügt.
Ruby, 39 Bytes
Für ein weiteres Byte gibt diese Antwort immer ein int zurück. Gleicher Algorithmus wie oben, jedoch mit Zahlen.
quelle
C 80 Bytes
Ungolfed online versuchen
quelle
PHP, 77 Zeichen
quelle
Oracle SQL 11.2,
165ByteNicht golfen
quelle
Python 3 55 Bytes
Nimmt zwei Argumente, die gleich sind
dh um es zu nennen, würden Sie f (x, x) verwenden
quelle
Japt , 9 Bytes
Versuch es
quelle
Powershell, 54 Bytes
Testskript:
Ausgabe:
Ausweitung
[$_-gt9]
gibt eine erste Ziffer und einen Schwanz zurück$_%9
)'9'*(($_-$_%9)/9))
($_+9)
quelle