Roda gigi mentransfer jumlah kecepatan yang berbeda, tergantung pada ukuran gigi yang disatukan.
Jack memiliki mesin, yang memutar Gear Gear. tetapi Anda tidak tahu kecepatan gigi terakhir.
Untungnya, Anda adalah pegolf kode yang hebat, sehingga Anda dapat membantunya!
Jadi apa yang harus aku lakukan?
Setiap roda gigi diwakili oleh 2 angka, jari-jari roda gigi bagian dalam dan jari-jari roda gigi luar.
Jika gigi A
adalah [a,b]
dan gigi B
adalah [c,d]
, maka rasio antara kecepatan A
dan kecepatan B
akan c:b
.
Diberikan daftar roda gigi (daftar 2-tupel), output kecepatan gigi terakhir.
Anda dapat mengasumsikan kecepatan gigi pertama 1
.
Contoh berhasil
Katakanlah input kita [[6,12],[3,10],[5,8]]
.
Gigi pertama [6,12]
,, akan memiliki kecepatan 1
.
Kemudian, gigi kedua [3,10]
,, akan memiliki kecepatan 1*12/3 = 4
.
Kemudian, gigi terakhir [5,8]
,, akan memiliki kecepatan 4*10/5 = 8
.
testcases
input output
[[1,1],[2,2]] 0.5 (1/2)
[[1,2],[1,2],[1,2]] 4 (2/1*2/1)
[[6,12],[3,10],[5,8]] 8 (12/3*10/5)
Aturan
Aturan main kode-golf berlaku.
[6,12,3,10,5,8]
. sebutkan saja jika Anda ingin menggunakannya.Jawaban:
Haskell, 19 byte
Mengingat daftar datar seperti
[a,b,c,d,e,f]
,tail.init
menghilangkan elemen pertama dan terakhir, dan kemudianfoldr1(/)
menciptakan riam divisib/(c/(d/e))))
yang bekerja untuk bolak-balik*
dan/
:b/c*d/e
.sumber
Jelly , 6 byte
Suite uji.
sumber
Jelly , 7 byte
Cobalah online! atau verifikasi semua kasus uji .
sumber
C,
1151231218380767170 byte4 byte disimpan berkat @LeakyNun!
Golf pertamaku, mungkin bukan yang terbaik.
Mengambil array dan ukuran.
Tidak Terkumpul:
sumber
j;float r=1;float f(int a[]){for(;j<sizeof a;)r=r*a[j++]/a[j++];return r;}
(tidak diuji)JavaScript (ES6), 44 byte
37 byte untuk array yang diratakan:
Tidak seperti (misalnya) Haskell,
reduceRight
nama yang panjang sehingga lebih murah denganreduce
cara yang salah dan mengambil kebalikan pada akhirnya.sumber
Pyth, 8 byte
Suite uji.
sumber
J, 8 byte
Cobalah online!
Pemakaian
di mana
>>
STDIN dan<<
STDOUT.Penjelasan
"Reduce" secara
J
default dari kanan ke kiri, yang melepas beberapa byte: psumber
Mathematica, 26 byte
Fungsi tanpa nama yang mengambil daftar nilai rata-rata dan mengembalikan hasil yang tepat (sebagai fraksi jika perlu).
Ini menggunakan pendekatan yang sama seperti beberapa jawaban lain dari divisi lipat di atas daftar terbalik (setelah menghapus elemen pertama dan terakhir).
sumber
MATL , 9 byte
Format input adalah salah satunya:
EDIT (30 Juli 2016): kode tertaut menggantikan
9L
dengan1L
untuk beradaptasi dengan perubahan terbaru dalam bahasa.Cobalah online!
Penjelasan
sumber
JavaScript, 54 byte
Pemakaian
Tidak disatukan
Tentu saja, varian golfnya sedikit berbeda. Dengan
.map()
, itu menggantikan nilai pertama array dengan kecepatan setelah roda kedua, nilai kedua dengan kecepatan roda ketiga, dan nilai terakhir dan nilai terakhir kedua dengan kecepatan roda terakhir. Jadi, kita ambil saja elemen terakhir.pop()
.sumber
PHP,
807969 bytemengambil input dari parameter GET
a
; hasil cetakmenginisialisasi
$r
dengan 1, kemudian loop dari tuple kedua ke terakhir untuk mengalikan dengan elemen pertama sebelumnya dan membagi melalui elemen kedua dari tuple saat ini.Terima kasih kepada Jörg karena mengingatkan saya pada
$_GET
; yang menyimpan 7 byte.versi yang lebih elegan, 88 byte:
sumber
<?for($r=$i=1;$i<count($a=$_GET[a]);)$r*=$a[$i-1][1]/$a[$i++][0];echo$r;
72 BytesJavaScript,
595856 bytePenjelasan
Kurangi array dan kalikan dengan nilai setiap detik dan bagi dengan nilai pertama. Jadi untuk
[[6,12],[3,10],[5,8]]
itu12/6*10/3*8/5
. Tentu saja, perhitungan aktual yang kami inginkan adalah12/3*10/5
jadi kami hanya ingin mengabaikan itu pertama/6
dan terakhir*8
dengan mengalikan*6
kembali dan membagi/8
kembali. Pembatalan itu dilakukan dengan menetapkan6/8
sebagai nilai awal untuk pengurangan.sumber
*.../...
ke nilai awal1
.Python 2, 52 byte
Fungsi anonim yang mengambil input dari daftar yang diratakan melalui argumen dan mengembalikan output.
Ini memanfaatkan gagasan pembagian kaskade, seperti dalam jawaban xnor .
Cobalah di Ideone
sumber
Python 3, 59 byte
Fungsi anonim yang mengambil input dari daftar yang tidak rata melalui argumen dan mengembalikan output.
Bagaimana itu bekerja
Untuk setiap pasangan bilangan bulat di input, string formulir
'int1*int2'
dibuat. Bergabung dengan semua pasangan ini pada/
memberikan string bentuk'int1*int2/int3*int4/...'
, yang merupakan perhitungan yang diinginkan, tetapi termasuk bilangan bulat pertama dan terakhir yang tidak diinginkan. Ini dihapus dengan memotong dua karakter pertama dan terakhir dua dalam sengatan, meninggalkan perhitungan yang diinginkan. Ini kemudian dievaluasi dan dikembalikan.Cobalah di Ideone
sumber
Pascal, 88 byte
Fungsi rekursif (harus melakukannya ..) yang mengambil array 2D statis dan panjangnya (no. Of rows) sebagai input. Menggunakan beberapa pointer matematika pada array.
Tidak digabungkan dengan contoh penggunaan:
sumber
Sebenarnya, 14 byte
Cobalah online! (saat ini tidak berfungsi karena TIO adalah beberapa versi di belakang)
Program ini mengambil daftar yang diratakan sebagai input.
Penjelasan:
sumber
R, 64 byte
Ternyata pendekatan vektor dan
for
loop setara dalam hal ini:atau
for
loop:`
sumber