Zwei Schritte vor und einen Schritt zurück


14

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!


7
Hmm ... das kommt mir sehr bekannt vor.
Shaggy


@ Rod Hurra! Ich bin damit durchgekommen! ;)
AJFaraday

Ja, das sieht aus wie das, an das ich gedacht habe, @Rod.
Shaggy

@ Shaggy Rod hat seinen Kommentar ein wenig geändert. Der frühere bemerkte, dass die Schnecken / Brunnen-Frage nach der Anzahl der Iterationen fragt, aber dies fragt nach der zurückgelegten Distanz.
AJFaraday

Antworten:


5

Oase , 5 4 Bytes

Dank @Adnan 1 Byte gespart

3+23

Nicht zu verwechseln mit 23+3

Probieren Sie es online!

Wie?

      implicitly push a(n-1)
3     push 3
 +    sum and implicitly print
  2   a(2) = 2
   3  a(1) = 3

1
Sie können das weglassen b.
Adnan

Ich denke, Sie wollten mit 3 multiplizieren, nicht addieren.
Erik der Outgolfer

@EriktheOutgolfer Das Programm berechnet a (n) als (n-1) +3 .
Dennis




9

Mehrsprachig: Java 8 / JavaScript / C # .NET, 16 14 12 Bytes

n->3*n-1%n*4

Probieren Sie es online aus (Java 8).

n=>3*n-1%n*4

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 bis 14 Byte

n->n<2?3:n*3-4

Probieren Sie es online aus (Java 8).

n=>n<2?3:n*3-4

Probieren Sie es online aus (JavaScript).
Versuchen Sie es online (C # .NET) .

Erläuterung:

n->       // Method with integer as both parameter and return-type
  n<2?    //  If the input is 1:
   3      //   Return 3
  :       //  Else:
   n*3-4  //   Return the input multiplied by 3, and subtract 4

JavaScript-Polyglott, wenn Sie einen fetten Pfeil verwenden.
Shaggy

@Shaggy Hinzugefügt, sowie C # .NET :) Obwohl n=>(--n*3||4)-1es auch in JavaScript möglich ist (auch 14 Bytes).
Kevin Cruijssen

7

R , 20 Bytes

N=scan();3*N-4*(N>1)

Probieren Sie es online!

Ich habe das Muster erst bemerkt, nachdem ich meine weniger elegante Lösung implementiert hatte.


3
Herzlichen Glückwunsch zu 10k BTW!
Luis Mendo

4
@ LuisMendo danke! Ich glaube, mein einjähriges Jubiläum auf der Seite war vor ein paar Tagen, also war es eine gute Woche für mich, PPCG-weise.
Giuseppe

3
@ Giuseppe Ich kenne das Gefühl: 20k letzte Woche sowie 2. Jahrestag. :)
Kevin Cruijssen








4

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-).

3*Gq?4-

Probieren Sie es online!


6 Bytes, die Dennis 'Jelly-Antwort portieren2-|EG+
Giuseppe

4

Gelee , 4 Bytes

ạ2Ḥ+

Probieren Sie es online!

Wie es funktioniert

ạ2Ḥ+  Main link. Argument: n

ạ2    Absolute difference with 2; yield |n-2|.
  Ḥ   Unhalve/double; yield 2|n-2|.
   +  Add; yield 2|n-2|+n.



3

MachineCode auf x86_64, 34 32 24 Bytes

8d47fe9931d029d08d0447c3

Benötigt das iFlag 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)

Also, was genau ist diese Sprache?
Qwr

@qwr Eine einfache Beschreibung finden Sie in der README-Datei im Repository.
MD XF


2

4 , 54 Bytes

3.6010160303604047002020003100000180010202046000095024

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.


Warum wurde das abgelehnt?
Uriel

Weil die Antwort ein Viertel zu sein scheint, was kein gültiges Ergebnis ist. Soweit ich das beurteilen kann, löst es das Problem nicht.
AJFaraday

@AJFaraday verwendet Byte-Eingabe und -Ausgabe, die im Metakonsens gültig sind. Siehe die Erklärung im Eingabeabschnitt
Uriel

Gibt es Ressourcen zur Interpretation des Ergebnisses? Oder die Eingabe?
AJFaraday

1
@AJFaraday der Zeichencode des Ergebnisses ist die Antwort. Ich habe die Frage so bearbeitet, dass sie den relevanten Metapost enthält. 4hat nur Zeicheneingabe.
Uriel

2

Japt, 7 Bytes

Ein Port von Lynns Python-Lösung.

*3É%U*4

Versuch es


Alternative

