Nehmen wir an, ich bin zehn Schritte von meinem Ziel entfernt. Ich gehe dorthin und folge dem alten Sprichwort: "Zwei Schritte vorwärts und einen Schritt zurück". Ich mache zwei Schritte vorwärts und einen zurück, bis ich genau an meinem Ziel stehe. (Dies kann bedeuten, dass ich an meinem Ziel vorbeigehe und dorthin zurückkehre). Wie viele Schritte bin ich gegangen?
Natürlich bin ich vielleicht nicht 10 Schritte entfernt. Ich könnte 11 Schritte oder 100 entfernt sein. Ich könnte zehn Schritte messen und weiter hin und her gehen, um das Problem zu lösen, oder ... ich könnte einen Code schreiben!
- Schreiben Sie eine Funktion, um herauszufinden, wie viele Schritte erforderlich sind, um N Schritte in der folgenden Reihenfolge zu entfernen: zwei Schritte vorwärts, einen Schritt zurück.
- Angenommen, Sie haben bei Schritt 0 begonnen. Zählen Sie die "zwei Schritte vorwärts" als zwei Schritte, nicht als einen.
- Angenommen, alle Schritte haben eine einheitliche Länge.
- Es sollte die Anzahl der Schritte zurückgeben, die zuerst ausgeführt wurden, wenn Sie dieses Feld erreichen. (Zum Beispiel sind 10 Schritte entfernt 26 Schritte, aber Sie würden es in Schritt 30 erneut treffen). Wir interessieren uns für die 26.
- Verwenden Sie eine beliebige Sprache.
- Es sollte eine positive ganze Zahl als Eingabe akzeptieren. Dies ist der Zielschritt.
- Die kleinste Anzahl von Bytes gewinnt.
Beispiel:
Ich möchte 5 Schritte entfernt sein:
| | | | | | <- I'm at step 0, not yet on the grid.
| |X| | | | <- I take two steps forward, I'm on step 2: the count is 2
|X| | | | | <- I take one step back, I'm on step 1: the count is 3
| | |X| | | <- I take two steps forward, I'm on step 3: the count is 5
| |X| | | | <- I take one step back, I'm on step 2 again: the count is 6
| | | |X| | <- I take two steps forward, I'm on step 4: the count is 8
| | |X| | | <- I take one step back, I'm on step 3 again: the count is 9
| | | | |X| <- I take two steps forward, I'm on step 5: the count is 11
In diesem Fall wäre das Ergebnis der Funktion 11.
Beispielergebnisse:
1 => 3
5 => 11
9 => 23
10 => 26
11 => 29
100 => 296
1000 => 2996
10000 => 29996
100000 => 299996
Viel Spaß, Golfer!
code-golf
math
arithmetic
AJFaraday
quelle
quelle
Antworten:
Oase ,
54 BytesDank @Adnan 1 Byte gespart
Nicht zu verwechseln mit
23+3
Probieren Sie es online!
Wie?
quelle
b
.Python 2 , 18 Bytes
Probieren Sie es online aus.
Ich habe diesen Trick erst vor ein paar Tagen von xnor aufgegriffen …!
quelle
Python 2 , 20 Bytes
Probieren Sie es online!
quelle
Python 2 , 17 Bytes
Probieren Sie es online!
Ich fand den Ausdruck durch Brute-Force-Suche. Es berechnet effektiv
n+2*abs(n-2)
.quelle
Mehrsprachig: Java 8 / JavaScript / C # .NET,
161412 BytesProbieren Sie es online aus (Java 8).
Probieren Sie es online aus (JavaScript).
Probieren Sie es online aus (C # .NET) .
Port von @Lynns Python 2-Antwort. Stellen Sie also sicher, dass Sie die Antwort positiv bewerten.
Alte Antwort:
Mehrsprachig: Java 8 / JavaScript / C # .NET,
16 bis14 ByteProbieren Sie es online aus (Java 8).
Probieren Sie es online aus (JavaScript).
Versuchen Sie es online (C # .NET) .
Erläuterung:
quelle
n=>(--n*3||4)-1
es auch in JavaScript möglich ist (auch 14 Bytes).R , 20 Bytes
Probieren Sie es online!
Ich habe das Muster erst bemerkt, nachdem ich meine weniger elegante Lösung implementiert hatte.
quelle
05AB1E ,
87 BytesProbieren Sie es online!
-1 Byte danke an Emigna!
quelle
3*s≠i4-
speichert ein ByteOase , 5 Bytes
Erläuterung:
Probieren Sie es online!
quelle
Haskell , 15 Bytes
Probieren Sie es online!
quelle
Standard ML , 16 Bytes
Probieren Sie es online!
quelle
Dodos , 27 Bytes
Probieren Sie es online!
quelle
Gelee , 6 Bytes
Probieren Sie es online!
quelle
Prolog (SWI) , 21 Bytes
Probieren Sie es online!
quelle
MATL , 7 Bytes
Verwendet die
3*n-4*(n>1)
Formel. Multiplizieren Sie die Eingabe mit 3 (3*
), drücken Sie die Eingabe erneut (G
) und dekrementieren Sie sie (q
). Wenn das Ergebnis nicht Null ist (?
), subtrahieren Sie 4 vom Ergebnis (4-
).Probieren Sie es online!
quelle
2-|EG+
Gelee , 4 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
APL (Dyalog) , 9 Bytes
Probieren Sie es online!
quelle
C (gcc) , 20 Bytes
Probieren Sie es online!
quelle
f(n){n=n<2?3:n*3-4;}
f(n){n=n*3-4*(n>1);}
MachineCode auf x86_64,
343224 BytesBenötigt das
i
Flag für die Ganzzahlausgabe; Die Eingabe erfolgt durch manuelles Anhängen an den Code.Probieren Sie es online!
Ich habe diese 4 verschiedenen C-Funktionen durchgesehen, um das 24-Byte-MachineCode-Programm zu finden:
n+2*abs(n-2)
=8d47fe9931d029d08d0447c3
(24 Bytes)3*n-4*!!~-n
=8d047f31d2ffcf0f95c2c1e20229d0c3
(32 Bytes)n*3-4*(n>1)
=31d283ff028d047f0f9dc2c1e20229d0c3
(34 Bytes)n<2?3:n*3-4
=83ff01b8030000007e068d047f83e804c3
(34 Bytes)quelle
> <> ,
109 Bytes1 Byte gespeichert dank Jo King
Probieren Sie es online!
quelle
4 , 54 Bytes
Probieren Sie es online!
Wenn Sie die Eingabemethode in Frage stellen, besuchen Sie bitte zuerst. Die numerische Eingabe und Ausgabe kann als Zeichencode- Metapost angegeben werden.
quelle
4
hat nur Zeicheneingabe.Japt, 7 Bytes
Ein Port von Lynns Python-Lösung.
Versuch es
Alternative
Dies war eine unterhaltsame Alternative zu den geschlossenen Formellösungen, die leider ein Byte länger sind:
Versuch es
quelle
TI-Basic, 8 Bytes
quelle
05AB1E , 4 Bytes
Verwendet die Abs-Methode von Dennis 'Jelly-Antwort
Probieren Sie es online!
Erläuterung
quelle
65816 Maschinencode, 22 Bytes
Ich hätte diesen 65C02-Maschinencode leicht für 3 Bytes weniger machen können, tat es aber nicht, da die Registergröße auf dem 65C02 8-Bit anstelle von 16-Bit ist. Es würde funktionieren, aber es ist langweilig, weil man nur sehr niedrige Zahlen verwenden kann ;-)
xxd dump:
Demontage / Code Erklärung:
Testen Sie es auf einem 65816-kompatiblen Emulator:
quelle
SHELL , 28 Bytes
Tests:
Erklärung:
Die Formel lautet:
Nach der Abfolge von 3 Schritten "Zwei Schritte vorwärts und einen Schritt zurück" erhalten wir die arithmetische Reihe:
Zumindest oder beim ersten Zufall:
in einer Formel:
quelle
$((…))
) erledigt sind, ist dies wahrscheinlich nicht der Fall.F(){bc<<<$1*3-$(($1>1))*4}
arbeitet in zsh obwohl und entfernt 2 BytesPython 3 , 48 Bytes
Probieren Sie es online!
quelle
J 9 Bytes
Probieren Sie es online!
quelle
MATLAB / Octave , 15 Bytes
Probieren Sie es online!
Ein bisschen überrascht, dass es noch keine MATLAB-Antwort gibt. Gleicher Algorithmus,
3*n-4
wenn größer als 1 oder auf3*n
andere Weise.quelle
Brain-Flak , 38 Bytes
Probieren Sie es online!
Die erste Antwort, die ich sehe, um die Antwort zu berechnen, indem ich vor und zurück gehe.
quelle
W
d
, 7 BytesErläuterung
Auswertet
(a*3)-4*(a>1)
.Eine weitere mögliche Alternative
Auswertet
(a*3)-4*(1%a)
.quelle