Eine positive Ganzzahl kann in einer Ganzzahlbasis dargestellt werden 1 <= b < inf
.
Bei der Konvertierung in diese Basis weist sie eine Reihe von unterschiedlichen Ziffern auf.
Jede positive Ganzzahl in der Basis 1
hat eine 1
eindeutige Ziffer.
Die meisten positiven Ganzzahlen in der Basis 2
haben 2
unterschiedliche Ziffern, mit Ausnahme derjenigen der Form 2^n - 1
, die nur eine haben 1
.
Die erste positive Ganzzahl, die in einer Ganzzahlbasis mit einer 1
eindeutigen Ziffer dargestellt werden kann, ist also 1
und die erste, die mit 2
unterschiedlichen Ziffern dargestellt werden kann, ist 2
.
Wir können sagen, dass dies 1
die erste Ganzzahl mit digitaler Diversität 1
und 2
die erste Ganzzahl mit digitaler Diversität ist 2
.
Herausforderung:
Bei einer positiven Ganzzahl wird n
die erste positive Ganzzahl (in Basis 10 *) mit einer digitalen Diversität von zurückgegeben n
.
* Wenn Ihre Sprache nur eine bestimmte Basis unterstützt (z. B. unär oder binär), können Sie in dieser Basis ausgeben.
Ihr Algorithmus muss theoretisch für jede positive Ganzzahleingabe funktionieren : Er kann fehlschlagen, weil die Genauigkeit der Ganzzahl Ihrer Sprache für die Ausgabe zu gering ist. Dies kann jedoch nicht scheitern, da die Basiskonvertierung nur bis zu einem gewissen Grad definiert ist.
Testfälle
input output
1 1
2 2
3 11
4 75
5 694
6 8345
7 123717
17 49030176097150555672
20 5271200265927977839335179
35 31553934355853606735562426636407089783813301667210139
63 3625251781415299613726919161860178255907794200133329465833974783321623703779312895623049180230543882191649073441
257 87678437238928144977867204156371666030574491195943247606217411725999221158137320290311206746021269051905957869964398955543865645836750532964676103309118517901711628268617642190891105089936701834562621017362909185346834491214407969530898724148629372941508591337423558645926764610261822387781382563338079572769909101879401794746607730261119588219922573912353523976018472514396317057486257150092160745928604277707892487794747938484196105308022626085969393774316283689089561353458798878282422725100360693093282006215082783023264045094700028196975508236300153490495688610733745982183150355962887110565055971546946484175232
Dies ist Code-Golf , die kürzeste Lösung in Bytes gewinnt.
OEIS: A049363 - auch kleinste pandigitale Zahl in Basis n.
quelle
Python, 40 Bytes
Teste es auf Ideone .
Wie es funktioniert
Eine Zahl mit n verschiedenen Ziffern muss eindeutig in der Basis b ≥ n ausgedrückt werden . Da es unser Ziel ist, die Anzahl zu minimieren, sollte b auch so klein wie möglich sein, so dass b = n die logische Wahl ist.
Das lässt uns die Ziffern 0,…, n-1 so anordnen , dass eine möglichst kleine Zahl entsteht, was bedeutet, dass die höchstwertigen Ziffern so klein wie möglich gehalten werden müssen. Da die erste Ziffer in der kanonischen Darstellung keine 0 sein kann , ist die kleinste Zahl
(1) (0) (2) ... (n-2) (n-1) n = nn-1 + 2nn -3 +… + (N-2) n + (n-1) , was f rekursiv berechnet.
quelle
Python 2,
5446 BytesDas ist ein sehr sehr sehr ! schnelle, iterative Lösung.
Probieren Sie es online aus
Es gibt keine Rekursion, daher funktioniert es bei großen Eingaben. Hier ist das Ergebnis von
n = 17000
(dauert 1-2 Sekunden):http://pastebin.com/UZjgvUSW
quelle
lambda n:n**~-n+sum(i*n**(n+~i)for i in range(2,n))
n=r=input();k=2\nwhile k<n:r=r*n+k;k+=1\nprint r
JavaScript (ES6), 29 Byte
quelle
J 9 Bytes
Basierend auf der @ Tennis- Methode .
Verwendung
Erläuterung
Es gibt eine alternative Lösung, die auf der Verwendung des Permutationsindex basiert. Wenn Sie n eingeben , erstellen Sie die Liste der Ziffern
[0, 1, ..., n]
und suchen Sie die Permutation mit einem Index von n ! Und konvertieren Sie diesen als Liste der Basis- n- Ziffern. Die entsprechende Lösung in J für 12 Bytesquelle
[1,0,2,3,...,n-1]
?Ruby,
373534 BytesDie Antwort für eine gegebene
n
nimmt die Form10234...(n-1)
in der Basis ann
. Amn=10
Beispiel:Beginnen Sie mit
n
:10
Multiplizieren Sie mit
n
und addieren Sie 2:102
Multiplizieren Sie mit
n
und addieren Sie 3:1023
Und so weiter.
EDIT: Kürzere Karte verwenden, wie es scheint.
EDIT 2: Danke für den Tipp, m-chrzan!
quelle
(2...n)
wird ein Byte kürzer sein.CJam , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
CJam (9 Bytes)
Online-Demo
Präparation
Offensichtlich die kleinste Nummer mit digitaler Vielfalt
n
durch Basisumwandlung[1 0 2 3 ... n-1]
in Basis gefundenn
. Beachten Sie jedoch, dass für die integrierte Basiskonvertierung nicht erforderlich ist, dass die Ziffern im Bereich liegen0 .. n-1
.Beachten Sie, dass in dem speziellen Fall
n = 1
wir geben bekommen1 [0] 1 1 tb
,1 [0 1] b
was ist1
.quelle
Haskell, 31 Bytes
Konvertiert die Liste
[n,2,3,...,n-1]
in eine Basisn
mithilfe der Horner-Methode durch Falten . Eine weniger Golf-Version davon finden Sie auf der OEIS-Seite .Danke an nimi für 3 Bytes!
quelle
f
?), Um eine gültige Golflösung zu sein? (Es ist nurf
nicht später im Code verwiesen)\n->fold1...
, die nur so lange dauert , wie sie benannt wird. Sie können eine punktfreie Funktion schreiben, bei der die Eingabevariable nicht durch Kombinieren von Unterfunktionen benannt wird, aber das wäre hier mit drei Verweisen auf schrecklichn
.foldl
und beginnen mitn
:f n=foldl((+).(*n))n[2..n-1]
05AB1E , 9 Bytes
Probieren Sie es online!
Erläuterung
n = 4
zum Beispiel verwendet.quelle
C ++ -
18155Wollte diese wirklich coole Lösung posten mit
<numeric>
:und dann wurde mir klar, dass es viel einfacher ist:
quelle
Perl 6 ,
34 3130 BytesÜbersetzt aus dem Haskell-Beispiel auf der OEIS-Seite .
[&(…)]
wendet sich…
in einen In-Place-Infix-Operator[…]
oben gezeigte verwandelt ein Infix-Op in eine Falte (links oder rechts, abhängig von der Assoziativität des Operators)Erweitert:
Verwendung:
quelle
Brain-Flak ,
8476 BytesDank an Wheat Wizard für das Golfen von 8 Bytes
Probieren Sie es online!
Erläuterung
Das Programm überträgt die Werte von
0
bisn-1
zum Stapel und ersetzt das obere0
und1
mit1
und0
. Dann multipliziert es die Oberseite des Stapels mitn
und addiert den Wert darunter, bis nur noch ein Wert auf dem Stapel vorhanden ist.Im Wesentlichen findet es die Ziffern für die kleinste Zahl in der Basis
n
, dien
verschiedene Ziffern enthält (fürn
> 1 ist es immer von der Form1023...(n-1)
). Anschließend berechnet es die Zahl anhand der Ziffern und der Basis.Kommentierter Code
quelle
{}{}(()(<()>))([][()])
mit(<{}{}>)([(())][])
zu speichern vier Bytes(<{}{}>)((()))
um vier weitere Bytes zu sparenJulia, 26 Bytes
Probieren Sie es online!
quelle
ShapeScript , 25 Byte
Die Eingabe ist unär, die Ausgabe erfolgt dezimal. Probieren Sie es online!
quelle
PHP, 78 Bytes
Online Version
60 Bytes funktionieren nur bis n = 16 mit der Genauigkeit in den Testfällen
Für n = 144 INF
n = 145 NAN
quelle
k, 12 Bytes
Basierend auf Dennis 'Antwort .
quelle
JavaScript (ES6), 39 Byte
Verwendet nicht
=>
quelle