Dua langkah maju dan satu langkah mundur


15

Katakanlah saya berjarak sepuluh langkah dari tujuan saya. Saya berjalan di sana mengikuti pepatah lama, "Dua langkah maju dan satu langkah mundur". Saya mengambil dua langkah maju, satu mundur, sampai saya berdiri tepat di tempat tujuan saya. (Ini mungkin melibatkan melangkah melewati tujuan saya, dan kembali ke sana). Berapa langkah saya berjalan?

Tentu saja, saya mungkin tidak 10 langkah lagi. Saya mungkin 11 langkah jauhnya, atau 100. Saya bisa mengukur sepuluh langkah, dan terus berjalan bolak-balik untuk menyelesaikan masalah, atau ... Saya bisa menulis beberapa kode!

  • Tulis fungsi untuk menghitung berapa langkah yang diperlukan untuk mendapatkan N langkah menjauh, secara berurutan: dua langkah maju, satu langkah mundur.
  • Asumsikan Anda sudah mulai pada langkah 0. Hitung "dua langkah ke depan" sebagai dua langkah, bukan satu.
  • Asumsikan semua langkah adalah panjang yang seragam.
  • Ini harus mengembalikan jumlah langkah yang pertama kali diambil ketika Anda mencapai ruang itu. (Misalnya, 10 langkah jauhnya membutuhkan 26 langkah, tetapi Anda akan menekannya lagi pada langkah 30). Kami tertarik pada 26.
  • Gunakan bahasa apa pun yang Anda suka.
  • Ini harus menerima bilangan bulat positif sebagai masukan. Ini mewakili langkah target.
  • Jumlah byte terkecil menang.

Contoh:

Saya ingin mendapatkan 5 langkah:

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

Dalam hal ini, hasil dari fungsinya adalah 11.

Contoh hasil:

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

Selamat bersenang-senang, pegolf!


7
Hmm ... ini terasa sangat akrab.
Shaggy


@Rod Hore! Saya lolos begitu saja! ;)
AJFaraday

Ya, sepertinya itu yang saya pikirkan, @Rod.
Shaggy

@Shaggy Rod sedikit mengubah komentarnya. Yang sebelumnya mencatat bahwa pertanyaan siput / sumur menanyakan jumlah iterasi, tetapi ini menanyakan jarak yang ditempuh.
AJFaraday

Jawaban:


5

Oasis , 5 4 byte

1 byte disimpan berkat @Adnan

3+23

Jangan bingung dengan 23+3

Cobalah online!

Bagaimana?

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

1
Anda dapat meninggalkan b.
Adnan

Saya pikir Anda bermaksud mengalikan dengan 3, bukan menambahkannya.
Erik the Outgolfer

@EriktheOutgolfer Program ini menghitung a (n) sebagai (n-1) +3 .
Dennis




9

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

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

Cobalah online (Java 8).

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

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

Port of @Lynn 's Python 2 answer , jadi pastikan untuk meningkatkan jawabannya.


Jawaban lama:

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

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

Cobalah online (Java 8).

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

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

Penjelasan:

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 polyglot, jika Anda menggunakan panah gemuk.
Shaggy

@Shaggy Added, serta C # .NET :) Meskipun n=>(--n*3||4)-1juga dimungkinkan dalam JavaScript (juga 14 byte).
Kevin Cruijssen

7

R , 20 byte

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

Cobalah online!

Tidak menyadari polanya sampai setelah saya menerapkan solusi yang kurang elegan.


3
Selamat atas 10k BTW!
Luis Mendo

4
@LuisMendo terima kasih! Saya pikir peringatan satu tahun saya di situs itu beberapa hari yang lalu, jadi ini minggu yang baik bagi saya, PPCG-bijaksana.
Giuseppe

3
@Giuseppe Saya tahu perasaan: 20rb minggu lalu, dan juga tahun ke-2. :)
Kevin Cruijssen








4

MATL , 7 byte

Menggunakan 3*n-4*(n>1)formula. Lipat gandakan input dengan 3 ( 3*), tekan input lagi ( G) dan kurangi itu ( q). Jika hasilnya bukan nol ( ?) maka kurangi 4 dari hasil ( 4-).

3*Gq?4-

Cobalah online!


6 byte porting jawaban Dennis 'Jelly2-|EG+
Giuseppe

