Laut der Wikipedia-Seite über die Nummer 69 ist zu beachten, dass 69 2 = 4.761 und 69 3 = 328.509 zusammen alle Dezimalstellen verwenden. Die Zahl 69 ist tatsächlich die niedrigste Zahl, die diese Eigenschaft erfüllt.
Aus einem ähnlichen Grund ist 32.043 bemerkenswert: 32.043 2 = 1.026.753.849 verwendet alle Dezimalstellen.
Wenn wir weiterhin über Zahlen sprechen wollen, die auf diese Weise interessant sind, brauchen wir eine Notation.
Für die meisten ganzen Zahlen n , die Potenzen n 2 ,…, n k werden alle zehn Dezimalstellen (ohne führende Nullen) mindestens einmal für ausreichend große Werte von k verwendet . Wenn es existiert, bezeichnen wir die niedrigste solche k als CUDDLE ( CUmulative Decimal Digits, Least Exponent ) von n .
Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die eine einzelne nicht negative Ganzzahl n als Eingabe akzeptiert und deren CUDDLE berechnet und zurückgibt .
Wenn n kein CUDDLE hat , können Sie alles andere als eine positive Ganzzahl zurückgeben, einschließlich eines Fehlers oder einer leeren Zeichenfolge, solange Ihr Code irgendwann anhält.
Testfälle
Die linke Spalte wird eingegeben, die rechte Spalte wird ausgegeben.
0
1
2 15
3 10
4 10
5 11
6 12
7 7
8 5
9 6
10
11 7
12 6
13 6
14 7
15 9
16 5
17 7
18 4
19 5
20 15
26 8
60 12
69 3
128 3
150 9
200 15
32043 2
1234567890 3
Zusätzliche Regeln
Ihr Code muss für alle Eingaben bis zu 255 funktionieren .
Beachten Sie, dass dies mit ziemlich großen Zahlen zu tun hat. 20 15 ist bereits größer als 2 64 .
Wenn Sie das Ergebnis drucken, kann ein Zeilenvorschub folgen.
Es gelten die Standardregeln für Code-Golf .
26->8
weil es das kleinste Beispiel ist, in demn^1
include die falsche Antwort (von6
) liefert , einen Fehler, den ich in meinem Code gemacht habe.Antworten:
Pyth, 16 Bytes
Probieren Sie es online aus: Demo oder Test Suite
Wie andere Lösungen verwende ich 15 als Obergrenze. Ich glaube, dass dies auch das maximale CUDDLE ist . Ich habe alle Zahlen bis 10.000.000 getestet und es gibt keine Nummer mit einem CUDDLE größer als 15.
Zahlen mit einem CUDDLE > = 10 sind schon ziemlich selten. Die einzigen Zahlen mit einem CUDDLE von 15 sind die Zahlen
2*10^k
. Es gibt keine Nummern mit einem CUDDLE von 14 oder 13, der CUDDLE 12 erscheint nur für die Nummern6*10^k
, der CUDDLE 11 nur für5*10^k
.Ich denke, dieser Code funktioniert perfekt für jede natürliche Zahl.
Gibt eine Fehlermeldung aus, wenn es keine Lösung gibt.
Erläuterung:
quelle
Python 2, 56
Eine rekursive Lösung. Zählt Exponenten
i
ab2
und sammelt die Potenzstellenn**i
in der Zeichenkettes
. Wenns
alle zehn Ziffern vorhanden sind, wird zurückgegebenTrue
, was gleich ist1
, und andernfalls wird rekursiv und addiert1
. Dies fiel kürzer aus als die Rückkehri
.Das Aufrufen der Funktion auf eine Nummer ohne CUDDLE wird mit beendet
Internal error: RangeError: Maximum call stack size exceeded
. Zahlen bis zu255
dieser Ausgabe benötigen nie mehr als 15 Iterationen.Aufgrund der nervigen Angewohnheit von Python 2
L
, große Zahlen anzufügen, initialisieren wir die Ziffernfolge tatsächlich aufL
und überprüfen, ob die festgelegte Größe mindestens 11 beträgt. Python 3 spart 2 Zeichen, indem es dies nicht benötigt, verliert jedoch 3 Zeichen bei der Verwendungstr
von Backticks. Python 3.5 spart mit dem Entpacken von Sätzen zwei weitere Zeichen und spart so einen Buchstaben mehr als Python 2:quelle
Ruby,
6765 ZeichenFunktioniert nahezu augenblicklich für alle Testfälle, auch für diejenigen> 255.
Fehler für Zahlen ohne CUDDLE.
Erläuterung:
quelle
CJam, 28 Bytes
Probieren Sie es online aus
Dies beruht auf der Tatsache, dass der CUDDLE (falls vorhanden) für den Eingabebereich niemals größer als 15 ist, wie dies zuerst von @xnor beobachtet wurde.
Es gibt wahrscheinlich eine bessere Möglichkeit, die Ausgabe für den Fall zu erstellen, dass es keine Lösung gibt. Ich werde aktualisieren, wenn mir etwas einfällt.
Erläuterung:
quelle
Mathematica, 103 Bytes
Es scheint, dass nur Potenzen von 10 keine CUDDLEs haben würden, daher werden sie übersprungen. Die Funktion speichert eine Liste der angezeigten Ziffern und stoppt, wenn keine Nullen mehr vorhanden sind.
Ausgabe:
quelle
log_10(n)
eine positive ganze Zahl irrational ist,k
gibt es siem
so, dass die Dezimaldarstellung von mitn^m
beginntk
. Was bedeutet, dass das Überspringen der Potenzen von 10 (und 0) in Ordnung ist :)JavaScript (ES6) 188
Nicht schlecht für eine Sprache, die auf 53-Bit-Ganzzahlen beschränkt ist.
Testen Sie das folgende Snippet in einem Browser, der EcmaScripts 6 implementiert, einschließlich Pfeilfunktionen und Spread-Operator (AFAIK Firefox).
quelle
PowerShell, 94 Byte
Nichts allzu Schlaues daran, aber das Weiterleiten an
sort -U[nique]
ist ein guter Weg, um dieset()
Funktionalität von Python für diese Art der Verwendung zu aktivieren, ohne explizit Elemente zu einer Hash-Tabelle hinzuzufügen.z.B
quelle
Gawk 4, 73 + 5 für Flags = 78 Bytes
Für jede Ziffer,
0
bis9
sie in die Potenzen der Eingabe eingeht, setzt sie das Bit, das2^digit
in repräsentierta
, bis die ersten 10 Ziffern gefunden wurden (a == 1023 == 2^10-1
) oder mehr als 15 Iterationen stattgefunden haben.Muss mit einem leeren Feldtrenner und der -M-Flagge für große Zahlen aufgerufen werden.
Als ich damit herumspielte, fand ich die folgenden Sequenzen für die verschiedenen CUDDLEs:
quelle