Geben Sie bei einer natürlichen Zahl n
die n
-te Leyland-Zahl zurück .
Leyland-Nummer
Leyland-Zahlen sind positive ganze Zahlen k
der Form
k = x^y + y^x
Wo x,y
sind ganze Zahlen streng größer als 1.
Sie werden in aufsteigender Reihenfolge aufgelistet.
BEARBEITEN : @DigitalTrauma schlug vor, folgende "Definition" aufzunehmen:
Stellen Sie sich vor, wir werfen
x^y+y^x
eine Tüte mit allen möglichen Werten vonx
und einy
und vermeiden das Einwerfen von Duplikaten. Dann sortieren wir diese Tasche. Der sortierte Beutel ist unsere Reihenfolge.
Einzelheiten
Sie können eine auf 0 oder 1 basierende Indexierung verwenden, je nachdem, was für Sie am besten geeignet ist.
Ihr Programm muss in der Lage sein, mindestens alle Leyland-Zahlen auszugeben, die kleiner sind als das Maximum der vorzeichenbehafteten 32-Bit-Ganzzahlen. (Die letzte Leyland-Zahl unterhalb dieser Grenze ist 1996813914
am Index 82
.)
Testfälle
Die ersten Begriffe lauten wie folgt:
8, 17, 32, 54, 57, 100, 145, 177, 320, 368, 512, 593, 945, 1124
A076980 in OEIS, mit Ausnahme des ersten Eintrags. Beachten Sie, dass aufgrund dieses zusätzlichen ersten Eintrags die Indizes für OEIS um eins verschoben werden.
Weitere Informationen finden Sie in der OEIS-B-Datei
They are enumerated in ascending order
Ich bin mir nicht sicher, was das bedeutet. Können Sie eine Liste von x und y bereitstellen?8
vorher17
, nicht umgekehrt.x^y+y^x
eine Tüte mit allen möglichen Werten vonx
und einy
und vermeiden es, Duplikate zu werfen. Dann sortieren wir diese Tasche. Der sortierte Beutel ist unsere Reihenfolge.Antworten:
MATL ,
161513 BytesDie Ausgabe ist 1-basiert.
Probieren Sie es online!
Erläuterung
quelle
unique
die Elemente sortiert. Geht das nicht auch in MATL?'stable'
Flag für,unique
da dies die üblichere Verwendung ist.t!^
(wo^
kann ersetzt werden durch+
,-
oder eine beliebige Anzahl von Operatoren) viel Motiv. Was wäre, wenn wir&
für einige, bei denen ein Vektor dieses Verhalten aufweist, Mittelwert 1 eingeben würden?Haskell, 52 Bytes
Wirklich ineffizient. Testet jede natürliche Zahl als Leyland-Zahl und erstellt eine unendliche Liste derjenigen, die es gibt. Nimmt bei einer Eingabe das Indexelement der Liste. Verwendet, dass nur
x,y
bis zu 31 auf 32-Bit-Ganzzahlen überprüft werden müssen.Gleiche Länge mit
filter
:quelle
Java 8,
225221219216206204193192 Bytes0-indiziert
-2 Bytes (221 → 219) werden durch Ersetzen
1996813915
durch(1L<<31)
dank @LeakyNun eingespart .-3 Bytes (219 → 216) dank @LeakyNun und @Frozn mit etwas, das ich selbst vergessen habe.
-10 Bytes (216 → 206) durch Ändern von Java 7 auf 8.
-2 Bytes (206 → 204) durch Ersetzen
ArrayList
durchVector
danke an @TAsk .-11 Byte (204 → 193) durch Entfernen
s<(1L<<31)&
, da in der Frage angegeben ist, dass " mindestens alle Leyland-Zahlen kleiner sind als das Maximum der vorzeichenbehafteten 32-Bit-Ganzzahlen ".-1 Byte (193 → 192) durch Ändern
Vector
aufStack
.Erläuterung:
Probieren Sie es hier aus
quelle
2^31-1
(signiertes int) unterstützen müssen, können Sie nicht ein paar derlong
Casts austauschen?import java.util.*;long c(int n){List<Long>t=new ArrayList();for(int i=2,j;i<25;i++)for(j=2;j<25;j++){long s=(long)(Math.pow(i,j)+Math.pow(j,i));if(s<(1L<<31)&!t.contains(s))t.add(s);}Collections.sort(t);return t.get(n);}
for (int i = 1, j; ++i < 30;)
undfor (j = 1; ++j < 30;)
Pyth, 17 Bytes
0-indiziert.
Probieren Sie es online! (Bitte halten Sie es bei 100.)
Wie es funktioniert
Langsamere Version
1-indiziert.
Probieren Sie es online! (Bitte halten Sie es bei 3.)
quelle
MATLAB, 58 Bytes
1-indiziert
unique
In MATLAB wird die Matrix geglättet und sortiert.Vielen Dank für die Hilfe an @FryAmTheEggman und @flawr .
quelle
05AB1E,
20 bis19 Bytes0-indiziert
Erklärt
Probieren Sie es online aus
1 Byte dank @Adnan gespeichert
quelle
ÝÌ
ist kurz für>L>
.ê
wird sortiert_uniquified, wenn dies bei der Abfrage vorhanden war.Mathematica,
604840 BytesVerwendet eine einseitige Indizierung.
Union
wird verwendet, indem es zwischen den einzelnen Zeilen der 2D-Matrix angewendet wird, die von der erstellt wurdeArray
. DortUnion
wird die 2D-Matrix zu einer Liste zusammengefasst, wobei auch alle Duplikate entfernt und die Werte in sortierter Reihenfolge platziert werden.8 Bytes gespart dank @ LLlAMnYP .
Verwendung
quelle
{#+1,#+1}
ist nicht notwendig, kann so belassen{#,#}
und{2,2}
einfach durch ersetzt werden2
.Array
das dritte Argument erweitern würde.Jelly, 14 Bytes
2 Bytes dank Dennis.
Probieren Sie es online! (Nimmt ~ 1s für 82 für mich) (O (n ^ 2) Zeit)
Ursprüngliche 16-Byte-Antwort
Probieren Sie es online! (Dauert <1s für mich) (Konstante Zeit)
quelle
R‘*€¹$+Z$FṢQị@
ist schneller, kürzer und hat keine künstliche Obergrenze.Bash + GNU-Dienstprogramme, 63
1-basierte Indizierung. Es sieht so aus, als ob dies ziemlich der gleiche Ansatz ist wie die Antwort von @ TimmyD . Anstelle von verschachtelten Schleifen wird die Bash-Klammer-Erweiterung verwendet, um arithmetische Ausdrücke zu generieren, die
bc
zur Auswertung weitergeleitet werden.Ideone.
quelle
Perl 6 ,
60 5856 BytesPrüfung:
Erläuterung:
quelle
sort [
und nicht entfernen] 2..31
?sort([...
zu einem Arrayzugriff eines Terms machensort[...
. Ähnliches passiert mit dem anderen Raum.F #,
117, 104Welp, es ist zumindest kürzer als meine C # -Antwort.
Sparte 13 Bytes dank Reed Copsey im F # -Chatroom.
quelle
PowerShell v2 +,
847368 Bytes11 Bytes dank @Neil gespart ... 5 Bytes zusätzlich gespart, indem die
iex
Auswertung des Ausdrucks neu organisiert wurde.Naive Methode, wir verdoppeln einfach for loop von
x=2..30
undy=2..x
. Jede Schleife setzen wirx^y + y^x
auf die Pipeline. Die30
wurde experimentell ausgewählt, um sicherzustellen, dass wir alle Fälle weniger als2^31-1
abdecken ;-). Diese leiten wirSort-Object
in aufsteigender Reihenfolge weiter. Die Ausgabe wird basierend auf der Eingabe mit einem Index von Null versehen$args[0]
.Ja, hier werden viele irrelevante Einträge generiert - dieser Algorithmus generiert tatsächlich 435 Leyland-Zahlen - aber Dinge über dem Index
81
sind nicht garantiert genau und in Ordnung (möglicherweise werden einige übersprungen).Beispiele
quelle
R,
5854 Bytes1-indiziert. Eliminiert 4 Bytes durch Verwendung von
pryr::r
anstelle vonfunction
.Erläuterung
Für alle Zahlen von 2 bis 99 und 2 bis 9
wende die Funktion an
x^y+y^x
. Dies erzeugt eine 98x8-Matrix.Sortieren Sie diese Matrix (indem Sie sie in einen Vektor umwandeln):
Entfernen Sie alle nicht eindeutigen Werte:
Lesen Sie
n
von stdin und holen Sie dien
th Zahl von der Liste:quelle
JavaScript (Firefox 42-57), 94 Byte
Benötigt Firefox 42, da es sowohl Array-Verständnis als auch Exponentiation (
[for(..of..)]
und**
) verwendet.quelle
[for...of]
es auf ES7 geschafft habe.for(..of..)
nicht[for(..of..)]
.Haskell,
9998969594 BytesEs ist wahrscheinlich leicht zu übertreiben, aber das war das Beste, was ich mir einfallen lassen konnte.
quelle
toInteger
in meiner Lösung nichts angeben, kommt es zu einem Überlaufint
, da wir bei der Arbeit mit der Liste eine viel höhere Iteration ausführen (bisn+3
stattn
). Andernfalls müssten wir die ersten vier Begriffe fest codieren. Was genau machttoEnum
Ihre Lösung?f=(sort(nub[x^y+y^x|x<-[2..99],y<-[2..x]])!!)
.toEnum
konvertiert ein Int in ein Enum, und Integer ist eine Instanz der Enum-Klasse, sodass toEnum hier n + 3 in ein Integer konvertiert.Python 3,
7669 Bytes0-indiziert.
https://repl.it/C2SA
quelle
r=range(2,32)
lambda n:sorted(…)[n]
C #,
141, 127 Bytes.Oh c #, du bist so eine lange Sprache.
Dies ist ein Lambda, das zugewiesen
delegate double del(int n);
werden muss, um als solches ausgeführt zu werden:quelle
Enumerable.Range(
in einer Variablen / Funktion / Iterator / was auch immer mit einem kürzeren Namen für die Wiederholung speichern?SQL (PostgreSQL 9.4), 171 Byte
Geschehen zu einer vorbereiteten Erklärung. Generieren Sie ein paar Reihen 2 - 99, verbinden Sie sie und führen Sie die Gleichung aus. Ordnen Sie die Ergebnisse dicht an, um sie zu indizieren, und wählen Sie das erste Ergebnis mit dem Rang der Ganzzahleingabe aus.
Wie folgt ausgeführt
Das lief dann viel schneller als ich erwartet hatte
quelle
J, 29 Bytes
Verwendet eine einseitige Indizierung. Konvertierung von meiner Mathematica- Lösung .
Das wahre Geheimnis hier ist, dass ich
:(^+^~)
auf meiner Seite habe.Verwendung
Erläuterung
Ernsthafter,
quelle
Schnelle 3, 138 Bytes
Ungolfed Code
Probieren Sie es hier aus
quelle
Axiom 148 Bytes
ein Beispiel
Typ: List Integer
quelle
Perl 5 , 70 + 1 (-p) = 71 Bytes
Probieren Sie es online!
quelle
Ruby ,
62-58BytesProbieren Sie es online!
quelle
J
3831 Bytes0-indiziert.
Verwendung
quelle
Java,
200197 Bytes0-indiziert
Es sieht so aus, als könnten Java-Streams tatsächlich Bytes sparen! Wer hätte gedacht?!
Ungolfed:
Bearbeitungen:
long[]
und entfernte Klammern umn
.quelle
Python 3, 129 -> 116 Bytes
Ich weiß, dass es eine kürzere Antwort auf Python 3 gibt, aber ich wollte trotzdem meine Lösung beisteuern.
Dies war der beste Weg, um alle Werte für x und alle Werte für y durchzugehen. Wenn jemand meinen Ansatz Golf spielen kann, würde es geschätzt
quelle
t
einset
statt einer Liste, und ersetzen Sie die letztenfor
Anweisungen durch eine einfachet.add(q)
.APL (Dyalog) , 27 Bytes
Probieren Sie es online!
quelle
Japt
-g
, 15 BytesVersuch es
quelle