Hier die ersten 100 Zahlen einer einfachen Sequenz:
0,1,0,2,1,4,3,7,6,11,10,16,15,22,21,29,28,37,36,46,45,56,55,67,66,79,78,92,91,106,105,121,120,137,136,154,153,172,171,191,190,211,210,232,231,254,253,277,276,301,300,326,325,352,351,379,378,407,406,436,435,466,465,497,496,529,528,562,561,596,595,631,630,667,666,704,703,742,741,781,780,821,820,862,861,904,903,947,946,991,990,1036,1035,1082,1081,1129,1128,1177,1176,1226
Wie funktioniert diese Sequenz?
n: 0 1 2 3 4 5 6 7 8 9 10 11 12
0, 1-1=0, 2-1=1, 4-1=3, 7-1=6, 11-1=10, 16-1=15,
0+1=1, 0+2=2, 1+3=4, 3+4=7, 6+5=11, 10+6=16, 15+7=22
a(0) = 0
- Für jede ungerade
n
(0-indiziert) ist esa(n-1) + X
(woX=1
und erhöht sich bei jedem Zugriff um 1). - Für jede gerade
n
(0-indizierte) ist esa(n-1) - 1
Herausforderung:
Einer von:
- Geben Sie bei einer Ganzzahl
n
dien
'te Zahl in der Sequenz aus. - Geben Sie bei einer Ganzzahl
n
die erstenn
Zahlen der Sequenz aus. - Geben Sie die Sequenz auf unbestimmte Zeit aus, ohne eine Eingabe ( oder eine leere, nicht verwendete Eingabe ) zu übernehmen.
Herausforderungsregeln:
- Der Eingang
n
kann sowohl 0- als auch 1-indiziert sein. - Wenn Sie einen Teil der Sequenz ausgeben, können Sie eine Liste / ein Array verwenden und mit einem beliebigen Trennzeichen (Leerzeichen, Komma, Zeilenumbruch usw.) auf STDOUT ausgeben. Ihr Anruf.
- Bitte geben Sie an, welche der drei Optionen Sie in Ihrer Antwort verwendet haben.
- Sie müssen mindestens die ersten 10.000 Nummern unterstützen (die 10.000ste Nummer ist
12,497,501
).
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie nach Möglichkeit auch eine Erklärung hinzu.
Testfälle:
Pastebin mit den ersten 10.001 Nummern in der Sequenz. Fühlen Sie sich frei zu wählen, was Sie möchten.
Einige höhere Zahlen:
n (0-indexed) Output:
68,690 589,772,340
100,000 1,249,975,000
162,207 3,288,888,857
453,271 25,681,824,931
888,888 98,765,012,346
1,000,000 124,999,750,000
ÎGDN+D<
generiert die Sequenz, aber das n-te Element zu greifen scheint ... in 3 Bytes schwierig zu sein.Oktave , 32 Bytes
Probieren Sie es online!
Gibt die n-te Zahl mit dem Index 0 aus. Verwendet dieselbe Formel wie mehrere andere Antworten.
quelle
APL (Dyalog Unicode) ,
1612 Bytes SBCSAnonyme implizite Präfixfunktion. 0-indiziert.
Probieren Sie es online!
+/
die Summe von⊢↑
die erstenn
elemente∘∊
der ϵ nlisted (abgeflacht)¯1,¨⍨
Negativ-eins-an-jeden angehängt⍳
ersten
Indexe (0 bisn
–1quelle
Gelee , 6 Bytes
Ein monadischer Link, der akzeptiert (1-indiziert)
n
und zurückgibta(n)
.Probieren Sie es online! Oder sehen Sie die Testsuite an
Wie?
quelle
PHP ,
7364555147 BytesErste Methode
Erste Code Golf Antwort!
Ich bin mir sicher, dass es PHP-Tricks gibt, die es kürzer machen und die Mathematik kann wahrscheinlich verbessert werden.
Nimmt n als erstes Argument und gibt die n-te Zahl in der Sequenz aus.
Minus 9 Bytes durch Entfernen von "$ x = 0;" und "$ i = 0".
Minus 9 Bytes dank @Kevin Cruijssen, der die for-Schleife und den Verlust des End-Tags verbessert.
Minus 1 Byte mit bitweise oder "|" anstatt "(int)"
Minus 3 Bytes dank @Dennis, da Sie die Tags entfernen können, indem Sie sie über die Befehlszeile mit "php -r 'code here'" ausführen.
Probieren Sie es online!
Zweite Methode
Hat meine vorherige Antwort mit einer ganz neuen Methode abgeglichen!
Verwenden von XOR und dem Tenary-Operator, um zwischen den Summen in der Schleife zu wechseln.
Bearbeiten: Dies funktioniert nicht für n = 0 und ich habe keine Ahnung warum. $ i ist nicht zugewiesen, daher sollte es 0 sein, daher sollte die Schleife
($i<$argv[1])
fehlschlagen(0<0==false)
, daher sollte ein nicht zugewiesenes $ x als 0 und nicht als 1 ausgegeben werden.Probieren Sie es online!
Dritte Methode
Die Konvertierung der erstellten Excel-Formel @Wernisch in PHP ergibt eine 47-Byte-Lösung
Probieren Sie es online!
quelle
?>
. Entfernen$x=0
und$i=0
ist in der Tat erlaubt (wenn nicht,$x=$i=0
wäre es auch kürzer gewesen). Auch die Schleife kann auf gekürzt werdenfor(;$i<$y+1;)$x+=$i++;
. Welches ist -15 Bytes insgesamt. Genieße deinen Aufenthalt! :)R , 35 Bytes
Probieren Sie es online!
Ich fand das eine interessante Alternative zu @ JayCes Antwort da es sich nicht sehr gut für Sprachen keine eingebaute Unterstützung für Matrizen haben, und zufällig genauso gut für Golfer geeignet ist.
1-indiziert, gibt die ersten
n
Elemente der Sequenz zurück.Wie es funktioniert:
rbind(n<-1:scan(),-1)
konstruiert die folgende Matrix:Da R Matrizen in der Hauptreihenfolge der Spalten enthält
vector
, würden wir einen Vektor erhalten , wenn wir dies in a umwandeln würdenWobei, wenn wir eine kumulative Summe von nehmen, wir bekommen würden
Das ist die Sequenz, nur ohne die Führung
0
.diffinv
Glücklicherweise wird die führende Null hinzugefügt, sodass wir die erstenn-1
Werte aus der Matrix unddiffinv
diesen entnehmen und die erstenn
Werte der Sequenz erhalten.quelle
diffinv
R ,
3534 BytesProbieren Sie es online!
Erste Ausgabeoption. Gleiche Formel wie viele andere Antworten. (Ich möchte auf die erste Antwort verweisen, die die Formel enthält. Ich kann nicht herausfinden, um welche es sich handelt.)
Zweite und dritte Ausgabeoptionen unten:
R , 43 Bytes
Probieren Sie es online!
R , 51 Bytes
Probieren Sie es online!
quelle
Matlab / Octave,
3126 Bytes5 Bytes gespart dank Luis Mendo!
quelle
fix
anstelle vonfloor
undn/2+.5
anstelle von verwendenceil(n/2)
fix()
und erwartete nicht1:n/2+.5
zu arbeiten - so viele Dinge, die schief gehen könnten, aber sie tun es tatsächlich nicht :)Java (JDK 10) , 20 Byte
Probieren Sie es online!
Port of TFelds Python 2-Antwort , also gib ihnen eine positive Bewertung! ;)
quelle
QBasic 1.1 , 49 Bytes
1-indiziert.
quelle
QBasic 1.1 , 30 Bytes
Verwendet den TFeld-Algorithmus. 0-indiziert.
quelle
QBasic, 31 Bytes
Die Just-Implement-the-Spec-Lösung ist etwas länger als Eriks Lösung .
Dies wird auf unbestimmte Zeit ausgegeben. Um es auszuführen, empfehle ich, die letzte Zeile in so etwas wie zu ändern
LOOP WHILE INPUT$(1) <> "q"
, die nach jedem zweiten Eingeben und Verlassen der Sequenz auf einen Tastendruck wartet, wenn die gedrückte Taste gedrückt wirdq
.quelle
C # (.NET Core) , 56 Byte
-2 Bytes dank Kevin Crujssen
Probieren Sie es online!
1 indiziert. Kehrt zurück
a(n)
Ungolf'd:
quelle
i=1;for(;i<n;i++)
kann seini=0;for(;++i<n;)
undi%2==0
kann seini%2<1
.do-while
prüft nach Abschluss der ersten Iteration. :)if
mit einemfor
-loop zusammenführen. Zum Beispiel:if(t>0)for(i=0;i<l;i++)
bisfor(i=0;t>0&i<l;i++)
. Ich habe dies jedoch fast nie in meinen Antworten verwenden können.Schale ,
1198 BytesDank H.PWiz wurde ein Byte gespeichert.
Ausgaben als unendliche Liste.
Probieren Sie es online!
Erläuterung
quelle
Dodos , 69 Bytes
Probieren Sie es online!
Irgendwie ist das die längste Antwort.
Erläuterung.
quelle
Kohle , 15 Bytes
Probieren Sie es online! 0-indiziert. Link ist eine ausführliche Version des Codes. Die Formel wäre wahrscheinlich kürzer, aber was macht das für einen Spaß? Erläuterung:
quelle
JavaScript,
494845 BytesProbieren Sie es online!
Nicht so hübsch wie @tsh Antwort, aber meine funktioniert für größere Zahlen.
Und nun danke @tsh für die
eval
Lösung!quelle
<=x+1
kann sein<x+2
x=>eval('for(i=0,r=1;++i<x+2;)r+=i%2?-1:i/2')
sollte kürzer sein.eval
den zuletzt geänderten Wert zurück? Ich verstehe immer noch nicht ganz, was es kann.do
Anweisung in einer späteren Version behandelt wird).Befunge 93, 26 Bytes
Läuft auf unbestimmte Zeit.
Probieren Sie es online aus , obwohl die Ausgabe ein wenig wackelig wird und nach x = 256 zurückgeht. Vermutlich kann TIO keine Zeichen über U + 256 verarbeiten. Funktioniert einwandfrei unter https://www.bedroomlan.org/tools/befunge-playground (leider nur in Chrome. Mit Firefox werden Endlines aus irgendeinem Grund zur Laufzeit entfernt ...)
quelle
J , 17 Bytes
Ein Port der APL-Lösung von Adám.
Probieren Sie es online!
quelle
Pyth , 8 Bytes
Gibt die
n
Nummer in der Sequenz mit dem Index 0 zurück. Probieren Sie es online ausErklärung mit Beispiel für
n=5
:quelle
Perl 6 ,
3826 BytesVersuch es
Basierend auf Reverse Engineering der Python-Antwort von TFeld .
Versuch es
Erweitert
38 Byte (Sequenzgenerator):
Beachten Sie, dass dies den Vorteil hat, den Sie weitergeben können
*
, um die gesamte Sequenz abzurufen, oder einen Bereich übergeben können, um mehrere Werte effizienter zu generieren.26 Byte (direkte Berechnung):
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
Basierend auf Jonathan Allans Jelly-Ansatz (der wahrscheinlich darauf beruhte, dass OP die Frage mit einer anderen Definition der Sequenz bearbeitete), also 1-indiziert.
quelle
I
stattdessen¹
), aber die allgemeine Vorgehensweise und die Anzahl der Bytes sind genau die gleichen:;<LO>IÉ-
Konvex ,
109 BytesProbieren Sie es online!
Basierend auf Jonathan Allans Jelly-Ansatz (der wahrscheinlich darauf beruhte, dass OP die Frage mit einer anderen Definition der Sequenz bearbeitete). 1-indiziert.
Erläuterung:
quelle
Gelee , 6 Bytes
Gib die ersten
n
Zahlen zurück.Probieren Sie es online!
quelle