Dies war eine unterhaltsame Alternative zu den geschlossenen Formellösungen, die leider ein Byte länger sind:

_+3}gN³²

Versuch es




2

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:

00000000: 7aa9 0000 aa89 0100 d004 8888 e824 c8e8  z............$..
00000010: 1ac0 0000 d0ef                           ......

Demontage / Code Erklärung:

; target is on the stack
  ply              7A                  ; pull target from stack
  lda #$0000       A9 00 00            ; set loop counter to 0
  tax              AA                  ; set step counter to 0
loop:
  bit #$0001       89 01 00            ; sets Z if loop counter is even
  bne odd          D0 04               ; if Z is not set, jump to 'odd'
  dey              88                  ; decrement target twice
  dey              88
  inx              E8                  ; increment step counter
  .byte $24        24                  ; BIT $xx opcode, effectively skips the next byte
odd:
  iny              C8                  ; increment target

  inx              E8                  ; increment step counter
  inc a            1A                  ; increment loop counter

  cpy #$0000       C0 00 00            ; sets zero flag, can be optimized maybe?
  bne loop         D0 EF               ; if Y is non-zero, loop

; result is in register X

Testen Sie es auf einem 65816-kompatiblen Emulator:

testen


1

SHELL , 28 Bytes

F(){ bc<<<$1*3-$(($1>1))*4;}

Tests:

F 1
3

F 2
2

F 3
5

F 4
8

F5
11

F 11
29

F 100
296

F 100000
299996

Erklärung:

Die Formel lautet:

if n == 1  ==> F(1) = 3
else F(n) = 3*n - 4

Nach der Abfolge von 3 Schritten "Zwei Schritte vorwärts und einen Schritt zurück" erhalten wir die arithmetische Reihe:

 +2  2 => 2  ( or 6 )
 -1  1 => 3
 -----------
 +2  3 => 5  ( or 9 )
 -1  2 => 6
 -----------
 +2  4 => 8  ( or 12 )
 -1  3 => 9
 -----------
 +2  5 => 11 ( or 15 )
 -1  4 => 12
 -----------
 +2  6 => 14 ( or 18 )
 -1  5 => 15 
 -----------
 +2  7 => 17 ( or 21 )
 -1  6 => 18

Zumindest oder beim ersten Zufall:

 1 => 3
 2 => 2
 3 => 5
 4 => 8
 5 => 11
 6 => 14

in einer Formel:

F(n) = 3*n - 4(n>1)     with n>1 is 1 or 0 (if n==1)

Bitte beschreiben Sie, welche Shell dies ist
qwr

Getestet auf Cygwin (CYGWIN_NT-10.0 2.3.1 (0.291 / 5/3) 2015-11-14 12:44 x86_64 Cygwin)
Ali IVSS

Kannst du es direkt in bc schreiben?
Qwr

Ich kenne mich nicht mit bc aus, aber da das Argument der Funktion ($ 1) mehrmals verwendet wird und einige Shell-spezifische Dinge (arithmetische Erweiterung, $((…))) erledigt sind, ist dies wahrscheinlich nicht der Fall.
2xsaiko

1
F(){bc<<<$1*3-$(($1>1))*4}arbeitet in zsh obwohl und entfernt 2 Bytes
2xsaiko

1

Python 3 , 48 Bytes

def a(x):
    if x!=1:
        return((3*x)-4)
    return(3)

Probieren Sie es online!


Gute Arbeit. Möglicherweise möchten Sie auch Code in den Abschnitt "Fußzeile" einfügen. Auf diese Weise können Sie Ihre Funktion testen, ohne Ihren
Golfeingang auszupolstern

@AJFaraday Die Fußzeile meines Posts oder meines Codes?
Nathan Dimmer

On Try It Online; Sie können eine Fußzeile hinzufügen, die mit Ihrem Code ausgeführt wird, jedoch nicht zur Bytelänge zählt. Dann zeigt die Ausgabe Ihren Code bei der Arbeit.
AJFaraday


@JoKing Kennen Sie einen guten Leitfaden für Lambda-Funktionen in Python? Ich verstehe wirklich nicht, wie die Syntax funktioniert.
Nathan Dimmer



1

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.

({ while not at 0
  <([()()]{})>()() take two steps forward, counting 2 steps
  {(<((){})>)()}{} take one step back, if not at 0, and add 1 step
}{}) remove the 0 and push step sum

1

W d , 7 Bytes

∂f⓻⑤pH¬

Erläuterung

3*1a<4*-

Auswertet (a*3)-4*(a>1).

Eine weitere mögliche Alternative

3*1am4*-

Auswertet (a*3)-4*(1%a).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.