Haskell memiliki fitur rapi ini (di mana) Anda dapat memberikannya tiga angka dan dapat menyimpulkan urutan aritmatika dari mereka. Misalnya, [1, 3..27]
setara dengan [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27]
.
Itu keren dan semua kecuali urutan aritmatika cukup terbatas. Selain itu, pfft . Perkalian ada di mana. Bukankah lebih keren jika melakukan urutan geometris seperti [1, 3..27]
kembali [1, 3, 9, 27]
?
Tantangan
Tulis sebuah program / fungsi yang mengambil tiga bilangan bulat positif a , b , dan c dan output di mana x adalah bilangan bulat terbesar ≤ c yang dapat direpresentasikan sebagai di mana n adalah bilangan bulat positif.[a, b, b × (b ÷ a), b × (b ÷ a)2, ..., x]
b × (b ÷ a)n
Artinya, output harus r , sedemikian rupa sehingga:
r0 = a
r1 = b
rn = b × (b ÷ a)n-1
rlast = greatest integer ≤ c that can be represented as b × (b ÷ a)n
where n is a positive integer
Spesifikasi
- Aturan I / O standar berlaku .
- Celah standar yang dilarang .
- b akan selalu habis dibagi oleh a .
- a < b ≤ c
- Tantangan ini bukan tentang menemukan pendekatan terpendek dalam semua bahasa, melainkan tentang menemukan pendekatan terpendek dalam setiap bahasa .
- Kode Anda akan dinilai dalam byte , biasanya dalam pengkodean UTF-8, kecuali ditentukan lain.
- Fungsi bawaan (Mathematica mungkin memiliki satu: P) yang menghitung urutan ini diizinkan tetapi termasuk solusi yang tidak bergantung pada bawaan dianjurkan.
- Penjelasan, bahkan untuk bahasa "praktis", dianjurkan .
Uji kasus
a b c r
1 2 11 [1, 2, 4, 8]
2 6 100 [2, 6, 18, 54]
3 12 57 [3, 12, 48]
4 20 253 [4, 20, 100]
5 25 625 [5, 25, 125, 625]
6 42 42 [6, 42]
Dalam beberapa format yang lebih baik:
1 2 11
2 6 100
3 12 57
4 20 253
5 25 625
6 42 42
1, 2, 11
2, 6, 100
3, 12, 57
4, 20, 253
5, 25, 625
6, 42, 42
Jawaban:
Sekam , 8 byte
Input dalam urutan b, c, a . Cobalah online!
Penjelasan
Aliran kontrol dalam program ini agak sulit untuk diikuti. Pertama, b diumpankan ke paling kanan
/
, menghasilkan fungsi/b
yang dibagi dengan b . Berikutnya,~
membagi program yang tersisa menjadi tiga bagian:~(↑)(≤)(Ṡ¡o//b)
. Ini feed c untuk≤
dan sebuah untukṠ¡o//b
, dan menggabungkan hasilnya dengan↑
. Hasil dari≤c
adalah fungsi yang memeriksa apakah argumennya paling banyak c , dan↑≤c
mengambil awalan terpanjang dari elemen yang dipegang ini.Tetap menunjukkan bagaimana
(Ṡ¡o//b)a
mengevaluasi daftar tak terbatas yang diinginkan. Bagian dalam tanda kurung dibagi menjadiṠ(¡)(o//b)
. KemudianṠ
feed sebuah keo//b
, feed hasil untuk¡
, dan kemudian memberikan sebuah argumen kedua. Ekspresi(o//b)a
memberikan fungsi yang mengambil angka dan membaginya dengan a / b , dan¡
mengulangi fungsi ini pada argumen kedua, yaitu a .Berikut adalah serangkaian transformasi yang memvisualisasikan penjelasan:
Solusi alternatif menggunakan variabel eksplisit dalam urutan a, b, c :
sumber
Python 2 , 42 byte
Cobalah online!
Pendekatan rekursif,
4241 byte-1 byte berkat ovs
Cobalah online!
sumber
Proton , 35 byte
Cobalah online!
sumber
JavaScript (ES6),
4137 byteDisimpan 4 byte berkat @Neil
Mengambil input sebagai
(b,c)(a)
.Uji kasus
Tampilkan cuplikan kode
Berkomentar
sumber
(b,c)=>g=a=>a>c?[]:[a,...g(b,b*=b/a)]
.Pari / GP , 38 byte
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) , 22 byte
Cobalah online!
sumber
Python 3,
93907473 byteCobalah secara Online
Terima kasih kepada Rod dan user202729 untuk membantu saya mengurangi beberapa byte!
sumber
def + return -> lambda
. Kiat-kiat Python.import*
.while i<=c:i++
(bukan daftar pemahaman + log) untuk menyimpan banyak byteOktaf ,
3835 byteCobalah online!
Ternyata pendekatan MATL @ LuisMendo juga menghemat 3 byte dalam Oktaf, meskipun berulang
log
tiga kali.sumber
Perl 6 ,
2624 byteCobalah online!
Operator urutan Perl 6
...
dapat menyimpulkan deret geometri secara asli.Perbarui: ... Itu bisa , tetapi dalam situasi ini tidak menyimpulkan itu sedikit lebih pendek.
sumber
05AB1E , 12 byte
Masukan dalam urutan
c,b,a
Cobalah online!
Penjelasan
sumber
MATL , 17 byte
Cobalah online!
Hanya untuk mendapatkan bola bergulir di MATL. Saya tidak bisa membayangkan tidak ada cara yang kurang jelas untuk menyelesaikan ini.
sumber
Haskell, 35 byte
Cobalah online!
sumber
exp<$>[...]
)MATL , 12 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
a
danc
(saya memiliki banyak upaya gagal mulai dengany/i
), tetapi menggunakan metode ini, Anda dengan rapi menyatukan semuanya.Perl, 38 byte
Termasuk
+3
untuk-n
(use 5.10.0
untuk membuka kunci fitur perl 5.10 gratis)Kemudian jalankan sebagai:
sumber
Merah , 50 byte
Cobalah online!
sumber
Japt , 14 byte
Cobalah
Penjelasan
sumber
Bersih , 63 byte
Cobalah online!
sumber
TI-BASIC, 31 byte
Mengambil input dari pengguna dan output dalam
Ans
. Saya memecahkan untuk n dalam c = b n / a n-1 , mendapatkan n = 1 + ln (c / b) / ln (b / a). Itu sama dengan n = 1 + log b / a (c / b). Untuk keperluan bermain golf, saya memulai urutan saya di -1 dan mengakhirinya di n-1 daripada 0 sampai n.sumber
APL (Dyalog Unicode) , 38 byte
Cobalah online!
Awalan Dfn. Mengambil input secara berurutan
a b c
, dan menggunakan⎕IO←0
( I ndex O rigin)Terima kasih kepada @ErikTheOutgolfer untuk mencukur 6 byte dari ini bahkan sebelum saya mempostingnya.
Bagaimana?
sumber
Stax , 14 byte CP437
16 byte saat dibongkar,
Jalankan dan debug online!
Mengambil input dalam bentuk
[b, a, c]
.Cukup yakin @recursive memiliki solusi yang lebih baik.
Penjelasan
sumber
SILOS , 73 byte
Cobalah online!
Kami membaca tiga angka. Hitung rasio umum dengan angka kedua / pertama. Kemudian kita menjalankan seri sampai kita lebih besar dari batas atas.
sumber
C (gcc), 82 byte
Cobalah online!
Menghitung dan mencetak
r_n = b^n/a^(n-1)
hinggar_n > c
.Harus dikompilasi
-lm
!sumber
n;f(a,b,c){for(float r=n=0;r=pow(b/a,n++)*a,r<=c&&printf("%f ",r););}
APL (Dyalog) , 23 byte ( SBCS )
Ini mengambil argumen ab di kiri dan c di kanan,
Cobalah online!
Mungkin ada jalan yang lebih pendek, tapi saya pikir
÷\
itu lucu.Dijelaskan:
{...}
Fungsi anonomous ⍺ adalaha b
,⍵
adalahc
. Katakanlaha b c = 2 6 100
⌽⍺
Membalikkan⍺
:6 2
⍵⍴
Ulangi⍵
kali:6 2 6 2 6 2 6 2 ...
÷\
Dikurangi berdasarkan pembagian pada awalan:6 (6÷2) (6÷(2÷6)) (6÷(2÷(6÷2))).. = 6 3 18 9 54 ..
⍺,
Prepend⍺
:2 6 6 3 18 9 54 27 162 81 ...
⊣/⍵2⍴
Dapatkan setiap elemen lainnya (ditambah beberapa pengulangan trailing):⍵2⍴
Buat⍵
baris,2
dari matriks kolom2 6 6 3 18 9 54 ...
⊣/
Dapatkan kolom pertama⊆⊢
Membagi array menjadi blok di mana⍵∘≥
⍵
lebih besar atau sama dengan semua elemen⊃
Ambil blok pertama seperti itusumber