4

Jelly , 4 byte

ạ2Ḥ+

Cobalah online!

Bagaimana itu bekerja

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

8d47fe9931d029d08d0447c3

Membutuhkan iflag untuk output integer; input diambil melalui menambahkan kode secara manual.

Cobalah online!


Saya membaca 4 fungsi C yang berbeda ini untuk menemukan program MachineCode 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)

jadi apa sebenarnya bahasa ini?
qwr

@ qw Periksa README di repositori untuk deskripsi sederhana.
MD XF


2

4 , 54 byte

3.6010160303604047002020003100000180010202046000095024

Cobalah online!

Jika Anda mempertanyakan metode input, silakan kunjungi terlebih dahulu input numerik dan output dapat diberikan sebagai posting meta kode karakter .


Mengapa ini diturunkan?
Uriel

Karena jawabannya tampaknya seperempat, yang bukan hasil yang valid. Sejauh yang saya tahu, itu tidak menyelesaikan masalah.
AJFaraday

@AJFaraday menggunakan input dan output byte, yang valid dengan konsensus meta. lihat penjelasan di dalam bagian input
Uriel

Adakah sumber tentang cara menginterpretasikan hasil? Atau inputnya?
AJFaraday

1
@ AJFaraday kode char dari hasilnya adalah jawabannya. Saya telah mengedit pertanyaan untuk memasukkan meta postingan yang relevan. 4hanya memiliki input char.
Uriel

2

Japt, 7 byte

Port solusi Lynn dari Python.

*3É%U*4

Cobalah


Alternatif

Ini adalah alternatif yang menyenangkan untuk solusi formula tertutup yang, sayangnya, lebih lama satu byte:

_+3}gN³²

Cobalah




2

65816 kode mesin, 22 byte

Saya bisa membuat kode mesin 65C02 ini dengan mudah untuk 3 byte lebih sedikit, tetapi tidak, karena ukuran register pada 65C02 adalah 8-bit, bukan 16-bit. Ini akan berhasil, tetapi itu membosankan karena Anda hanya dapat menggunakan angka yang sangat rendah ;-)

xxd dump:

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

penjelasan pembongkaran / kode:

; 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

Mengujinya pada emulator 65816 yang kompatibel:

pengujian


1

SHELL , 28 Bytes

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

Tes:

F 1
3

F 2
2

F 3
5

F 4
8

F5
11

F 11
29

F 100
296

F 100000
299996

Penjelasan:

Rumusnya adalah:

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

mengikuti urutan 3 langkah "Dua langkah maju dan satu langkah mundur", kita akan memiliki seri aritmatika:

 +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

Minimal, atau kebetulan pertama:

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

dalam satu formula:

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

tolong jelaskan cangkang mana ini
qwr

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

dapatkah Anda menulisnya dalam bc secara langsung?
qwr

Saya tidak terbiasa dengan bc, tetapi karena argumen fungsi ($ 1) digunakan beberapa kali dan beberapa hal khusus shell (ekspansi aritmatika, $((…))) dilakukan, mungkin tidak.
2xsaiko

1
F(){bc<<<$1*3-$(($1>1))*4}bekerja di zsh meskipun dan menghapus 2 byte
2xsaiko

1

Python 3 , 48 byte

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

Cobalah secara Online!


Kerja bagus. Anda mungkin ingin memasukkan beberapa kode di bagian "Footer" juga. Dengan begitu Anda dapat menguji fungsi Anda tanpa
mengisi

@AJFaraday Footer posting saya atau kode saya?
Nathan Dimmer

Saat Coba Online; Anda dapat menambahkan catatan kaki yang berjalan dengan kode Anda tetapi tidak dihitung terhadap panjang byte. Maka output akan menampilkan kode Anda di tempat kerja.
AJFaraday


@ JoKing Apakah Anda tahu panduan yang bagus untuk fungsi lambda dengan Python? Saya benar-benar tidak mengerti bagaimana sintaks bekerja.
Nathan Dimmer



1

Brain-Flak , 38 byte

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

Cobalah online!

Jawaban pertama yang saya lihat untuk menghitung jawaban dengan melangkah maju mundur.

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

♦óÖ╣░Θ$

Penjelasan

3*1a<4*-

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

Alternatif lain yang mungkin

3*1am4*-

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.