Dies unterscheidet sich von " Mein Wort", da es weniger komplex ist und nur berechnet und nicht verglichen werden muss.
Um die digitale Wurzel zu finden, nehmen Sie alle Ziffern einer Zahl, fügen Sie sie hinzu und wiederholen Sie den Vorgang, bis Sie eine einstellige Zahl erhalten. Wenn zum Beispiel die Zahl war 12345
, würden Sie hinzufügen 1
, 2
, 3
, 4
, und 5
, bekommen 15
. Sie würden dann hinzufügen 1
und 5
geben 6
.
Deine Aufgabe
Geben Sie bei einer Ganzzahl N (0 <= N <= 10000) über STDIN die digitale Wurzel von N aus .
Testfälle
1 -> 1
45 -> 9
341 -> 8
6801 -> 6
59613 -> 6
495106 -> 7
Denken Sie daran, das ist Code-Golf , also gewinnt der Code mit der geringsten Anzahl von Bytes.
code-golf
number
arithmetic
Oliver Ni
quelle
quelle
number
. Bestimmtes. muss eingabe0
unterstützt werden?STALEMATE
. Es könnte besser sein, den anderen als Betrug zu schließen.Antworten:
Pyke, 1 Byte
Probieren Sie es hier aus!
Übernimmt die digitale Wurzel des Eingangs
quelle
Jelly ,
7 5 43 BytesTryItOnline! oder alle Testfälle
Wie?
Es ist bekannt, dass die digitale Wurzel der Formel (n-1)% 9 + 1 folgt.
Dies ist das Gleiche wie die letzte Ziffer in der bijektiven Basis 9
(und aufgrund der Implementierung behandelt diese
0ḃ9=[]
und[]Ṫ=0
diese den Kantenfall von Null).quelle
JavaScript (ES6),
16 bis10 ByteTestfälle
Code-Snippet anzeigen
quelle
MATL , 3 Bytes
Probieren Sie es online!
Viele (jetzt gelöschte) Antworten haben versucht, mit modulo 9 das Ergebnis zu erzielen. Dies ist eine gute Abkürzung, funktioniert aber leider nicht für ein Vielfaches von 9. MATL hat eine Modulo-Funktion für das Intervall
[1, n]
. Mit diesem Modulo haben wir1 % 3 == 1, 2 % 3 == 2, 3 % 3 == 3, 4 % 3 == 1
, etc. Diese Antwort nimmt einfach das Eingangsmodulo neun mit diesem benutzerdefinierten Modulo.quelle
Mathematica,
2711 BytesMathematics verwendet
Mod
einen dritten Parameter als Offset für den resultierenden Bereich des Modulos. Dies vermeidet das Dekrementieren der Eingabe und das Inkrementieren der Ausgabe.quelle
Python,
16 bis20 Bytes+4 Bytes für den Kantenfall Null.
repl.it
quelle
~-input()%9+1
print
?0
Ergebnisses9
statt dessen0
, was durch denn and
Teil des Codes abgedeckt wird), außerdem hätte er als 19 Bytes gezählt, nicht als 13 ( da dasprint
und das Leerzeichen gezählt werden müssen).Julia, 12 Bytes
oder
mod1
ist eine Alternative, zumod
der Karten zum Bereich[1, n]
statt[0, n)
.quelle
PHP, 15 Bytes
Vorgängerversion PHP, 55 Bytes
quelle
<?=--$argv[1]%9+1?>
Haskell,
3534 BytesProbieren Sie es auf Ideone.
Erläuterung:
quelle
Perl, 15 Bytes
Beinhaltet +2 für
-lp
Geben Sie eine Eingabe für STDIN ein
root.pl
Dies ist die langweilige Lösung , die bereits in vielen Sprachen gegeben hat, aber zumindest diese Version unterstützt
0
auchInteressanter ist es, echte wiederholte Hinzufügungen zu machen (wenn auch in einer anderen Reihenfolge), tatsächlich nur 1 Byte länger zu sein:
quelle
R
72 6729 BytesEdit: Danke an @rturnbull für das Abschneiden von zwei Bytes.
quelle
ifelse
dies durch`if`
dasselbe Verhalten ersetzt werden kann, wodurch Sie ein paar Bytes sparen.if
funktioniert. Könnten Sie ein Beispiel nennen oder es vielleicht zu den Tipps zum Golfenifelse
.`if`(n%%9|!n,n%%9,9)
Bietet in diesem Fall dasselbe Verhalten wie der von Ihnen veröffentlichte Code. Soweit ich das beurteilen kann, ist dieses Verhalten nicht dokumentiert! Ich werde dem Tips-Thread einen Kommentar hinzufügen.Retina , 7 Bytes
Probieren Sie es online!
Ich sehe viele mathematische Lösungen, aber in Retina scheint der direkte Ansatz der beste zu sein.
Erläuterung
{`
Lässt das gesamte Programm in einer Schleife ablaufen, bis sich der String nicht mehr ändert. Die Schleife besteht aus zwei Stufen:Wandle jede Ziffer in eine unäre um.
Zählen Sie die Anzahl der Zeichen (= konvertieren Sie die unäre Zahl in eine Dezimalzahl).
Dies funktioniert, da beim Konvertieren jeder Ziffer in eine unäre Zahl ohne Trennzeichen zwischen den Ziffern eine einzelne unäre Zahl erstellt wird, die der Summe aller Ziffern entspricht.
quelle
Brachylog , 9 Bytes
Probieren Sie es online!
Erläuterung
Alternativer Ansatz, 11 Bytes
Dieser verwendet das Meta-Prädikat
i - Iterate
, umI
das Prädikat{@e+}
für die Eingabe aufzurufen . Dies versucht Werte vonI
von0
bis unendlich, bis man es so macht, dass die Ausgabe voni
eine einzelne Ziffer ist, die#0
wahr macht .quelle
JavaScript (ES6),
4138 Byte3 Bytes gespart, dank Bassdrop Cumberwubwubwub
Nimmt und gibt einen String zurück.
Testfälle
Code-Snippet anzeigen
quelle
s.split``
zu[...s]
CJam ,
1913 BytesDolmetscher
Erläuterung:
Vielen Dank an 8478 (Martin Ender) für -6 Bytes.
CJam, 6 Bytes
Vorgeschlagen von 8478 (Martin Ender). Dolmetscher
Ich habe darüber nachgedacht, aber Martin hat es gerade vor mir. Erläuterung:
quelle
:
, so dass Sie dies tun können:~:+
. Es tut auch nicht weh, den Block mindestens einmal auszuführen, sodass Sie eineg
Schleife anstelle einerw
Schleife verwenden können.r{_,1>}{:~:+`}w
funktioniert, aber ich weiß nicht, wie um alles in der Welt ichg
hier verwenden soll.r{:~:+_s\9>}g
(Natürlich ist die Lösung in geschlossener Formri(9%)
viel kürzer.Java 7, 63 Bytes
Rekursive Funktion, die mit mod / div nur Ziffern bekommt. Nichts Außergewöhnliches.
Günstiger Hafen
von Jonathan Allan wäre eine dürftige 28 Bytes:
quelle
Python 2,
5451 BytesVielen Dank an Oliver und Karl Napf, die mir geholfen haben, 3 Bytes zu sparen
quelle
while len(i)>1
umwhile~-len(i)
ein Byte zu speichern.input()
und die Eingabe in Anführungszeichen setzen, um 2 Bytes zu sparen.Python, 45 Bytes
Nimmt das Argument als String.
quelle
05AB1E , 6 Bytes
Probieren Sie es online!
Erläuterung
quelle
C
6429 BytesC port aus Jonathan Allans Antwort (mit Sonderfall 0).
Vorheriger 64-Byte-Code:
q
Nimmt die Quersumme undf
wiederholt die Quersumme bis zu einer einzelnen Ziffer.quelle
Retina , 15 Bytes
Probieren Sie es online! (Die erste Zeile aktiviert eine durch Zeilenvorschub getrennte Testsuite.)
Erläuterung
Eingabe in unär umwandeln.
Nehmen Sie 1-basiertes Modulo, indem Sie Neunen entfernen, hinter denen mindestens ein Zeichen mehr steht.
Zählen Sie die verbleibende Anzahl von Einsen, um sie in Dezimalzahlen umzuwandeln.
quelle
Perl 6 , 29 Bytes
Erweitert:
quelle
Faktor 24
Smart , mathy Antwort.
63 für dumme iterative Lösung:
quelle
Labyrinth , 8 Bytes
mit der Gleichung
(n-1)%9+1
:?
Liest die Eingabe als Dezimalzahl und schiebt sie zum Stapel(
verringert die Oberseite des Stapels_
schiebt eine Null auf die Oberseite des Stapels9
Schieben Sie die Oberseite des Stapels, und tauchen Sie um die 10-stellige Zahl auf (in diesem Fall 9).%
knallt y, knallt x, drückt x% y)
erhöht die Oberseite des Stapels!
Fügt den Anfang des Stapels ein und gibt ihn als Dezimalzeichenfolge aus@
Beendet das Programmquelle
Pyth -
7467 BytesNicht die beste, aber dennoch eine anständige Anzahl an Antworten:
Wie die Vorgängerversion, jedoch auch Fälle von Vielfachen von 9 mit logischem oder.
Diese Version besteht den Testfall 45 nicht :
Erläuterung:
Probieren Sie es hier aus
Probieren Sie die vorherige Version hier aus!
Bisherige Lösungen:
Erklärung :
Sie sind eingeladen, es hier zu versuchen !
quelle
jQ9
nicht wie Jelly'sḃ9
:-PAPL (Dyalog) ,
159 Bytes BytesProbieren Sie es online!
quelle
Hexagony,
1915 BytesMehr lesbar:
Probieren Sie es online!
-3 Bytes, indem Sie einen anderen Ansatz wählen, wodurch der 0-Kanten-Fall trivial wird.
-1 Byte durch Beheben des 0-Edge-Case-Fehlers
Verwenden Sie die Formel ((n-1) mod 9) + 1 wie viele andere Lösungen auch.
quelle
K (oK) , 9 Bytes
Lösung:
Probieren Sie es online!
Erläuterung:
Super unkompliziert. Teilen Sie die Zahl in Ziffern und fassen Sie sie zusammen, bis das Ergebnis konvergiert:
quelle
x\y
encodey
in basex
mit so vielen Ziffern wie nötig erstellt, daher ist es etwas kürzer:(+/10\)/
10\:
.. aber nicht in oK - und es.:'$
ist die gleiche Anzahl von Bytes - also habe ich das gemacht :)\:
in kdb + (3.4+) erhalten, aber für oK müsste ich wissen, wie viele 10s in meine Liste aufgenommen werden müssen.Keg , 6 Bytes (SBCS im Keg-Wiki)
Erläuterung:
quelle
Ruby, 12 Bytes
quelle
19
? Sollte das nicht sein9
?