Aturan Naismith membantu menentukan waktu yang dibutuhkan untuk berjalan atau mendaki, mengingat jarak dan pendakian.
Diberikan daftar ketinggian kosong pada titik-titik yang ditempatkan secara merata di sepanjang jalur dan total jarak jalur tersebut dalam meter, Anda harus menghitung waktu yang diperlukan sesuai dengan aturan Naismith.
Aturan Naismith adalah bahwa Anda harus mengizinkan satu jam untuk setiap lima kilometer, ditambah satu jam tambahan untuk setiap 600 meter pendakian.
Input harus diambil dalam meter, yang dijamin terdiri dari bilangan bulat non-negatif, dan output harus secara konsisten jam atau menit (tetapi tidak keduanya), dan harus dapat memberikan angka desimal jika berlaku (ketidakakuratan floating point OK) .
Sebagai contoh, diberikan:
[100, 200, 400, 200, 700, 400], 5000
Untuk dua elemen pertama [100, 200]
Anda memiliki 100 meter pendakian yang 10 menit. Dengan [200, 400]
Anda memiliki 200 meter pendakian yang 20 menit, [400, 200]
tidak naik sehingga tidak ada waktu yang ditambahkan untuk itu. [200, 700]
adalah 500 meter pendakian yang 50 menit, dan akhirnya [700, 400]
tidak naik. Satu jam tambahan ditambahkan untuk jarak lima kilometer. Ini total 140 menit atau 2.333 ... jam.
Uji Kasus
[0, 600] 2500 -> 1.5 OR 90
[100, 200, 300, 0, 100, 200, 300] 10000 -> 2.8333... OR 170
[40, 5, 35] 1000 -> 0.25 OR 15
[604] 5000 -> 1 OR 60
[10, 10, 10] 2000 -> 0.4 OR 24
[10, 25, 55] 1000 -> 0.275 OR 16.5
[10], 5125
atau[10, 25, 55], 1000
valid dan harus ditangani?[10, 25, 55], 1000 -> 0.275 OR 16.5
Jawaban:
R ,
444342 byteCobalah online!
-1 byte dengan menggunakan
pmax
beberapa jawaban lainnyaMengambil input sebagai
A
aroma danD
kecepatan, dan mengembalikan waktu dalam hitungan menit.sumber
JavaScript (ES6), 50 byte
Disimpan 1 byte berkat jawaban Giuseppe (dibagi 10 pada akhir proses)
Mengambil input sebagai
([altitudes])(distance)
. Mengembalikan waktu dalam hitungan menit.Cobalah online!
sumber
05AB1E , 15 byte
Cobalah online!
Mengembalikan waktu dalam hitungan menit.
Penjelasan
sumber
₄12//
alih - alih₄;6//
. Sangat jelas +1 dari saya.Haskell,
4746 byteMengembalikan waktu dalam jam.
Cobalah online!
sumber
Python 2,
6260 bytesDisimpan 2 byte berkat ovs.
Cobalah online!
Mengembalikan waktu dalam hitungan menit.
sumber
Perl 6 ,
453937 byte6 byte disimpan berkat Jo King.
2 byte disimpan berkat nwellnhof.
(Berkat mereka berdua, ini tidak lagi terlihat seperti kiriman asli saya :—).)
Cobalah online!
Argumen pertama adalah daftar dengan elevasi, argumen kedua adalah panjang perjalanan.
Semuanya adalah Kode Apapun. Jika suatu ekspresi dikenali seperti itu, maka masing
*
- masing adalah satu argumen.Jadi, di
*.&{sum (.skip Z-$_)Xmax 0}/600
, kita mengambil argumen pertama (kemunculan pertama*
), dan menggunakan blok di atasnya dengan konstruksi seperti metode.&{}
. Blok mengambil satu argumen (daftar), yang masuk ke$_
, begitu.skip
juga daftar itu tanpa elemen pertama. Kami mengurangi array asli, elemen demi elemen, dari itu, menggunakanZ-
. Zip berhenti segera setelah daftar pendek habis, yang OK.Kami kemudian menggunakan operator lintas produk
X
.list X(op) list
membuat semua pasangan yang memungkinkan di mana elemen pertama dari daftar kiri dan yang kedua dari kanan, dan menggunakan operator(op)
pada mereka. Hasilnya dikembalikan sebagai Seq (daftar sekali pakai). Namun, daftar yang tepat hanya memiliki satu elemen, 0, jadi itu saja* max 0
, elemen demi elemen. Itu memastikan bahwa kita hanya menghitung bagian naik dari perjalanan. Lalu kami menambahkannya dan membaginya dengan 600.Lalu kita tambahkan
*/5e3
, di mana*
terjadi untuk yang kedua kalinya, dan jadi itu argumen kedua, dan membaginya dengan 5000. Jumlahnya kemudian menjadi jam dalam jam. (Ini lebih efisien daripada waktu dalam hitungan menit karena kita perlu mengalikan, dan*
itu perlu dipisahkan oleh spasi dari WhatsStar*
.)sumber
X
X
, terima kasih!X/
dengan hanya membagi jumlah dengan 10. 39 byte.&{}
(mengembalikan jam).OK , 21 byte
Cobalah online! Menyalahgunakan bug parsing di mana
.1.012
sama dengan.1 .012
.-1 terima kasih kepada streester .
k , 23 byte
Cobalah online!
sumber
{y+/0|1_-':x}..1.012*
selama 21 byte? mulai akumulator dengany
.:/
Jelly , 12 byte
Cobalah online!
-1 terima kasih kepada Tn . Xcoder .
sumber
×.12
bekerjaPython 2 , 59 byte
Cobalah online!
mengembalikan jam sebagai desimal.
sumber
Pyth , 15 byte
Program penuh, mengharapkan set ketinggian sebagai argumen pertama, jarak sebagai argumen kedua. Mengembalikan waktu dalam hitungan menit.
Cobalah online di sini , atau verifikasi semua uji sekaligus di sini .
sumber
APL (Dyalog Unicode) ,
21 2018 byteCobalah online!
Fungsi tradisional mengambil input (dari kanan ke kiri) sebagai
1st ⎕
= Ketinggian / Kedalaman,2nd ⎕
= Jarak.Terima kasih kepada @ngn karena
menjadi penyihir satubyte tiga.Bagaimana itu bekerja:
sumber
,0
tidak perlu,⍵
untuk tes yang bermasalah harus,604
, tidak604
⍺
dan⍵
dengan kode lama⎕
dan terlalu malas untuk meletakkan header / footer tradfn. The,0
bit meskipun? Emas.Java 8, 89 byte
Cobalah online.
Penjelasan:
sumber
Japt , 39 byte
Cobalah online!
Kemungkinan bisa bermain golf sedikit lebih.
sumber
Stax , 17 byte
Jalankan dan debug di staxlang.xyz!
Mengambil semua input sebagai float, meskipun ini hanya menyimpan satu byte dalam versi yang sudah dibongkar. Kemungkinan tidak bisa diperbaiki; baru saja kembali ke golf kode, saya agak berkarat.
Dibongkar (20 byte) dan penjelasan:
0!012*s:-{0>f{A_:m|++
bekerja untuk input integral untuk 21 byte yang dibongkar dan masih 17 dikemas.sumber