Ini akhir pekan dan apa yang dilakukan cowok-cowok keren di akhir pekan? Minum tentu saja! Tapi tahukah Anda apa yang tidak begitu keren? Minum dan mengemudi. Jadi Anda memutuskan untuk menulis sebuah program yang memberi tahu Anda seberapa dimuatnya Anda dan kapan Anda akan bisa mengemudi lagi tanpa ditarik oleh polisi dan kehilangan lisensi Anda.
Tantangan
Diberikan daftar minuman yang Anda nikmati malam ini, hitung kadar alkohol dalam darah Anda dan waktu Anda harus menunggu sampai Anda dapat naik ke mobil dan pulang.
Memasukkan
Masukan akan menjadi daftar minuman yang Anda miliki malam ini. Ini akan terlihat seperti ini:
4 tembakan minuman keras 1 gelas anggur 2 botol bir 3 gelas air
Kontainer akan selalu berbentuk jamak.
Seperti yang Anda lihat, setiap entri terdiri dari:
- Jenis minuman (minuman keras, anggur, bir, air)
- Wadah untuk minuman (gelas, gelas, botol)
- Jumlah x minuman yang Anda miliki dari jenis itu sebagai bilangan bulat dengan x> 0,
Setiap jenis minuman menambahkan sejumlah alkohol ke darah Anda:
minuman keras -> 0,5 ‰ / 100 ml bir -> 0,1 ‰ / 100 ml anggur -> 0,2 ‰ / 100 ml air -> -0,1 ‰ / 100 ml
Air adalah perkecualian di sini, karena mengeluarkan darah Anda dan menurunkan tingkat alkohol Anda (akan sangat baik jika itu benar-benar bekerja ...).
Setiap wadah memiliki volume tertentu:
tembakan -> 20 ml kacamata -> 200 ml botol -> 500 ml
Keluaran
Anda harus menampilkan dua angka:
- Tingkat alkohol dalam ‰
- Waktu dalam jam Anda harus menunggu hingga Anda mencapai 0,5 ‰ atau kurang, sehingga Anda dapat mengemudi lagi. Anda kehilangan 0,1 ‰ per jam.
Catatan
- Tingkat alkohol tidak pernah bisa jatuh di bawah nol.
- Hal yang sama berlaku untuk waktu tunggu. Jika Anda memiliki 0,5 ‰ atau kurang, hasilkan nol.
- Urutan minuman tidak masalah, jadi air minum dapat menurunkan kadar alkohol di bawah nol dalam proses perhitungan. Jika tetap ada, Anda harus menggantinya dengan nol.
Tingkat alkohol untuk contoh di atas akan dihitung seperti ini:
4 tembakan minuman keras -> 0,4 ‰ 1 gelas anggur -> 0,4 ‰ 2 botol bir -> 1,0 ‰ 3 gelas air -> -0,6 ‰ => 0,4 + 0,4 + 1 - 0,6 = 1,2 ‰
Untuk mencapai 0,5 ‰ Anda harus kehilangan 0,7 ‰. Anda kehilangan 0,1 ‰ per jam, jadi Anda harus menunggu 7 jam untuk mengemudi lagi.
Aturan
- Anda dapat mengambil input dalam format apa pun yang Anda inginkan, tetapi Anda harus menggunakan string yang tepat seperti yang diberikan di atas. Anda dapat mengambil angka sebagai bilangan bulat.
- Anda dapat menampilkan dua angka dalam urutan apa pun, cukup jelaskan yang mana yang Anda gunakan dalam jawaban Anda.
- Anda dapat mengasumsikan bahwa input akan selalu memiliki setidaknya satu entri.
- Fungsi atau program lengkap diizinkan.
- Aturan default untuk input / output.
- Celah standar berlaku.
- Ini adalah kode-golf , sehingga byte-count terendah akan menang. Tiebreak adalah pengiriman sebelumnya.
Uji kasus
Input sebagai daftar string. Menghasilkan tingkat alkohol terlebih dahulu, nilai dipisahkan oleh koma.
["4 tembakan minuman keras", "1 gelas anggur", "2 botol bir", "3 gelas air"] -> 1.2, 7 ["10 tembakan minuman keras", "1 botol air"] -> 0,5, 0 ["3 gelas anggur", "2 botol minuman keras"] -> 6.2, 57 ["6 tembakan bir", "3 gelas air"] -> 0, 0 ["10 gelas bir"] -> 2.0, 15
Selamat Coding!
sumber
function drive(a) { if (a.every(v=>/water/.test(v))) return [0, 0]; throw new TeetotalException; }
Jawaban:
Javascript (ES6), 109
Mengambil input sebagai array dari array string / integer mis
Output ke array sederhana mis
[1.2, 7]
Dijelaskan
sumber
[[3,"shots", "booze"]]
TSQL,
301,299,219, 206 BytesInput masuk ke tabel temp
#I
(Anda mengatakan format apa saja :)Kode:
Terima kasih atas ide untuk memperbaikinya, Micky T :)
sumber
IIF
fungsi alih-alihCASE
pernyataan untuk beberapa byteJOIN(SELECT .. )A(Y,S)ON Y=N
dan(L+ABS(L))/2,10*((L-.5+ABS(L-.5))/2)
lebih pendek dari fungsi IIF yang disebutkan sebelumnya. Anda juga dapat menghemat sedikit jika Anda melihat melakukan cross join pada nilai-nilai untuk ukuran dan kekuatan. mis.SELECT V,N,Q*S FROM(VALUES(...))A(N,S),(VALUES(...)B(V,Q)
JavaScript (ES6), 131
Kurang golf
sumber
Perl,
133119 + 3 =136122 byteUntuk dijalankan
perl -p
. Mengambil input berorientasi garis pada STDIN, menghasilkan output pada STDOUT.Versi kurang golf:
Terima kasih kepada dev-null untuk saran menghemat 11 byte.
sumber
\d
ke.