TI-Basic (TI-84 Plus CE), 31 Byte
.5(Ans+1+remainder(Ans+1,2)-4not(remainder(Ans,4)))i^(2Ans
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.