Bei N wird der N-te Term dieser unendlichen Folge ausgegeben:
-1 2 -2 1 -3 4 -4 3 -5 6 -6 5 -7 8 -8 7 -9 10 -10 9 -11 12 -12 11 ... etc.
N kann 0-indiziert oder 1-indiziert sein, wie Sie es wünschen.
Wenn beispielsweise 0-indexiert dann Eingänge 0
, 1
, 2
, 3
, 4
sollte jeweilige Ausgänge erzeugen -1
, 2
, -2
, 1
, -3
.
Wenn dann die Eingänge 1-indexieren 1
, 2
, 3
, 4
, 5
sollte jeweilige Ausgänge erzeugen -1
, 2
, -2
, 1
, -3
.
Um klar zu sein, wird diese Sequenz erzeugt, indem die Sequenz positiver Ganzzahlen zweimal wiederholt wird
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 ...
und jedes Paar von ungeraden Zahlen neu anzuordnen, um die geraden Zahlen direkt darüber zu umgeben
1 2 2 1 3 4 4 3 5 6 6 5 7 8 8 7 9 10 10 9 11 12 12 11 ...
und schließlich jeden anderen Ausdruck zu negieren, beginnend mit dem ersten
-1 2 -2 1 -3 4 -4 3 -5 6 -6 5 -7 8 -8 7 -9 10 -10 9 -11 12 -12 11 ...
Der kürzeste Code in Bytes gewinnt.
1,1,2,2,3,3,4,4,...
aber hier ist es1,2,2,1,3,4,4,3,...
.Antworten:
Python 2 , 23 Bytes
Ungerade Eingaben ergeben ungefähr
n/2
gerade Eingaben-n/2
. Also habe ich angefangen-n/2+n%2*n
und von dort aus gezwickt.Probieren Sie es online!
quelle
Mathematica, 29 Bytes
Reine Funktion, die einen 1-indizierten Eingang verwendet. Abgesehen von den Wechselzeichen
(-1)^#
liegt die doppelte Sequenz nahe am Eingang, die Differenzen betragen zyklisch 1, 2, 1, -2. Es ist schön, dass#~GCD~4
, der größte gemeinsame Teiler der Eingabe4
, zyklisch 1, 2, 1, 4 ist; also ersetzen wir es einfach manuell4->-2
und nennen es einen Tag. Ich mag diesen Ansatz, weil er die meisten Mathematica-Befehle mit vielen Zeichen vermeidet.quelle
Pip ,
2422 BytesNimmt 1-indizierte Eingaben als Befehlszeilenargument. Versuchen Sie es online oder bestätigen Sie 1-20 .
Erläuterung
Beachten Sie, dass die Sequenz erhalten werden kann, indem drei andere Sequenzen kombiniert werden, eine mit Nullindex und die anderen mit einem Index:
0 0 0 0 2 2 2 2 4 4 4 4
=a//4*2
(0-indiziert);1 2 2 1 1 2 2 1 1 2 2 1
=aBA2|1
, wobeiBA
bitweises UND und|
logisches ODER (1-indiziert) ist;-1 1 -1 1 -1 1 -1 1 -1 1 -1 1
=(-1)**a
(1-indiziert).Wenn wir mit
a
1-indiziert beginnen, können wir zuerst die 1-indizierten Teile berechnen (den Ausdruck von links nach rechts lesen) und danna
für den 0-indizierten Teil dekrementieren . Mit der eingebauten Variablen erhaltenv=-1
wirUm zwei weitere Bytes zu rasieren, müssen wir einige Tricks zur Vorrangmanipulation anwenden. Wir können die inneren Klammern durch Ersetzen
+
durch+:
(entspricht+=
in vielen Sprachen) beseitigen . Jeder Compute-and-Assign-Operator hat eine sehr niedrige Priorität undaBA2|1+:--a//4*2
ist daher äquivalent zu(aBA2|1)+:(--a//4*2)
. Pip gibt eine Warnung zum Zuweisen zu etwas aus, das keine Variable ist, aber nur, wenn Warnungen aktiviert sind.Das einzige , was niedrigere Priorität ist als
:
heißtY
, die yank Operator * Es seines Operanden den Wert auf dem zuweist.y
Variable und leitet sie durch unverändert; so können wir die äußeren Klammern als auch durch den Wert zerren , anstatt das einklammern es beseitigen:YaBA2|1+:--a//4*2
.*
P
rint undO
utput haben die gleiche Priorität wieY
ank, sind aber hier nicht nützlich.quelle
Gelee ,
87 BytesHierfür wird der Algorithmus aus meiner Python-Antwort verwendet , der durch @GB erheblich verbessert wurde .
Probieren Sie es online!
Wie es funktioniert
quelle
¡
)Java 8, 19 Bytes
Java 7,
4737 BytesZum ersten Mal konkurriert Java (8) tatsächlich und ist kürzer als einige andere Antworten. Trotzdem sind die aktuellen Golfsprachen wie Jelly und andere nicht zu übertreffen (duhuh .. was für eine Überraschung ..>.>; P)
0-indizierter
Port aus @Xnors Python 2-Antwort .
-10 Bytes dank @GB
Probieren Sie es hier aus.
quelle
Jelly ,
151211 BytesProbieren Sie es online!
Wie es funktioniert
quelle
RProgN 2 ,
312522 BytesErklärt
Probieren Sie es online!
quelle
Ruby,
26 2318 Bytes0-basiert
-3 Bytes, die Greg Martin , Dennis und vielleicht jemand anderem die Idee -1 ^ n stehlen , dann -5 Bytes, die xnor die Idee n | 2 stehlen .
quelle
Gestapelt ,
3028 BytesProbieren Sie es online! Gibt eine Funktion zurück, die gemäß Metakonsens zulässig ist . . Nimmt die Eingabe vom oberen Rand des Stapels auf.
Verwenden Sie den gleichen Ansatz wie die Antwort von RProgN 2 .
Alternativ 46 Bytes. Probieren Sie es online! :
Dieser generiert den Bereich und wählt dann das entsprechende Mitglied aus und negiert es.
quelle
Python 2 ,
443327 BytesVielen Dank an @GB für das Abwerfen von 6 Bytes!
Probieren Sie es online!
quelle
05AB1E, 8 Bytes
Probieren Sie es online aus
Erläuterung
quelle
¹F(
scheint teuer für "wenn ungerade, negieren".n
, der an die Macht1/n
.Gelee ,
98 BytesProbieren Sie es online!
-1 danke an Dennis . Duh float umbauten.
Verwendet den Python 2-Ansatz von @ xnor.
BEARBEITEN : > _>
quelle
|2×Ḃ+H~$
Speichert ein Byte. tio.run/nexus/jelly#AR0A4v//fDLDl@G4gitIfiT/…CJam , 16 Bytes
1-basierte Eingabe.
Probieren Sie es online!
Erläuterung
Hier ist eine Aufschlüsselung des Codes mit den Werten auf dem Stapel für jede Eingabe von
1
bis4
. Die ersten paar Befehle wirken sich nur auf die zwei niedrigstwertigen Bits aus,n-1
also4
wird dieses Zeug nur zyklisch wiederholt, wobei die Ergebnisse aufgrund der Halbierung um 2 erhöht werden.quelle
Perl 6 ,
55 27 2422 Bytes(Inspiriert von der Haskell-
zipWith
Antwort)Probieren Sie es aus
(Inspiriert von mehreren Antworten)
Probieren Sie es aus
Versuch es
Versuch es
Erweitert:
(Alle basieren auf 0)
quelle
Haskell ,
3736 BytesProbieren Sie es online! Dies ist eine anonyme Funktion, die eine Zahl
n
als Argument verwendet und das 0-indizierten
Element der Sequenz zurückgibt .quelle
Haskell, 56 Bytes
0-indiziert
quelle
Perl 5 47 + 1 (für Flag) = 48 Bytes
Alte Vorlage 82 Bytes
Laufen Sie wie folgt:
quelle
print +((
indem Sie das Finale verwenden und entfernen)
. Und zwei weitere mitsay
und-E
. Und noch eins, indem man es($_%4&1||-1)
anstelle des Ternären tut .JavaScript (ES7), 28 Byte
1-indiziert. Ich habe mir noch keine anderen Antworten angesehen, daher weiß ich nicht, ob dies der beste Algorithmus ist, aber ich vermute nicht.
quelle
JavaScript,
2822 BytesVielen Dank an @ETHproductions für das Golfen mit 6 Bytes
Probieren Sie es online!
quelle
f=x=>x%2?~x>>1:x/2+x%4-1
funktionieren?Gleichstrom , 98 Bytes
Meine Güte, dies ist die längste Antwort hier, hauptsächlich, weil ich den Weg gegangen bin, den Absolutwert jedes Elements der Sequenz nacheinander auf der Grundlage der folgenden rekursiven Formel zu generieren:
dann Ausgeben
(-1)^n * a_n
, anstatt dasn
'te Element direkt zu berechnen . Wie auch immer, dies ist1
indiziert.Probieren Sie es online!
quelle
R, 38 Bytes
Erläuterung
quelle
TI-Basic (TI-84 Plus CE), 31 Byte
TI-Basic ist eine tokenisierte Sprache und jedes hier verwendete Token ist ein Byte, außer
remainder(
zwei.Dies verwendet die 1-indizierte Version.
Erläuterung:
Es gibt ein Muster, das alle vier Zahlen wiederholt. In der 1-indizierten Version ist dies: - (x + 1) / 2, (x + 1) / 2, - (x + 1) / 2, (x-1) / 2 für den Eingabewert x. Dies kann als stückweise definierte Funktion dargestellt werden.
f (x) = - (x + 1) / 2, wenn x ≤ 1 mod 4 ist; (x + 1) / 2, wenn x ≤ 2 mod 4 ist; - (x + 1) / 2, wenn x ≤ 3 mod 4 ist; (x-1) / 2, wenn x ≤ 0 mod 4 ist
Da die Teile "x ≡ 1 mod 4" und "x ≡ 3 mod 4" gleich sind, können wir sie zu "x ≡ 1 mod 2" kombinieren.
Nun sind stückweise folgende Funktionen möglich:
f (x) = - (x + 1) / 2, wenn x ≤ 1 mod 2 ist; (x + 2) / 2, wenn x ≤ 2 mod 4 ist; (x-2) / 2, wenn x ≤ 0 mod 4 ist
Hier beginne ich, es in tatsächliche Befehle aufzuteilen. Da der Wert für gerade Indizes positiv und für ungerade Indizes negativ ist, können wir (-1) ^ x verwenden. In TI-Basic ist
i^(2X
(5 Bytes) jedoch kürzer als(-1)^Ans
(6 Bytes). Beachten Sie, dass Klammern aufgrund der Reihenfolge der Operationen erforderlich sind.Nachdem wir nun die Möglichkeit haben, die ungeraden Eingänge aus dem Weg zu räumen, gehen wir zu den Mods über (und fügen die Negierung später wieder hinzu). Ich habe den Fall einer ungeraden Eingabe zur Standardeinstellung gemacht, also fangen wir mit an
.5(Ans+1)
.Um den Fall einer geraden Eingabe zu beheben, fügen Sie einfach eine zur Zahl in Klammern hinzu, jedoch nur, wenn x ≡ 0 mod 2 ist. Dies könnte als
.5(Ans+1+remainder(Ans+1,2))
oder dargestellt werden.5(Ans+1+not(remainder(Ans,2)))
, aber sie haben die gleiche Byteanzahl, sodass es keine Rolle spielt, welche.Um den Fall der Eingabe eines Vielfachen von 4 zu beheben, müssen wir 3 von der Zahl in Klammern subtrahieren, aber auch eine weitere 1, da alle Vielfachen von 4 gerade sind, was eine aus unserem vorherigen Schritt hinzufügen würde
.5(Ans+1+remainder(Ans+1,2)-4not(remainder(Ans,4)))
.Wenden Sie sich nun bis zum Ende an den vorzeichenbestimmenden Teil, um das vollständige Programm zu erhalten.
quelle
Befunge 93, 25 Bytes
Null indexiert
Probieren Sie es online!
Die Nummer ist gegeben durch
((2(n / 4) + 1) + !!((n % 4) % 3)) * (2(n % 2) - 1)
quelle
QBIC , 53 Bytes
Erläuterung:
quelle
Wise , 19 Bytes
Probieren Sie es online!
Dies ist nur eine Antwort von @Dennis 'Jelly an Wise.
quelle
Q, 52 Bytes
0 indizierte Lösung.
quelle