Die nicht-negativen Ganzzahlen haben die Langeweile, immer die gleichen zwei * Nachbarn zu haben, und beschließen, die Dinge ein wenig durcheinander zu bringen. Sie sind aber auch faul und wollen so nah wie möglich an ihrer ursprünglichen Position bleiben.
Sie kommen mit dem folgenden Algorithmus:
- Das erste Element ist 0.
- Das -Element ist die kleinste Zahl, die noch nicht in der Sequenz vorhanden ist und die kein Nachbar des -Elements ist.
Dies erzeugt die folgende unendliche Folge:
0,2,4,1,3,5,7,9,6,8,10,12,14,11,13,15,17,19,16,18,20,22,24,21,23,25,27,29,26,28 ...
0
ist das erste Element. 1
ist die kleinste Zahl, die noch nicht in der Sequenz enthalten ist, aber ein Nachbar von 0
. Die nächstkleinere Zahl ist 2
, also das zweite Element der Sequenz. Jetzt sind die restlichen Zahlen 1,3,4,5,6,...
, aber da beide 1
und 3
Nachbarn von sind 2
, 4
ist das dritte Mitglied der Sequenz. Da 1
es kein Nachbar von ist 4
, kann es endlich seinen Platz als viertes Element einnehmen.
Die Aufgabe
Schreiben Sie eine Funktion oder ein Programm in so wenigen Bytes wie möglich, um die obige Sequenz zu erzeugen.
Du könntest
- die Sequenz unendlich ausgeben,
- Nehmen Sie eine Eingabe und geben Sie das -Element der Sequenz zurück, oder
- Nehmen Sie eine Eingabe und geben Sie die ersten Elemente der Sequenz zurück.
Für den Fall, dass Sie eine der beiden letztgenannten Optionen wählen, ist sowohl die Null- als auch die Eins-Indizierung in Ordnung.
Sie müssen den oben angegebenen Algorithmus nicht befolgen. Jede Methode, die dieselbe Sequenz erzeugt, ist in Ordnung.
Inspiriert von Code Golf die beste Permutation . Es stellt sich heraus, dass dies A277618 ist .
* Zero hat buchstäblich nur einen Nachbarn und interessiert sich nicht wirklich dafür.
Antworten:
JavaScript (ES6), 13 Byte
Gibt den ten Term der Sequenz zurück.n
Probieren Sie es online!
Wie?
Dies berechnet:
quelle
Python 2 , 20 Bytes
Probieren Sie es online!
quelle
MathGolf , 5 Bytes
Probieren Sie es online!
Einige nette Symmetrie hier. Gibt das
nth
Element der Sequenz zurück.Erläuterung:
quelle
Gelee , 5 Bytes
Probieren Sie es online!
Go go Gadget obskure eingebaut!
quelle
Wolfram Language (Mathematica) , 14 Byte
Probieren Sie es online!
Gibt die n-te Ganzzahl mit dem Index Null in der Sequenz aus.
quelle
R ,
252321 Bytes-2 Bytes dank Jo King
Probieren Sie es online!
Gibt das
nth
Element der Reihe nach aus.quelle
Dzaima / APL , 9 Bytes
Antwort von Port of Arnauld.
Probieren Sie es online!
quelle
Pip , 14 Bytes
Nimmt (0-basiert) als Befehlszeilenargument und gibt . Probieren Sie es online!n einn
Beachten Sie, dass . Wir codieren die ersten fünf Werte hart und versetzen sie von dort aus.einn + 5= an+ 5
Oder die Formel, die jeder verwendet, für 12 Bytes :
quelle
Common Lisp , 67 Bytes
Probieren Sie es online!
quelle
(defun x(n)(+(mod(+ n 2)5)(- n 2)))
, oder(lambda(n)(+(mod(+ n 2)5)(- n 2)))
ist genug: Rückgabe des n-ten Terms anstelle einer Folge von Terms.Japt , 8 Bytes
Japt Interpreter
Eine einfache Portierung von Arnauld's Javascript-Antwort. Die verknüpfte Version durchläuft die ersten n Elemente, aber wenn das
-m
Flag entfernt wird, ist es immer noch gültig und gibt stattdessen das n-te Element aus.Zum Vergleich ist hier die naive Version, die den in der Frage angegebenen Algorithmus implementiert:
Ich werde eine Erklärung für diese geben:
quelle
05AB1E , 5 Bytes
Port von @ JoKings MathGolf Antwort .
Probieren Sie es online aus oder überprüfen Sie die ersten 100 Nummern .
Erläuterung:
quelle
Sauber , 31 Bytes
Die Formel, die jeder benutzt.
Probieren Sie es online!
Sauber , 80 Bytes
Mein erster Ansatz, die ersten
n
Artikel zurückzugeben.Probieren Sie es online!
quelle
Pari / GP , 14 Bytes
Probieren Sie es online!
Pari / GP , 14 Bytes
Probieren Sie es online!
quelle
J , 30 Bytes
Probieren Sie es online!
Gibt eine Liste der ersten
n
Zahlen zurückDiese Lösung ist offensichtlich nicht wettbewerbsfähig, aber ich wollte eine Array-basierte Methode ausprobieren.
Erläuterung:
Das Argument ist
n
2 ,]
- 2 an die Eingabe anhängen()@
- und benutze diese Liste um:i.
- Erstelle eine Matrixn
x 2 mit den Zahlen im Bereich 0..2n-1:4 0$~]
-~
kehrt die Argumente um, so dass es] $ 4 0 ist - erstellt eine Matrixn
x 2, die 4 0 wiederholt-
subtrahieren Sie die zweite Matrix von der ersten, so dass die erste Spalte um 2 Stellen "verzögert" ist_5,./\
Durchqueren Sie die Matrix in nicht überlappenden Gruppen von 5 Zeilen und nähen Sie die Spalten[:,
Ravel das gesamte Array2}.
- Lass die ersten 2 Zahlen fallen{.
Nimm die erstenn
ZahlenJ 9 Bytes
Probieren Sie es online!
Gibt das
n
th-Element zurück.Antwort von Port of Arnauld
quelle
K (ngn / k) , 12 Bytes
Probieren Sie es online!
quelle
-2+x+
->x-2-
Pepe , 65 Bytes
Probieren Sie es online!
Antwort von Port of Jo King.
quelle
x86-Maschinencode, 16 Byte
Versammlung:
Probieren Sie es online!
quelle
Rot , 26 Bytes
Probieren Sie es online!
Antwort von Port of Arnauld
quelle
Excel, 17 Bytes
Nichts Schlaues. Implementiert die allgemeine Formel.
quelle
C (gcc) POSIX, 20 Bytes
Probieren Sie es online!
quelle
QBasic, 30 Bytes
Gibt den 0-indizierten Eintrag der Liste an Pos
x
.Probieren Sie es online! (Beachten Sie, dass
?
erweitert wurde,PRINT
weil der Interpreter sonst ausfällt ...)quelle
C # (Visual C # Interactive Compiler) , 14 Byte
Probieren Sie es online!
Gleiche Logik wie andere Antworten: 1 2
quelle
R , 25 Bytes
Probieren Sie es online!
Portierung der Antwort von Robert S. (und nur durch Hinzufügen von 4 Bytes), da R Vektoren hervorragend verarbeiten kann.
Gibt die ersten n Werte aus.
quelle
Gleichstrom , 9 Bytes
Probieren Sie es online!
Gleiche Methode wie die meisten. Duplizieren Sie den Stapelanfang, fügen Sie 2 hinzu, modifizieren Sie 5, fügen Sie zum Original hinzu (zuvor dupliziert), subtrahieren Sie 2, drucken Sie.
quelle
TI-BASIC, 11 Bytes
Ans
Ein einfacher Port der anderen Antworten.
Hinweis: TI-BASIC ist eine Token-Sprache. Die Anzahl der Zeichen entspricht nicht der Anzahl der Bytes.
quelle