Ihre heutige Herausforderung besteht darin, einen bestimmten Term einer Sequenz auszugeben, in der alle ganzen Zahlen aufgelistet sind. Die Folge ist wie folgt: Wenn wir eine 0-indizierte Funktion haben, die die Folge erzeugt f(n)
und ceil(x)
die Deckenfunktion ist, dann f(0) = 0
; abs(f(n)) = ceil(n/2)
; sign(f(n))
ist positiv, wenn n
und ceil(n/2)
entweder beide gerade oder beide ungerade sind.
Zum besseren Verständnis dieser Abfolge lauten die ersten Begriffe wie folgt: 0 1 -1 -2 2 3 -3 -4 4 5 -5 -6 6 7 -7...
Ihre Aufgabe ist es, ein Programm zu schreiben, das eine ganze Zahl annimmt n
und den n
dritten Term der Sequenz ausgibt . Die Eingabe kann nur 0- oder 1-indiziert sein.
Testfälle (0-indiziert):
0 => 0
1 => 1
2 => -1
3 => -2
4 => 2
5 => 3
Das ist Code-Golf , die wenigsten Bytes gewinnen!
Antworten:
SOGL V0.12 ,
86 BytesProbieren Sie es hier aus! oder versuchen Sie es mit den ersten paar Zahlen (etwas geändert, damit es funktioniert), die mit
0 indiziert sind.
Erläuterung:
Oder einfacher:
quelle
».»
bin am TelefonI».»⌡±
.Python 2 ,
2624 BytesProbieren Sie es online!
quelle
-~-(x&2)
dem letzten Nenner speichern .JavaScript (ES6), 18 Byte
1-indiziert.
Demo
Code-Snippet anzeigen
quelle
C 25 Bytes
quelle
f(n){n=~n/2*~-(n&2);}
gcc -O0
for x86-64 kompiliert @ cleblancs Version mit Anweisungen, die das Multiplikationsergebnis hinterlasseneax
( godbolt.org/g/dztKPV ), aber dann wäre es einex86-64 gcc -O0
Antwort, keine C-Antwort. Ich stimme C-Antworten, die mit aktivierter Optimierung brechen, nicht herauf, besonders nicht diesen blöden letzten Ausdruck als Rückgabewert-Mist. Selbst wenn gcc so funktioniert, funktioniert C nicht so .Haskell , 26 Bytes
Probieren Sie es online!
Die anderen Haskell-Antworten scheinen zu kompliziert zu sein… ^^
quelle
Pyke , 6 Bytes
Probieren Sie es hier aus!
Verwendet den Ansatz von dzaima ...
BeatsTies Jelly!Erläuterung
Die hex-codierten Bytes äquivalent wäre:
68 65 51 65 56 5F
.quelle
Gelee , 6 Bytes
Probieren Sie es online!
Verwendet den Algorithmus von dzaima.
-1 Danke an Jonathan Allan .
quelle
Python 2 , 21 Bytes
Probieren Sie es online!
quelle
Mathematica, 24 Bytes
-14 Bytes von @Misha Lavrov
quelle
Boole
und verwendenOddQ
, werden ungerade Zahlen in 1 und gerade Zahlen in 0 konvertiert, aber das brauchen Sie hier nicht: Potenzen von -1 geben Ihnen ohnehin die richtige Antwort für alle ungeraden Zahlen. So können Sie diesen Schritt auf(-1)^Tr@{#,s}
oder nur reduzieren(-1)^(#+s)
.Haskell ,
254342 BytesProbieren Sie es online!1-indiziert.
Bearbeiten: Die vorherige Version hatte die Zeichen in einer falschen Reihenfolge, dank @ Potato44 für den Hinweis. Behoben für 18 Bytes ...
Edit 2: Danke an BMO für -1 Byte!
quelle
Python 3 , 29 Bytes
Probieren Sie es online!
quelle
(-1)**(n%4>1)
ist eine ziemlich(1-(n&2))
Pyth , 9 Bytes
Probieren Sie es hier aus!
Verwendet den Ansatz von dzaima .
quelle
Haskell, 36 Bytes
Probieren Sie es online!
quelle
05AB1E , 6 Bytes
Probieren Sie es online!
Verwendet den Algorithmus von dzaima.
quelle
Batch, 29 Bytes
quelle
JavaScript (ES6), 18 Byte
0-indiziert.
quelle
Javascript, 17 Bytes
Code-Snippet anzeigen
Dieser ist 0 indiziert. Es ist ein rein bitweiser Trick.
quelle
Kubisch 23 Bytes
(1-indiziert)
Probieren Sie es online!
Die Hauptschwierigkeiten beim Schreiben von Code in Cubically sind:
Also diese Lösung berechnen
woher
/
bezeichnet eine ganzzahlige Division. Das braucht nur 1 temporäre Variable und die Konstanten 1 und 2.Erläuterung:
quelle
TI-Basic (TI-84 Plus CE), 20 Byte
Ein volles Programm, das gerne aufgerufen wird
5:prgmNAME
.TI-Basic ist eine Token-Sprache . Alle hier verwendeten Token bestehen aus einem Byte, mit Ausnahme von
remainder(
zwei.‾
Stellt das mit dem (-)Schlüssel eingegebene Token dar .Beispiele:
Erläuterung:
Gleiche Formel wie eine Y-Var-Funktion:
quelle
Gleichstrom , 16 Bytes
Ich bin mir sicher, dass es einen Weg gibt, 0..1 bis -1..1 in dc kürzer zu machen, aber vorerst keine Ideen.
Probieren Sie es online!
quelle
Java 8, 15 Bytes
EDIT: Ist Java wirklich die kürzeste der Nicht-Golf-Sprachen ?! o.Ô.
Erläuterung:
Probieren Sie es hier aus.
Ich werde die folgende Tabelle als Referenz für das verwenden, was passiert.
~n
ist gleich-n-1
.~n/2
ergibt sich die Reihenfolge0,-1,-1,-2,-2,-3,-3,-4,-4,-5,-5,...
n&2
ergibt entweder0
oder2
, in der Reihenfolge0,0,2,2,0,0,2,2,0,0,2,...
~-x
ist gleich(x-1)
, so ergibt~-(n&2)
(((n&2)-1)
) die Folge-1,-1,1,1,-1,-1,1,1,-1,-1,1,...
~n/2
und~-(n&2)
ergibt die richtige Sequenz, die in der Challenge abgefragt wurde:0,1,-1,-2,2,3,-3,-4,4,5,-5,...
Übersichtstabelle:
quelle
Brain-Flak ,
86747270 BytesProbieren Sie es online!
Erläuterung
Dieser Code besteht aus zwei Teilen. Der erste Teil
erledigt die Berechnung. Sie bestimmt,
ceil(n/2)
ob der Ausgang negiert werden soll oder nicht.Um zu erklären, wie es funktioniert, erkläre ich zunächst, wie man rechnen würde
ceil(n/2)
. Dies könnte mit dem folgenden Code erfolgenDies zählt von n jedes Mal herunter, wenn es eine nicht (
([{}]())
) für einen Zähler und fügt den Zähler zu einem Ergebnis hinzu. Da der Zähler die Hälfte der Zeit null ist, erhöhen wir nur jeden zweiten Lauf, beginnend mit dem ersten.Jetzt möchte ich auch das Vorzeichen unserer Ergebnisse berechnen. Dazu starten wir einen weiteren Zähler. Dieser Zähler ändert nur den Zustand, wenn der erste Zähler ausgeschaltet ist. Auf diese Weise erhalten wir das gewünschte Muster. Wir legen diese beiden Marken auf den Stapel, um sie später leichter bewegen zu können.
Nachdem wir diese Berechnung abgeschlossen haben, sieht unser Stapel folgendermaßen aus
In diesem zweiten Teil müssen wir also einige Arbeiten durchführen, um das gewünschte Ergebnis zu erzielen.
quelle
Perl 5 , 32 + 1 (
-p
) = 33 BytesProbieren Sie es online!
quelle
Proton , 23 Bytes
Probieren Sie es online!
Port of Halvards Lösung .
Proton , 23 Bytes
Probieren Sie es online!
Die Lösung von Port of Leaky .
Etwas protonischer, 24 Bytes:
quelle
QBIC ,
2726 BytesErläuterung
quelle
Clojure 122 Bytes
Ausführlich, auch beim Golfen. Ich werde hier für die Sympathie-Abstimmung gehen ... :-)
Golf gespielt:
Ungolfed:
quelle
Excel VBA 32-Bit,
3937 BytesAnonyme VBE-Direktfensterfunktion, die Eingaben von der Zelle
A1
und Ausgaben in das VBE-Direktfenster übernimmtBeschränkung auf 32-Bit, da
A^B
in 64-Bit nicht gültig (A ^B
so nah wie möglich)quelle
(-1)
und^[Int
benötigt?Julia 0,6 , 16 Bytes
Es ist nur die Java-Lösung, außer dass ich eine
÷
Ganzzahldivision benötige .Probieren Sie es online!
quelle