n
Schreiben Sie bei einer gegebenen Eingabe ein Programm oder eine Funktion, die die Summe der digitalen Summen n
für alle Basen 1 bis 1 ausgibt / zurückgibt n
.
Beispiel:
n = 5
Erstellen Sie den Bereich [1...n]
:[1,2,3,4,5]
x
Erhalten Sie für jedes Element ein Array der Basisziffern x
von n
: [[1,1,1,1,1],[1,0,1],[1,2],[1,1],[1,0]]
bijektive Basis 1
von 5
ist[1,1,1,1,1]
Basis- 2
(binär) von 5
ist[1,0,1]
Basis 3
von 5
ist[1,2]
Basis 4
von 5
ist[1,1]
Basis 5
von 5
ist[1,0]
Summiere die Ziffern: 13
Testfälle:
1 1
2 3
3 6
4 8
5 13
6 16
7 23
8 25
9 30
10 35
36 297
37 334
64 883
65 932
Die Sequenz finden Sie in OEIS: A131383
Wertung:
Code-Golf : Die Einsendung mit der niedrigsten Punktzahl gewinnt.
227 -> 9999
. Und auch:1383 -> 345678
.Antworten:
Canvas , 3 Bytes
Probieren Sie es hier aus!
Leinwand schlagen Gelee?
quelle
Haskell , 46 Bytes
Probieren Sie es online!
Erläuterung
Die Funktion[ 0 … b ]n
\b n -> mapM(pure[0..b])[1..n]
generiert alle Zeichenfolgen in lexikografischer Reihenfolge. Beispielsweise:Indiziert man es mit1 ( n + 1 ) 1 [1,…,1n times] [n]
(!!n)
this, kann man es inn
base konvertieren.b+1
Dies funktioniert jedoch nicht für unary (base- ), aber wir summieren die Ergebnisse. Wir können sogar einige Bytes mit base- speichern anstelle einer Umgehung für Basis- da fehlt was dasselbe ist wie beim summieren.a <- [1..n]
Mit
do
-notation werden nur alle Listen verkettet, anstatt sie zu verschachteln:quelle
APL (Dyalog Unicode) , 14 Byte
Probieren Sie es online!
Erläuterung
Einige Klammern sind impliziert und können hinzugefügt werden (leichter als die "offizielle" Klammerung):
Dies ist eine monadische Spitze. Bei einem gegebenen Argument
Y
verhält sich diese Funktion wie folgt:Die beiden Funktionen werden der Reihe nach angewendet. Wir werden von der richtigen beginnen:
Das sind drei Funktionen in diesem Zug, das ist also eine Gabel. Wenn ein Argument vorliegt
Y
, handelt es wie folgt:Wir können uns leicht darauf beschränken (monadic
⊢
gibt sein Argument zurück, daher auch Identität genannt ):Nun wissen wir, dass
Y
es sich um eine Ganzzahl handelt (einfacher Skalar, dh Zahl oder Zeichen), da uns eine gegeben wird. Daher kehrt⍳Y
mit⎕IO=1
zurück1 2 ... Y
.⍳Y
Gibt tatsächlich ein Array mit einer Form zurückY
(Y
muss ein Vektor sein), wobei jeder Skalar der Index seiner selbst im Array ist (deshalb wird monadisch⍳
als Indexgenerator bezeichnet ). Diese Indizes sind Vektoren, außer in dem Fall1≡⍴Y
, in dem sie Skalare sind (dies ist unser Fall).Lassen Sie uns als
(⍴⊤⊣)¨
nächstes die mittlere Funktion analysieren .⍴⊤⊣
ist der Operand von¨
( each ), und die Funktion ist dyadisch, sodass der¨
Operator zuerst jedes Argument der Länge 1 in die Form des anderen umformt (dh das Element nimmt und es verwendet, um jeden Skalar im anderen Argument zu ersetzen). Wenden Sie die Funktion dann auf jedes Paar der beiden Argumente an. In diesem Fall⍳Y
ist ein Vektor undY
ist ein Skalar. Wenn alson≡⍴⍳Y
,Y
wird konvertiert inn⍴Y
(⍴
repräsentiert die Form- (monadisch) und Umformungs- (dyadisch) Funktionen). Das heißt, einfacher ausgedrückt,Y
wird in ein Array konvertiert, dasY
Zeiten enthältY
.Nennen wir nun für jedes Paar das linke
X
und das rechte ArgumentZ
(damit wir nicht mit der Eingabe in Konflikt geratenY
).⍴⊤⊣
ist eine dyadische Gabel, daher wird sie sich ausdehnen auf:Machen wir den einfachen ersten Schritt der Reduktion
X⊣Z
aufX
(dyadisch⊣
ist die linke Funktion):DasX, Z∈ N XZ X Z X X1 X
⍴
InX⍴Z
ist wieder die Umformfunktion , alsoX⍴Z
in unserem Fall einfachX
malZ
.⊤
ist die Codierungsfunktion . Bei zwei Zahlenarrays, bei denen das linke Array die Basis jeder Ziffer im Ergebnis ist (muss nicht ganzzahlig oder positiv sein), dh die Codierung und das rechte Array ist ein Zahlenarray, wird das transponierte Array dieser Zahlen zurückgegeben Zahlen in der angegebenen Codierung (Transposition ist die Umkehrung der Abmessungen eines Arrays in Bezug auf seine Elemente). Die Darstellung einer Ziffer basiert auf dem Quotienten aus der Division der Zahl und dem Produkt der weniger signifikanten Basen. Wenn eine Basis vorhanden ist0
, fungiert sie als Basis + ∞. Die Skalare der Argumente sind alle einfach. DaX
ist eine positive ganze Zahl, undX⍴Z
Ist ein Vektor gleicher Elemente, ist dies wirklich nur ein Fall der UmwandlungX
in BasisZ
und der Umformung inX
Ziffern. Für , ( in der Basis ) nicht mehr als haben Ziffern, da hat Ziffern. Daher reicht es für unsere Zwecke.X⍴Z
Das Ergebnis vonY.1= [ 1 , 1 , . . . , 1 ]Y. Y.× 1 = Y
Y(⍴⊤⊣)¨⍳Y
wird daherY
in jede Basis von 1 nach konvertiertY
, möglicherweise mit führenden Nullen. Es gibt jedoch ein Problem: In APL ist Basis 1 kein Sonderfall, wohingegen diese Herausforderung ein Sonderfall ist. Daher müssen wir die Summe der Basis-1-Ziffern vonY
uns selbst einbeziehen. Glücklicherweise ist diese Summe einfachY
, da ist . Daraus folgt, dass wir irgendwo in das Array hinzufügen müssen . So machen wir es:Y
Ich habe diesen Teil bereits hier aufgenommen. Dyadic
,
ist die Catenate- Funktion, sie verkettet ihre Argumente auf der letzten Achse und gibt Fehler aus, wenn dies nicht möglich ist. Hier verketten wir einfach den SkalarY
mit dem VektorY(⍴⊤⊣)¨⍳Y
, so dass wir die Summe, um die wir berechnenY
, erhöhen, wie oben erläutert.Der letzte Teil ist die linke Funktion unserer Spitze
+/∘∊
:∘
ist der Compose- Operator.f∘g Y
ist das gleiche wief g Y
. Wir setzen es hier jedoch ein, damit unser Zug nicht auf die Straße fährt∊
. So können wir reduzieren:Jetzt ist es Zeit für die Summe, aber warte ... es gibt ein Problem. Das Array ist nicht flach, daher können wir seine Elemente nicht einfach summieren, bevor wir es zuerst reduzieren. Die Enlist- Funktion
∊
reduziert ein Array. Nun, da das Array abgeflacht wurde, verwenden wir es endlich, um es+/
zu summieren. Wenn es sich/
um den Reduktionsoperator handelt , wird eine dyadische Funktion zwischen den Elementen eines Arrays auf seiner vorletzten Achse mit der Priorität von rechts nach links angewendet. Wenn der Rang (Anzahl der Dimensionen, dh Länge der Form) des Arrays nicht abnimmt, wird das Array eingeschlossen, obwohl dies hier nicht der Fall ist. Die Funktion, die hier angewendet wird+
, ist das PlusFunktion, die die Paare auf den letzten Achsen von zwei Arrays hinzufügt (und Fehler, wenn die Arrays nicht so hinzugefügt werden können). Hier werden einfach zwei Zahlen mehrmals hinzugefügt, damit die Reduzierung abgeschlossen ist.Siehe, unser Zug:
quelle
+/∘∊⊢,⊢⊤¨⍨⊢⍴¨⍳
Ruby ,
3937Das einzige Golfspiel hier ist das Entfernen von Leerzeichen. Probieren Sie es online aus
quelle
n
(37b) entfernen :->n{(2..n).sum{|b|n.digits(b).sum}+n}
Python 2 , 57 Bytes
Probieren Sie es online!
quelle
Java 8,
7665 Bytes-11 Bytes dank @ OlivierGrégoire .
Probieren Sie es online aus.
Erläuterung:
quelle
i
, also ... 65 Bytes.Desmos, 127 Bytes
Desmos, 56 Bytes
quelle
^n
es dann ausreichen sollte.\sum_{b=2}^{n+1}
,n+\sum_{b=2}^n
um weitere 2 Bytes zu speichernSAS,
8174 BytesDie Eingabe erfolgt nach der
cards;
Anweisung in Zeilenumbrüchen wie folgt:Gibt einen Datensatz mit der Antwort
s
(zusammen mit Hilfsvariablen) mit einer Zeile für jeden Eingabewert ausUngolfed:
quelle
Japt
-x
, 6 BytesVersuch es
Versuch es
quelle
J ,
2423 BytesProbieren Sie es online!
quelle
05AB1E (Legacy) , 5 Byte
Probieren Sie es online!
Erläuterung:
In 05AB1E (Legacy) ist Basis 1 von 5 [0,0,0,0,0] und nicht [1,1,1,1,1]. Fügen Sie daher nach dem Summieren des Bereichs die Eingabe hinzu, um die fehlende Basis 1 zu berücksichtigen.
Ich verwende 05AB1E (Legacy), da in 05AB1E Basis 1 von 5 [1] ist. Um dies zu berücksichtigen, müsste ich entweder das Ergebnis um 1 dekrementieren oder das erste Element des Bereichs entfernen, was beide 1 Byte kosten würde.
quelle
Perl 6 ,
4541 Bytes-4 Bytes dank Jo King
Probieren Sie es online!
quelle
Leerzeichen , 153 Bytes
Buchstaben
S
(Leerzeichen),T
(Tabulator) und (Zeilenvorschub) werdenN
nur als Hervorhebungen hinzugefügt.[..._some_action]
nur als Erklärung hinzugefügt.Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Port meiner Java 8 Antwort , da Whitespace überhaupt keine Base-Konvertierung eingebaut hat.
Beispiellauf:
input = 3
Programm stoppt mit Fehler: Kein Exit gefunden. (Obwohl ich drei nachgestellte Zeilen hinzufügen könnte
NNN
, um diesen Fehler zu beseitigen .)quelle
R , 60 Bytes
Probieren Sie es online!
Scheitert denn
n>143
da144^144
ist größer alsdouble
man bekommen kann. Vielen Dank an Josh Eller , der vorgeschlagen hat,log(n,i)
durch simply zu ersetzenn
.Das Folgende wird funktionieren für
n>143
; Ich bin mir nicht sicher, wann es nicht mehr funktioniert.R , 67 Bytes
Probieren Sie es online!
Verwendet die klassischen
n%/%i^(0:log(n,i))%%i
Verfahren die basen- zu extrahiereni
Ziffernn
für jede Baseb>1
, dann summiert sie und reichert sich in der SummeF
, die initialisiert wird0
, dann Zugaben
(der1
Basisdarstellungn
) zuF
und die Rückkehr des Ergebnisses. Fürn=1
, überspringt er die Grundlagen und fügt einfachn
zuF
.quelle
0:log(n,i)
, könntest du es nicht benutzen0:n
? In jeder Basisdarstellung von n gibt es immer höchstens n Ziffern, und alles nach den Anfangsziffernlog(n,i)
sollte 0 sein, damit die Summe davon nicht beeinflusst wird.n=144
, da143^143
es rund um1.6e308
und144^144
auswertetInf
. Vielen Dank!Python 2 , 61 Bytes
Probieren Sie es online!
Obwohl dies länger ist als die Lösung von Dennis, auf der es basiert, finde ich die Methode zu amüsant, um sie nicht zu teilen.
Das Ziel besteht darin, sowohl das Löschen der letzten Ziffer
n->n/b
als auch das Inkrementieren der Basis zu wiederholen.b->b+1
Wir möchten jedoch verhindern, dass die Basis erhöht wird, nachdem eine oder mehrere Ziffern gelöscht wurden. Dies wird erreicht, indem die Basis zub
einem Float gemacht wird, so dassn->n//b
der Float nach dem Update mit seiner Floatnessb
infiziertn
wird. Auf diese Weisen
ist es ein Bit-Flag , ob ein Float vorliegt oder nicht , um festzustellen, ob Ziffern aus entfernt wurdenn
.Wir fordern, dass die Bedingung
1/n==0
erfüllt ist, um in Inkremente überzugehenb
, die Ganzzahlenn
erfüllen, weil die Bodenteilung durchgeführt wird, Floats jedoch fehlschlagen. (n=1
Scheitert auch, aber wir möchten es trotzdem nicht wiederholen.) Andernfalls funktionieren Floats genau wie Ganzzahlen in der Funktion, da die Floor-Division sorgfältig durchgeführtn//b
wird und die Ausgabe ein Float mit ganzen Zahlen ist.quelle
C (gcc)
6756 BytesPort meiner Java 8 Antwort .
-11 Bytes dank @ OlivierGrégoires Golf auf meiner Java-Antwort.
Probieren Sie es online aus.
Erläuterung:
quelle
JavaScript (ES6), 42 Byte
Diese Version ist fast identisch mit meiner Hauptantwort, stützt sich jedoch auf einen arithmetischen Unterlauf, um die Rekursion zu stoppen. Der höchste unterstützte Wert hängt von der Größe des Aufrufstapels ab.
Probieren Sie es online!
JavaScript (ES6),
51 4844 ByteProbieren Sie es online!
Kommentiert
quelle
APL (Dyalog Unicode) , 22 Byte
Probieren Sie es online!
quelle
Schale , 6 Bytes
Ich wünschte wirklich, es gäbe etwas
M
fürcmap
:(Probieren Sie es online aus oder testen Sie alle!
Erläuterung
Alternativ 6 Bytes
Probieren Sie es online aus oder testen Sie alle!
Erläuterung
quelle
Pari / GP , 30 Bytes
Probieren Sie es online!
quelle
Gelee , 4 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Attache , 25 Bytes
Probieren Sie es online!
Erläuterung
quelle
Kohle , 12 Bytes
quelle
Retina 0.8.2 , 49 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
In Unary konvertieren.
Verwende wiederholtes divmod, um die ursprüngliche Zahl in jede Basis umzuwandeln.
Löschen Sie die Liste der Basen, und lassen Sie nur die Basisumrechnungsziffern übrig.
Nimm die Summe und rechne sie in eine Dezimalzahl um.
quelle
Desmos, 51 Bytes
Inspiriert von der Antwort von Conor O'Brien und dem OEIS-Eintrag, kam ich auf meine eigene Desmos-Lösung:
Probieren Sie es online!
quelle
APL (NARS), 29 Zeichen, 58 Byte
kleiner Test zur Verwendung von:
quelle