Definieren wir eine Sequenz: Die n-stellige Summierungssequenz (n-DSS) ist eine Sequenz, die mit n beginnt . Wenn die letzte Zahl k war , dann ist die nächste Zahl k + Ziffernsumme (k) . Hier sind die ersten paar n-DSS:
1-DSS: 1, 2, 4, 8, 16, 23, 28, 38, 49, 62, 70...
2-DSS: 2, 4, 8, 16, 23, 28, 38, 49, 62, 70, 77...
3-DSS: 3, 6, 12, 15, 21, 24, 30, 33, 39, 51, 57...
4-DSS: 4, 8, 16, 23, 28, 38, 49, 62, 70, 77, 91...
5-DSS: 5, 10, 11, 13, 17, 25, 32, 37, 47, 58, 71...
6-DSS: 6, 12, 15, 21, 24, 30, 33, 39, 51, 57, 69...
7-DSS: 7, 14, 19, 29, 40, 44, 52, 59, 73, 83, 94...
8-DSS: 8, 16, 23, 28, 38, 49, 62, 70, 77, 91, 101...
9-DSS: 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99...
Für 1 ist dies A004207 , obwohl sich die ersten Ziffern aufgrund einer leicht abweichenden Definition unterscheiden. Für 3 ist es A016052 ; für 9, A016096 .
Die heutige Herausforderung besteht darin, die niedrigste n-stellige Summenfolge zu finden, in der eine bestimmte Zahl vorkommt. Dies wird als "Inverse Colombian Function" bezeichnet und lautet A036233 . Die ersten zwanzig Begriffe, beginnend mit 1, sind:
1, 1, 3, 1, 5, 3, 7, 1, 9, 5, 5, 3, 5, 7, 3, 1, 5, 9, 7, 20
Einige andere gute Testfälle:
117: 9
1008: 918
Sie müssen nur Ganzzahlen verarbeiten, die größer als 0 sind, und Sie können Eingaben und Ausgaben in jedem Standardformat vornehmen. Wie üblich ist dies Codegolf , daher gewinnt die kürzeste Antwort in jeder Sprache.
Antworten:
Haskell ,
1046463 Bytes(-26 danke an H.PWiz, zusätzlich -14 danke an Sriotchilism O'Zaic, zusätzlich -1 danke an cole)
Dies ist eine Funktion.
Probieren Sie es online!
Erläuterung:
Folge von zusammengesetzten Funktionen, die y + digitale Summe von y zurückgeben. Konvertiert zuerst in eine Saite und macht dann eine Monadenturnung, um die Summe der Zeichen und der ursprünglichen Zahl zu erhalten (danke an Cole).
Der
<*>
Operator hat in diesem Zusammenhang Typ und Definitionso können wir das oben genannte als schreiben
Dies
read . pure
wandelt aChar
in eine Zahl um und(+) . read . pure :: Char -> Int -> Int
addiert somit eine Ziffer zu einem akkumulierten Wert. Dieser Wert wird auf die angegebene Nummer im Falz initialisiert.until
Wendet wiederholt eine Funktion auf das Ergebnis an (in diesem Fall y + digitale Summe y), bis eine Anforderung erfüllt ist, die im ersten Argument durch eine Funktion angegeben ist. Dies ergibt das kleinste y-DSS-Element, das größer oder gleich x ist.Unendlich faule Liste von ys, so dass das kleinste y-DSS-Element> = x tatsächlich x ist. Verwendet die Listenverständnisnotation von Haskell (die ich auch völlig vergessen habe, danke).
Erstes Element dieser Liste, das kleinste y, das die Anforderung der Herausforderung erfüllt.
quelle
fmap
in erster Linie verwirrt mich ein bisschen.Python 2 ,
7371 Bytes-2 Bytes dank Erik .
Probieren Sie es online!
quelle
l
zuk>n
.Perl 6 , 44 Bytes
Probieren Sie es online!
Naive Lösung, die jede Sequenz überprüft, bis eine gefunden wird, die die Eingabe enthält
Erläuterung:
quelle
Ruby , 51 Bytes
Probieren Sie es online!
quelle
Jelly , 11 Bytes
Probieren Sie es online!
Volles Programm.
quelle
MATL , 18 Bytes
Probieren Sie es online! Oder überprüfen Sie die ersten 20 Werte .
Erläuterung
Für die Eingabe
i
ist dies so lange erforderlich,n
bis die ersteni
Terme dern
-ten Sequenz enthalten sindi
. Es ist ausreichend,i
Terme für jede Sequenz zu testen , da die Sequenz zunimmt.quelle
Viertens (gviertens) , 106 Bytes
Probieren Sie es online!
Code-Erklärung
quelle
Pyth , 13 Bytes
Probieren Sie es hier aus oder schauen Sie sich die Testsuite an .
Wie es funktioniert
quelle
fqQ.W<HQ+sjZ10
für 14. Ich vergesse immer wieder über `und s als eine Möglichkeit, Ziffern von einer ganzen Zahl zu bekommen!Gelee , 9 Bytes
Ein monadischer Link, der eine positive Ganzzahl akzeptiert, die eine positive Ganzzahl
n
ergibta(n)
, der inverse Kolumbianer vonn
.Probieren Sie es online! Oder sehen Sie sich die Testsuite an .
Wie
Wir arbeiten effektiv rückwärts und suchen wiederholt nach dem Wert, den wir hinzugefügt haben, bis wir keinen mehr finden:
Am
13
Beispiel ...quelle
Python 2 , 85 Bytes
Probieren Sie es online!
Dies funktioniert auf jeden Fall für alle Testfälle sowie für alle 1..88 Einträge bei OEIS. Aber ich bin mir nicht ganz sicher, ob es nachweislich richtig ist. (Dies ist eine meiner Beschwerden bezüglich der Church of Unit Testing :)).
quelle
a.index(n)
Wolfram Language (Mathematica) , 61 Bytes
Probieren Sie es online!
quelle
MathGolf , 13 Bytes
Probieren Sie es online!
Große Herausforderung! Es führte dazu, dass ich einige Fehler im impliziten Pop-Verhalten von MathGolf fand, die der Lösung 1-2 Bytes hinzufügten.
Um zu beweisen, dass dies immer funktioniert, ist dies leicht zu erkennen
n <= input
, dainput
es sich um das erste Element derinput
dritten Sequenz handelt. Ich habe technisch nicht bewiesen, dass diese Lösung immer gültig ist, aber sie besteht jeden Testfall, den ich getestet habe.quelle
05AB1E , 13 Bytes
Probieren Sie es online!
quelle
Sauber , 86 Bytes
Probieren Sie es online!
Erweitert:
Mich stört das
digitToInt d
länger alstoInt d-48
quelle
C (gcc) , 102 Bytes
Probieren Sie es online!
quelle
JavaScript, 65 Bytes
Probieren Sie es online!
Es funktioniert auch als C, kostet aber ein weiteres Byte
C (gcc) , 66 Bytes
Probieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) ,
83, 82 ByteProbieren Sie es online!
quelle
Japt ,
15 bis14 BytesDie ternären Fälle zu behandeln, wo
input=output
mich nervt!Versuch es
quelle
cQuents , 18 Bytes
Probieren Sie es online!
Erläuterung
quelle
Viertens (gviertens) , 99 Bytes
Probieren Sie es online!
Weitgehend ähnlich zu reffus Submission (106 Bytes) . Die Golfplätze sind:
Wie es funktioniert
quelle
Holzkohle , 26 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Verwendet den @ ChasBrown-Algorithmus. Wenn sich herausstellt, dass das ungültig ist, dann für 29 Bytes:
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Berechnet das erste Glied jeder Ziffernsummierungssequenz mit mindestens
n
. Erläuterung:Eingabe
n
.Schleife, bis wir eine Ziffernsummierungsfolge finden, die enthält
n
.Die nächste Sequenz beginnt mit eins mehr als die Anzahl der Sequenzen.
Schleife, während das Mitglied der Sequenz kleiner als ist
n
.Addieren Sie die Ziffernsumme, um das nächste Mitglied der Sequenz zu erhalten.
Schieben Sie das letzte Mitglied in die Liste.
Gibt die Anzahl der berechneten Listen aus, bis wir eine gefunden haben, die enthält
n
.quelle
Rot , 103 Bytes
Probieren Sie es online!
quelle
CJam , 25 Bytes
Probieren Sie es online!
quelle
Gaia , 16 Bytes
Probieren Sie es online!
Gibt eine Liste mit der kleinsten Ganzzahl zurück.
Gaia , 16 Bytes
Probieren Sie es online!
Verwendet die Beobachtung von Herrn Xcoder . Es ist nicht kürzer als das andere, aber es ist trotzdem ein interessanter Ansatz.
Gaia , 16 Bytes
Probieren Sie es online!
Dritter Ansatz, der nicht verwendet
N-find
wird#
, sich jedoch auf dieselbe Beobachtung stützt wie der mittlere Ansatz. Gibt eine Ganzzahl anstelle einer Liste zurück.quelle
Clojure , 106 Bytes
Probieren Sie es online!
Dies sind 99 Bytes, führt jedoch bei größeren Eingaben zu einem Stapelüberlauf (möglicherweise hilft das Optimieren der JVM):
quelle
C # (Visual C # Interactive Compiler) , 75 Byte
Probieren Sie es online!
quelle
Schale ,
1410 Bytes-4 danke an @ H.PWiz
Probieren Sie es online!
quelle
€mΩ≥¹SF+dN
(Ich habe immer noch das Gefühl, dass es kürzer ist)V£⁰m¡SF+dN
Tinte ,
130127 BytesProbieren Sie es online!
-3 bytes
durch Konvertieren in ein vollständiges Programm, das unäre Eingaben benötigt.Das fühlt sich zu lang an, um nicht golfen zu können.
Ungolfed
quelle
C (GCC) ,
807978 BytesProbieren Sie es online!
-2 von ceilingcat
quelle