( Verwandte )
Gegeben eine ganze Zahl n > 1
,
1) Konstruieren Sie den Bereich von Zahlen n, n-1, n-2, ... 3, 2, 1
und berechnen Sie die Summe
2) Nehmen Sie die einzelnen Ziffern dieser Zahl und berechnen das Produkt
3) Nehmen Sie die einzelnen Ziffern dieser Zahl und berechnen die Summe
4) Wiederholen Sie die Schritte 2 und 3 , bis Sie eine einstellige Zahl erreichen. Diese Ziffer ist das Ergebnis.
Die ersten zwanzig Terme der Sequenz sind unten:
3, 6, 0, 5, 2, 7, 9, 2, 7, 9, 1, 9, 0, 0, 9, 6, 7, 0, 0, 6
Hinweis: Diese Sequenz ist NICHT in OEIS.
I / O und Regeln
- Zahlen werden schnell sehr groß, daher muss die Lösung in der Lage sein, Eingabezahlen von bis zu 100.000 ohne Fehler zu verarbeiten (es ist in Ordnung, wenn Ihr Code darüber hinausgeht).
- Die Eingabe und Ausgabe kann durch jede bequeme Methode erfolgen .
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Beispiele
n output
1234 9
3005 3
5007 5
9854 8
75849 8
100000 0
code-golf
sequence
number-theory
AdmBorkBork
quelle
quelle
n
. Die eingestellte Lösung muss nur noch funktionierenn = 100000
.Numbers will get very large quickly
nein, tut es nichtAntworten:
Python 2 ,
7772716260 BytesVielen Dank an @xnor für das Golfen mit 2 Bytes!
Probieren Sie es online!
quelle
repeat until you reach a single digit
?236172
: und das ist die einzige unter 1 Million.05AB1E , 7 Bytes
Probieren Sie es online!
Exlpanation
quelle
Gelee , 8 Bytes
Probieren Sie es online!
Vollständiges Programm (es gibt ein Singleton-Array mit dem Ergebnis zurück, die Klammern sind jedoch in STDOUT nicht sichtbar).
quelle
MATL ,
1513 BytesZu Ehren der Sprache des Monats :
Probieren Sie es online!
Ich glaube nicht, dass es eine einfachere Möglichkeit gibt, die Ziffern einer Zahl zu ermitteln, als die Zahl in eine Zeichenfolge umzuwandeln
V
, sie dann zu transponieren!
und diesen vertikalen Vektor wieder in einen numerischen Vektor umzuwandelnU
.2 Bytes gespart dank dem Creator 1 selbst! Ich habe das implizite Ende vergessen, das heißt, ich konnte es entfernen
]
, und anstatt die Anzahl der Elemente mit zu vergleichen1
, konnte ich diesen Wert einfach dekrementieren und ihn direkt als Booleschen Wert verwenden.Die Erklärung lautet also wie folgt:
1 ... von MATL, Luis Mendo.
quelle
JavaScript (ES6), 60 Byte
Probieren Sie es online!
Kommentiert
Alternative Version, 59 Bytes (nicht konkurrierend)
Eine nicht rekursive Version, die nur für n <236172 funktioniert . (Es deckt den angeforderten Bereich ab, ist jedoch kein gültiger generischer Algorithmus.)
Probieren Sie es online!
quelle
Number.MAX_SAFE_INTEGER ** 0.5 ~= 94906265
.Haskell ,
7271 63 BytesDanke an @BMO für ein Byte und @nimi für 8 Bytes!
Probieren Sie es online!
quelle
Stax ,
141310 BytesFühren Sie es aus und debuggen Sie es
War ziemlich lustig zu machen. Ich frage mich, ob es eine präzisere Möglichkeit gibt, den Vergleich am Ende durchzuführen.
Erläuterung
-1 Bytes dank ovs
-3 Bytes dank Scrooble
quelle
R ,
152 130109 BytesProbieren Sie es online!
@ Giuseppe hat
2142 Bytes mit verschiedenen R-Dingen gefunden, an die ich noch nicht gewöhnt bin, zusammen mit einer Möglichkeit, die Ziffern einer Zahl zu erhalten, ohne sie auf String und Back zu zwingen, und mit weniger Bytes!options(scipen=9)
wirdwurde für den Fall von 9854 für die alte Funktion erforderlich, weil das erste Produkt der Bühne als 80000 endet, die R druckt als 8e + 05.quelle
scipen
: Online ausprobieren ! beachte dasmax(0,log10(x))
is weil wennx=0
dannlog10(0)=-Inf
was einen fehler verursacht.Pyth , 11 Bytes
Probieren Sie es hier aus!
quelle
Kohle , 18 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Summiere die ganzen Zahlen bis zur Eingabe.
Während das Ergebnis größer als 9 ist, nehmen Sie die Summe der Ziffern des Produkts der Ziffern.
Wandeln Sie das Ergebnis in eine Zeichenfolge um und drucken Sie es implizit aus.
quelle
Gaia , 8 Bytes
Probieren Sie es online!
Die alte Erklärung (vor dem Beheben eines Fehlers, der Gaias Fehler ist IMO: P):
Dank Dennis 1 Byte gespeichert .
quelle
┅⟨ΣΠ⟩°
Speichert ein Byte.4
0
Ergebnisse[]
aus irgendeinem Grund :(F #, 175 Bytes
Probieren Sie es online!
Der einzige Nachteil der Funktion ist, dass der Eingabewert vom Typ sein muss
uint64
.Ungolfed ist es ein bisschen so:
Die Funktion
d n
wandelt die Zahln
in ihre Bestandteile um. Es wird zuerst in eine Zeichenfolge konvertiert und dann jedes Zeichen in der Zeichenfolge abgerufen. Jedes Zeichen muss dann wieder in eine Zeichenfolge konvertiert werden, andernfalls werden die Zeichen in ihre ASCII-Werte anstelle ihrer "echten" Werte konvertiert.Die
c n
Funktion ist die Hauptfunktion mitn
dem Anfangswert. In dieser Funktionr
liegt unser laufender Wert. Diewhile
Schleife führt Folgendes aus:r
in die entsprechenden Ziffern (d r
).Seq.reduce
was eine Funktion mit dem akkumulierten Wert (a
) und dem nächsten Wert in der Sequenz (x
) übernimmt und in diesem Fall das Produkt zurückgibt. Der Anfangswert ist das erste Element in der Sequenz.d
).r
.quelle
Befunge, 136 Bytes
Sie können es hier ausprobieren .
Obwohl nicht alle Dolmetscher eine ausreichend große Zelle haben, funktioniert es mit kleinen Zahlen für so ziemlich jeden da draußen. Für eine größere Anzahl
n
benötigen Sie möglicherweise einen Dolmetscher wie BefunExec .quelle
Gol> <> ,
3533 BytesProbieren Sie es online!
-2 Bytes von Jo King.
Umfangreiche Nutzung von Funktionen und impliziten Endlosschleifen.
Beispiel volles Programm & wie es funktioniert
quelle
Japt,
161413 BytesVersuch es
Erläuterung
quelle
Schale , 7 Bytes
Probieren Sie es online!
quelle
PHP 7, 89 Bytes
Laufen Sie als Pipe mit
-r
oder versuchen Sie es online .+
, um nach int umzuwandeln, damit~
sie wie gewünscht funktionieren.for()
statt verwendendo ... while()
.Für älteres PHP ist ein weiteres Byte erforderlich:
for($s=str_split,$a=...;$a>9;)$a=array_sum($s(...));
(Wenn Sie
str_split
einer Variablen nichts zuweisen , wird ein weiteres Byte verschwendet.)quelle
Perl 6 , 49 Bytes
Probieren Sie es online!
quelle
[*](.comb).comb
anstelle von([*] .comb).comb
Tcl , 118 Bytes
Probieren Sie es online!
quelle
PowerShell Core ,
91 10193 ByteProbieren Sie es online!
Ein wenig ungolfed ...
Die ersten Schritte bestanden darin, die Ganzzahlen in Ziffern aufzuteilen. Dazu wurde die Ganzzahl in ein Array von
Zeichenfolgen aufgeteilt. Fügen Sie anschließend den Operanden ein und werten Sie den String als Befehl aus. Dann ist es eine Frage des Mehrfachadditionszyklus, bis die Eingabe eine Ziffer ist.iex
ist ein Alias, beiInvoke-Command
dem ein String ausgewertet wird, der an die erste Parameterposition übergeben wurde.Bearbeiten: Wie von @AdmBorkBork angefordert , habe ich der Byteanzahl einen Funktionsheader hinzugefügt. Außerdem habe ich ein wenig nachgerechnet und festgestellt, dass eine Obergrenze für die Anzahl der Iterationen vorliegt
< log log 10^6 < log 6 < 2
, sodass weitere sechs Bytes eingespart wurden.Edit x2: @AdmBorkBork hat eine genauere Möglichkeit gefunden, die Ganzzahl in einen mathematischen Ausdruck umzuwandeln, und hat dann vorgeschlagen, sie mit Pipes zu versehen
iex
. Dies sparte 8 Bytes. Vielen Dank!quelle
Function F($a){ }
in Ihre Byteanzahl einschließen müssen . Sie sollten jedoch in der Lage sein, einige zu sparen,[char[]]
anstatt-split''-ne''
, denke ich.[char[]]1234=Ӓ
, was ungültig ist; Vielleicht kann ich es zum Laufen bringen, aber vielleicht ist es gerade nicht offensichtlich. Danke für den Vorschlag![char[]]"$o"
und|iex
eher alsiex( )
.Perl 5
-p
, 61 BytesProbieren Sie es online!
quelle
Ruby , 57 Bytes
Probieren Sie es online!
quelle
Java 8, 129 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle
Julia 0,6 , 56 Bytes
Probieren Sie es online!
Ganz einfach: Berechnen Sie die
(n+1)n÷2
Summe aus 1..n. Prüfen Sie, ob es sich um eine einstellige Zahl handelt (>9
). Wenn dies nicht der Fall ist , versuchen Sie es erneut, indem Sie k auf die Summe der Stellen des Produkts der Stellen von k setzen. Anderenfalls geben Sie k zurück.quelle