Due passi avanti e un passo indietro


15

Diciamo che sono a dieci passi dalla mia destinazione. Cammino lì seguendo il vecchio detto "Due passi avanti e un passo indietro". Faccio due passi avanti, uno indietro, finché non mi trovo esattamente sulla mia destinazione. (Ciò potrebbe comportare il superamento della mia destinazione e il ritorno ad essa). Quanti passi ho fatto?

Certo, potrei non essere a 10 passi di distanza. Potrei essere a 11 passi di distanza, o 100. Potrei misurare dieci passi e continuare a camminare avanti e indietro per risolvere il problema, o ... Potrei scrivere del codice!

  • Scrivi una funzione per capire quanti passaggi sono necessari per ottenere N passi, nella sequenza: due passi avanti, un passo indietro.
  • Supponiamo che tu abbia iniziato al passaggio 0. Conta i "due passi avanti" come due passi, non uno.
  • Supponiamo che tutti i passaggi abbiano una lunghezza uniforme.
  • Dovrebbe restituire il numero di passi effettuati per la prima volta quando si raggiunge quello spazio. (Ad esempio, a 10 passi di distanza bastano 26 passi, ma lo avresti colpito di nuovo al passaggio 30). Siamo interessati al 26.
  • Usa la lingua che preferisci.
  • Dovrebbe accettare qualsiasi numero intero positivo come input. Questo rappresenta il passo target.
  • Vince il minor numero di byte.

Esempio:

Voglio fare 5 passi di distanza:

| | | | | | <- 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 questo caso, il risultato della funzione sarebbe 11.

Risultati di esempio:

1      =>  3
5      =>  11
9      =>  23
10     =>  26
11     =>  29
100    =>  296
1000   =>  2996
10000  =>  29996
100000 =>  299996

Buon divertimento, golfisti!


7
Hmm ... sembra molto familiare.
Shaggy,


@Rod Hooray! Me ne sono andato! ;)
AJFaraday,

Sì, sembra quello a cui stavo pensando, @Rod.
Shaggy,

@Shaggy Rod ha cambiato un po 'il suo commento. Il precedente ha osservato che la domanda lumache / pozzi richiede il numero di iterazioni, ma questo richiede la distanza percorsa.
AJFaraday,

Risposte:


5

Oasi , 5 4 byte

1 byte salvato grazie a @Adnan

3+23

Da non confondere 23+3

Provalo online!

Come?

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

1
Puoi tralasciare il b.
Adnan,

Penso che volevi moltiplicare per 3, non aggiungerlo.
Erik the Outgolfer,

@EriktheOutgolfer Il programma calcola a (n) come (n-1) +3 .
Dennis,




9

Polyglot: Java 8 / JavaScript / C # .NET, 16 14 12 byte

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

Provalo online (Java 8).

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

