Eingang:
Ganzzahl, n
die >=0
oder ist >=1
( f(0)
ist optional)
Ausgabe:
Die n
'te Nummer in der Folge unten ODER die Folge bis einschließlich der n
' ten Nummer.
Reihenfolge:
(0),1,-1,-3,0,5,-1,-7,0,9,-1,-11,0,13,-1,-15,0,17,-1,-19,0,21,-1,-23,0,25,-1,-27,0,29,-1,-31,0,33,-1,-35,0,37,-1,-39,0,41,-1,-43,0,45,-1,-47,0,49,-1,-51,0,53,-1,-55,0,57,-1,-59,0,61,-1,-63,0,65,-1,-67,0,69,-1,-71,0,73,-1,-75,0,77,-1,-79,0,81,-1,-83,0,85,-1,-87,0,89,-1,-91,0,93,-1,-95,0,97,-1,-99
Wie ist diese Sequenz aufgebaut?
f(n=0) = 0
(optional)
f(n=1) = f(0) + n
oder f(n=1) = 1
f(n=2) = f(1) - n
f(n=3) = f(2) * n
f(n=4) = f(3) / n
f(n=5) = f(4) + n
etc.
Oder in Pseudocode:
function f(integer n){
Integer result = 0
Integer i = 1
Loop as long as i is smaller than or equal to n
{
if i modulo-4 is 1:
result = result plus i
if i modulo-4 is 2 instead:
result = result minus i
if i modulo-4 is 3 instead:
result = result multiplied with i
if i modulo-4 is 0 instead:
result = result integer/floor-divided with i
i = i plus 1
}
return result
}
Wie Sie vielleicht bemerkt haben, enthält die Sequenz zwei Muster:
0, ,-1, ,0, ,-1, ,0, ,-1, ,0, ,-1, ,0, ,-1, ,...
,1, ,-3, ,5, ,-7, ,9, ,-11, ,13, ,-15, ,17, ,-19,...
Alle anderen Ansätze, die zur gleichen Reihenfolge führen, sind natürlich auch völlig in Ordnung.
Herausforderungsregeln:
- 0-indizierte und 1-indizierte Eingaben führen zu demselben Ergebnis (daher
f(0)
ist das optional für 0-indizierte Eingaben, wenn Sie es einschließen möchten). - Sie dürfen die
n
'te Nummer dieser Sequenz ausgeben . Oder die gesamte Sequenz bis einschließlich dern
'ten Nummer. (f(5)
Kann also entweder zu5
oder führen0,1,-1,-3,0,5
.)- Wenn Sie die Sequenz bis einschließlich der
n
'ten Zahl ausgeben möchten, ist das Ausgabeformat flexibel. Kann eine durch eine Liste / ein Array, ein Komma / ein Leerzeichen / eine durch eine neue Zeile getrennte Zeichenfolge sein oder nach STDOUT usw. gedruckt werden.
- Wenn Sie die Sequenz bis einschließlich der
- Die Division (
/
) ist eine Ganzzahl- / Bodendivision, die gegen 0 rundet (nicht gegen negative Unendlichkeit, wie dies in einigen Sprachen der Fall ist).
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 ggf. auch eine Erklärung hinzu.
Zusätzliche Testfälle oben n=100
:
Input Output
1000 0
100000 0
123 -123
1234 -1
12345 12345
123456 0
Antworten:
JavaScript (ES6), 19 Byte
Probieren Sie es online!
Beweis
Nehmen wir an , dass wir die folgenden Beziehungen für einige haben n Vielfachen von 4. Diese Beziehungen trivialerweise für die ersten Glieder der Folge überprüft werden.
Und sei N = n + 4 . Dann per definitionem:
Was durch mathematische Induktion beweist, dass die Beziehungen für ein beliebiges N- Vielfaches von 4 gelten .
quelle
n%4
danach so zu ändern, dass es mit Zahlen größer als 32-Bit funktioniert.05AB1E , 8 Bytes
Gibt das aus
nth
Nummer ausProbieren Sie es online!
05AB1E , 14 Bytes
Gibt eine Liste von Zahlen bis N unter Verwendung der Muster in der Sequenz aus
Probieren Sie es online!
Erläuterung
Beispiel mit N = 7
quelle
Python 2 , 25 Bytes
Antwort von Port of Arnauld:
Probieren Sie es online!
Naive Lösungen:
Python 3 ,
5049 BytesProbieren Sie es online!
Python 2 ,
78777658575352 BytesProbieren Sie es online!
Habe ein paar Bytes verwendet
int
, weil sich der Python-Stock teilt und nicht in Richtung0
, wie in der Frage.quelle
J , 12 Bytes
Antwort von Port of Arnauld:
Probieren Sie es online!
J , 28 Bytes
Naive Lösung:
Gibt die n-te Zahl aus
Probieren Sie es online!
quelle
TIS
-n
2
1
, 123 BytesGibt die
n
th Zahl für aus0 <= n <= 999
. (Die Obergrenze ist auf Spracheinschränkungen zurückzuführen.)Probieren Sie es online!
TIS
-n
2
1
, 124 BytesGibt die
n
th Zahl für aus0 <= n <= 999
. (Die Obergrenze ist auf Spracheinschränkungen zurückzuführen.) Esn
können mehrere durch Leerzeichen getrennte Zeichen angegeben werden.Probieren Sie es online!
TIS
-n
3
1
, 192 BytesGibt die Werte für
0..n
aus0 <= n <= 999
. (Die Obergrenze ist auf Spracheinschränkungen zurückzuführen.)Probieren Sie es online!
Alle verwenden numerische E / A (die
-n
Flag). Die ersten beiden Lösungen verwenden zwei Rechenknoten, die übereinander positioniert sind. Der dritte hat einen Stapel von drei Knoten.Bei den ersten beiden Lösungen liest der obere Knoten die Eingabe, sendet die ursprüngliche Zahl weiter und subtrahiert dann wiederholt 4, bis wir negativ werden, und addiert dann 5 zum Index für unsere Sprungtabelle. Dies ist äquivalent zu
(n % 4) + 1
.Die dritte Lösung hat diese Aufgabe auf zwei Knoten aufgeteilt. Die oberste wiederholt nur das Limit bis zum Ende der Zeit, und der mittlere Knoten zählt parallel den Index (verglichen mit diesem Limit) und das Modulo wie oben.
Der untere Knoten aller drei Lösungen ist derselbe. Es hat einen Sprungtisch, und hier geschieht die Magie. Wir speichern die Zahl wieder in
ACC
, dannJRO
(wahrscheinlich J ump R Elativ O ffset) nach vorne durch1
,2
,3
, oder4
, je nachdem , was der Knoten oben sagt.Rückwärts arbeiten:
4
wird a )NEG
aßenACC
und b )ACC
für die Ausgabe nach unten bewegen .3
gesetzt wird ,1
inACC
, führt dann die Schritte4
a und4
b .2
springt direkt zu Schritt4
b .1
wirdSUB
TraktACC
aus selbst (effektiv NullstellungACC
), dann Schritt tun2
, was springt4
b .quelle
C (gcc) , 62 Bytes
Probieren Sie es online!
quelle
f(n){n=n%2>0?n*(2-n%4):n%4/-2;}
Ich würde es jedoch als zweite Antwort hinzufügen, da ich auch Ihren rekursiven Ansatz mag. :)Gelee , 8 Bytes
Probieren Sie es online!
-1 danke an Lynn .
Was andere tun (Port von Arnauld's Lösung), unterstützt
0
.Gelee , 17 Bytes
Probieren Sie es online!
0
wird nicht unterstützt.quelle
Java (JDK 10) , 25 Byte
Probieren Sie es online!
Kürzer als der Konkurrentenalgorithmus in anderen Sprachen mit 28 Bytes
Probieren Sie es online!
quelle
Netzhaut , 46 Bytes
Probieren Sie es online! Erläuterung:
In Unary konvertieren.
Zurück in Dezimalzahl konvertieren, aber
n%4+1
Unterstreichungen lassen.In dem Fall, dass das 4 ist, ist das Ergebnis
-n
.Fall 3:
-1
Fall 2:
n
Fall 1:
0
quelle
Haskell , 50 Bytes
Probieren Sie es online!
Arnauld's Lösung, portiert nach Haskell, ist 23 Bytes:
quelle
APL (Dyalog Classic) ,
2212 BytesDurch die Äußerungen von Erik the Outgolfer wurden enorme 10 Byte eingespart. Vielen Dank!
Probieren Sie es online!
Gibt die n-te Zahl aus
Ich kenne APL nicht, ich habe nur versucht, meinen J-Port von Arnauld's Lösung in Dyalog APL zum Laufen zu bringen.
quelle
(0,⍵,¯1,-⍵)
mit(0⍵¯1,-⍵)
. 2) Sie können das entfernen,1+
indem Sie annehmen, dass die⎕IO
Systemvariable zugewiesen ist0
(ja, das ist erlaubt). 3) Wir zählen dasf←
Teil normalerweise nicht, wenn wir Funktionen einreichen. 4) Sie können die⊃
Funktion anstelle der[]
Indizierung verwenden. Alle zusammen ergeben folgendes:⎕IO←0
(nicht mitzählen){(4|⍵)⊃0⍵¯1,-⍵}
4∘|⊃0,⊢,¯1,-
.4∘|⊃0,⊢,¯1,-
genau so aus, wie meine J-Lösung4&|{0,],_1,-
in APL aussehen würde. Danke noch einmal!Cubix ,
20 bis19 BytesProbieren Sie es online!
Portiert den gleichen Ansatz zu Cubix.
Auf einem Würfel:
Das erste Bit erstellt
^Iu:n>s1ns:u0s
den Stapel und3at
kopiert dann das entsprechende Element nach TOS. Anschließend wird das ProgrammO
ausgegeben und@
beendet.quelle
Leerzeichen,
8483 BytesBuchstaben
S
(Leerzeichen),T
(Tabulator) und (Zeilenvorschub) werdenN
nur als Hervorhebungen hinzugefügt.[..._some_action]
nur als Erklärung hinzugefügt.Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Port von @Arnauld 's JavaScript Antwort .
Erklärung (Beispieleingabe
n=7
):Stopps mit Fehler: Exit nicht definiert.
quelle