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!
code-golf
math
arithmetic
AJFaraday
sumber
sumber
Jawaban:
Oasis ,
54 byte1 byte disimpan berkat @Adnan
Jangan bingung dengan
23+3
Cobalah online!
Bagaimana?
sumber
b
.Python 2 , 18 byte
Cobalah online.
Saya mengambil trik ini dari xnor hanya beberapa hari yang lalu ...!
sumber
Python 2 , 20 byte
Cobalah online!
sumber
Python 2 , 17 byte
Cobalah online!
Saya menemukan ekspresi dengan pencarian kasar. Secara efektif menghitung
n+2*abs(n-2)
.sumber
Polyglot: Java 8 / JavaScript / C # .NET,
161412 byteCobalah online (Java 8).
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,
1614 byteCobalah online (Java 8).
Cobalah online (JavaScript).
Cobalah online (C # .NET) .
Penjelasan:
sumber
n=>(--n*3||4)-1
juga dimungkinkan dalam JavaScript (juga 14 byte).R , 20 byte
Cobalah online!
Tidak menyadari polanya sampai setelah saya menerapkan solusi yang kurang elegan.
sumber
05AB1E ,
87 byteCobalah online!
-1 byte terima kasih kepada Emigna!
sumber
3*s≠i4-
menghemat satu byteOasis , 5 byte
Penjelasan:
Cobalah online!
sumber
Haskell , 15 byte
Cobalah online!
sumber
ML standar , 16 byte
Cobalah online!
sumber
Dodos , 27 byte
Cobalah online!
sumber
Jelly , 6 byte
Cobalah online!
sumber
Prolog (SWI) , 21 byte
Cobalah online!
sumber
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-
).Cobalah online!
sumber
2-|EG+
Jelly , 4 byte
Cobalah online!
Bagaimana itu bekerja
sumber
APL (Dyalog) , 9 byte
Cobalah online!
sumber
C (gcc) , 20 byte
Cobalah online!
sumber
f(n){n=n<2?3:n*3-4;}
f(n){n=n*3-4*(n>1);}
MachineCode pada x86_64,
343224 byteMembutuhkan
i
flag 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)sumber
> <> ,
109 byteDisimpan 1 byte berkat Jo King
Cobalah online!
sumber
4 , 54 byte
Cobalah online!
Jika Anda mempertanyakan metode input, silakan kunjungi terlebih dahulu input numerik dan output dapat diberikan sebagai posting meta kode karakter .
sumber
4
hanya memiliki input char.Japt, 7 byte
Port solusi Lynn dari Python.
Cobalah
Alternatif
Ini adalah alternatif yang menyenangkan untuk solusi formula tertutup yang, sayangnya, lebih lama satu byte:
Cobalah
sumber
TI-Basic, 8 byte
sumber
05AB1E , 4 byte
Menggunakan metode abs dari jawaban Dennis 'Jelly
Cobalah online!
Penjelasan
sumber
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:
penjelasan pembongkaran / kode:
Mengujinya pada emulator 65816 yang kompatibel:
sumber
SHELL , 28 Bytes
Tes:
Penjelasan:
Rumusnya adalah:
mengikuti urutan 3 langkah "Dua langkah maju dan satu langkah mundur", kita akan memiliki seri aritmatika:
Minimal, atau kebetulan pertama:
dalam satu formula:
sumber
$((…))
) dilakukan, mungkin tidak.F(){bc<<<$1*3-$(($1>1))*4}
bekerja di zsh meskipun dan menghapus 2 bytePython 3 , 48 byte
Cobalah secara Online!
sumber
J , 9 byte
Cobalah online!
sumber
MATLAB / Oktaf , 15 byte
Cobalah online!
Agak kaget belum ada jawaban MATLAB. Algoritma yang sama
3*n-4
jika lebih besar dari 1, atau3*n
sebaliknya.sumber
Brain-Flak , 38 byte
Cobalah online!
Jawaban pertama yang saya lihat untuk menghitung jawaban dengan melangkah maju mundur.
sumber
W
d
, 7 bytePenjelasan
Mengevaluasi
(a*3)-4*(a>1)
.Alternatif lain yang mungkin
Mengevaluasi
(a*3)-4*(1%a)
.sumber