Provalo online (JavaScript).
Provalo online (C # .NET) .

Porto di @Lynn Python 2 , quindi assicurati di votare la sua risposta.


Vecchia risposta:

Polyglot: Java 8 / JavaScript / C # .NET, 16 14 byte

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

Provalo online (Java 8).

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

Provalo online (JavaScript).
Provalo online (C # .NET) .

Spiegazione:

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 poliglotta, se si utilizza una freccia grassa.
Shaggy,

@Shaggy Aggiunto, oltre a C # .NET :) Anche se n=>(--n*3||4)-1è possibile anche in JavaScript (anche 14 byte).
Kevin Cruijssen,

7

R , 20 byte

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

Provalo online!

Non ho notato lo schema fino a quando non ho implementato la mia soluzione meno elegante.


3
Congratulazioni per 10k BTW!
Luis Mendo,

4
@LuisMendo grazie! Penso che il mio anniversario di un anno sul sito sia stato un paio di giorni fa, quindi è stata una buona settimana per me, per quanto riguarda PPCG.
Giuseppe,

3
@Giuseppe Conosco la sensazione: 20k la scorsa settimana, così come il 2 ° anniversario. :)
Kevin Cruijssen,


6

Oasi , 5 byte

¹y4-3

Spiegazione:

    3  defines f(1) = 3
¹y4-   defines f(n) as:
¹      push input
 y     triple
  4-   subtract four

Provalo online!







4

MATL , 7 byte

Usa la 3*n-4*(n>1)formula. Moltiplicare l'input per 3 ( 3*), premere di nuovo input ( G) e diminuirlo ( q). Se il risultato non è zero ( ?), sottrarre 4 dal risultato ( 4-).

3*Gq?4-

Provalo online!


6 byte porting risposta Delly 'Jelly2-|EG+
Giuseppe

4

Gelatina , 4 byte

ạ2Ḥ+

Provalo online!

Come funziona

ạ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 su x86_64, 34 32 24 byte

8d47fe9931d029d08d0447c3

Richiede il iflag per l'output intero; l'input viene preso tramite l'aggiunta manuale al codice.

Provalo online!


Ho esaminato queste 4 diverse funzioni C per trovare il programma MachineCode a 24 byte:

  • n+2*abs(n-2)= 8d47fe9931d029d08d0447c3(24 byte)
  • 3*n-4*!!~-n= 8d047f31d2ffcf0f95c2c1e20229d0c3(32 byte)
  • n*3-4*(n>1)= 31d283ff028d047f0f9dc2c1e20229d0c3(34 byte)
  • n<2?3:n*3-4= 83ff01b8030000007e068d047f83e804c3(34 byte)

quindi che cos'è esattamente questa lingua?
qwr,

@qwr Dai un'occhiata al README nel repository per una semplice descrizione.
MD XF,


2

4 , 54 byte

3.6010160303604047002020003100000180010202046000095024

Provalo online!

Se si mette in dubbio il metodo di input, visitare prima l' input numerico e l'output può essere indicato come meta post con codice carattere .


Perché questo è stato downvoted?
Uriel,

Perché la risposta sembra essere un quarto, che non è un risultato valido. Per quanto ne so, non risolve il problema.
AJFaraday,

@AJFaraday utilizza input e output byte, che è valido per meta consenso. vedere la spiegazione all'interno della sezione input
Uriel

Qualche risorsa su come interpretare il risultato? O l'ingresso?
AJFaraday,

1
@AJFaraday il codice char del risultato è la risposta. Ho modificato la domanda per includere il meta post pertinente. 4ha solo input char.
Uriel,

2

Japt, 7 byte

Una porta della soluzione Python di Lynn.

*3É%U*4

Provalo


Alternativa

Questa è stata una divertente alternativa alle soluzioni a formula chiusa che sfortunatamente è un byte più lungo:

_+3}gN³²

Provalo




2

65816 machine code, 22 bytes

Avrei potuto rendere questo codice macchina 65C02 facilmente per 3 byte in meno, ma non lo avevo fatto, poiché la dimensione del registro sul 65C02 è di 8 bit anziché 16 bit. Funzionerebbe, ma è noioso perché puoi usare solo numeri molto bassi ;-)

xxd dump:

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

smontaggio / spiegazione del codice:

; 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

Test su un emulatore compatibile 65816:

testing


1

SHELL , 28 byte

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

Test:

F 1
3

F 2
2

F 3
5

F 4
8

F5
11

F 11
29

F 100
296

F 100000
299996

Spiegazione :

La formula è:

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

seguendo la sequenza di 3 passi "Due passi avanti e un passo indietro", avremo la serie aritmetica:

 +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

Come minimo, o prima coincidenza:

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

in una formula:

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

please describe which shell this is
qwr

tested on Cygwin ( CYGWIN_NT-10.0 2.3.1(0.291/5/3) 2015-11-14 12:44 x86_64 Cygwin)
Ali ISSA

can you write it in bc directly?
qwr

I'm not familiar with bc, but since the argument of the function ($1) is used several times and some shell-specific stuff (arithmetic expansion, $((…))) is done, probably not.
2xsaiko

1
F(){bc<<<$1*3-$(($1>1))*4} works in zsh though and removes 2 bytes
2xsaiko

1

Python 3, 48 bytes

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

Try It Online!


Nice work. You might want to put some code in the “Footer” section, too. That way you can test your function without padding out your golf entry...
AJFaraday

@AJFaraday The footer of my post or of my code?
Nathan Dimmer

On Try It Online; you can add a footer which runs with your code but doesn’t count towards the byte length. Then the output will show your code at work.
AJFaraday


@JoKing Do you know of a good guide to lambda functions in Python? I really don't understand how the syntax works.
Nathan Dimmer



1

Brain-Flak, 38 bytes

({<([()()]{})>()(){(<((){})>)()}{}}{})

Try it online!

The first answer I see to calculate the answer by stepping back and forth.

({ 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

♦óÖ╣░Θ$

Explanation

3*1a<4*-

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

Another possible alternative

3*1am4*-

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.