Einführung
Es ist ein bisschen langweilig, alle positiven Zahlen in der regulären Reihenfolge (1, 2, 3, ...) anzuordnen, nicht wahr? Hier ist also eine Reihe von Herausforderungen im Zusammenhang mit Permutationen (Umformungen) aller positiven Zahlen.
Die erste Herausforderung in dieser Reihe besteht darin, a (n) für ein gegebenes n als Eingabe auszugeben , wobei a (n) A064413 ist , auch als EKG-Sequenz bekannt, da der Graph seiner Werte einem Elektrokardiogramm ähnelt (daher das " Wie funktioniert das") fühlen " Referenz). Interessante Eigenschaften dieser Sequenz sind, dass alle positiven ganzen Zahlen genau einmal vorkommen. Ein weiteres bemerkenswertes Merkmal ist, dass alle Primzahlen in aufsteigender Reihenfolge auftreten.
Aufgabe
Geben Sie bei einer Ganzzahleingabe n a (n) aus.
ist definiert als:
- für ist die kleinste noch nicht verwendete Zahl, die einen Faktor mit a ( n - 1 ) teilt
Hinweis: Hier wird eine 1-basierte Indizierung angenommen. Sie können eine 0-basierte Indizierung verwenden, also usw. Bitte erwähnen Sie dies in Ihrer Antwort, wenn Sie dies verwenden möchten.
Testfälle
Input | Output
--------------
1 | 1
5 | 3
20 | 11
50 | 49
123 | 132
1234 | 1296
3000 | 3122
9999 | 10374
Regeln
- Eingabe und Ausgabe sind Ganzzahlen (Ihr Programm sollte mindestens Eingabe und Ausgabe im Bereich von 1 bis 32767 unterstützen)
- Ungültige Eingaben (Floats, Strings, negative Werte usw.) können zu unvorhergesehenen Ausgaben, Fehlern oder (un) definiertem Verhalten führen.
- Es gelten die Standard- E / A-Regeln .
- Standardlücken sind verboten.
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes
Schlussbemerkung
Siehe diese verwandte PP & CG-Frage .
#>¹↑¡§ḟȯ←⌋→`-Nḣ2
und hier!¡§ḟȯ←⌋→`-Nḣ2
tun würde ( Try it ). Die Definition von "duplizieren" ist nicht "ist genau das gleiche wie". Ich überlasse es anderen, zu entscheiden, da ich dies nicht schließen möchte, da ich möglicherweise etwas verpasst habe.a(n)
Aktien mit einem Faktor ungleich 1 mita(n-1)
, da jede Zahl Aktien 1 als Faktor. Darf meine Antwort auch "2-indiziert" sein, wobei "a(2)
1", "a(3)
2" usw. ist?Antworten:
05AB1E , 25 Bytes
0-indiziert
Erläuterung:
quelle
Haskell ,
66 6564 BytesProbieren Sie es online!
quelle
Haskell , 60 Bytes
Probieren Sie es online!
Nullindexiert; könnte vier Bytes einsparen, wenn die Serie mit 2 beginnt (ein bisschen (-1) -indexiert, aber ohne dass ein Wert für -1 definiert ist). Erstellt die unendliche Liste, indem die Liste der nicht verwendeten Nummern träge verwaltet wird.
quelle
Data.List
unddelete x
stattdessen verwendenfilter(/=x)
. Wenn dies für große Argumente funktionieren muss, wird eine solche Optimierung schnell notwendig.delete
ist das Verwenden das Vernünftigste, aber im Code-Golf ist es uns egal. Ich erwähne manchmal effizientere Varianten, wenn der Unterschied spektakulär oder auf andere Weise interessant ist. Hier ist es nicht schlecht: TIO kann alle Testfälle in weniger als 10 Sekunden berechnen.Python 2 , 104 Bytes
Dies verwendet eine 0-basierte Indizierung.
Probieren Sie es online!
quelle
Ruby, 86 Bytes
Dies läuft jedoch für immer für Eingaben ab 10.
Hier ist eine Version mit einer Speicherung von 102 Bytes, die in akzeptabler Zeit ausgeführt wird:
quelle
MASCHINENSPRACHE (X86, 32 Bit) + C-Sprachbibliothek malloc () / free () -Funktionen, Byte 325
Über gcd und der Funktion ... Der folgende Assembler-Code generiert die Funktionen und das Testprogramm:
die Ergebnisse:
Es ist möglich, Bugs und falsche Kopie vorbei ...
quelle
Perl 6,
848073695049 Bytes(0-indiziert)
Dank dieser Antwort für einige Tricks.
Dank nur ASCII für das Rasieren eines Bytes.
quelle
...
? Das macht Sequenzen viel einfacher. Zum Beispiel kann Ihrmy@a=1,2;push @a,operation while condition
sein1,2,{operation}...condition
. Bei einigen anderen Golfplätzen sind dies nur 49 Bytes.first
.APL (NARS), Zeichen 119, Bytes 238
dieser test dauert 1m: 49s hier:
quelle
Java (JDK) ,
161155152151 BytesEin Byte wurde gespeichert, indem das
int[]
Tracking umgeschaltet wurde, um das vorhandene zu nutzenBigInteger
!Probieren Sie es online!
quelle
Gaia , 27 Bytes
Probieren Sie es online!
1-basierte Indizierung.
Läuft ziemlich langsam, da es versucht, jede Ganzzahl zu finden
a(n)
.quelle