Anda memiliki kolam renang yang diisi sampai penuh dengan air. Anda perlu mengosongkannya, tetapi Anda tidak dapat memikirkan metode yang efisien. Jadi, Anda memutuskan untuk menggunakan cangkir solo merah Anda. Anda akan berulang kali mengisi cangkir dan membuangnya di luar kolam.
Tantangan
Berapa lama untuk mengosongkan kolam?
Memasukkan
[shape of pool] [dimensions] [shape of cup] [dimensions] [speed]
shape of pool
akan menjadi salah satu dari string ini:circle
,triangle
, ataurectangle
. Perhatikan bahwa ini sebenarnya merujuk pada bentuk 3 dimensi: silinder, prisma segitiga, dan prisma persegi panjang.dimensions
akan berbeda tergantung bentuknya.- lingkaran:
[radius] [height]
. Volume = π r 2 h - segitiga:
[base] [height] [length]
. Volume = 1/2 (bh) * panjang - persegi panjang:
[width] [length] [height]
Volume = lwh
- lingkaran:
shape of cup
dandimensions
bekerja dengan cara yang sama. Cangkir juga bisa berupa lingkaran, segitiga, atau persegi panjang.speed
adalah jumlah waktu yang diperlukan untuk mengosongkan satu gelas penuh air dalam hitungan detik .
Keluaran
Jumlah detik yang diperlukan untuk mengosongkan kolam renang. Ini dapat dibulatkan ke detik terdekat.
Catatan
- Tidak akan ada unit dalam input. Semua unit jarak diasumsikan sama (bentuk tidak akan memiliki tinggi dalam inci dan lebar kaki).
- Gunakan 3,14 untuk
pi
. - Input akan terdiri dari string dan angka floating-point.
- Tidak akan pernah hujan. Tidak akan ada air yang ditambahkan.
- Anda memiliki tangan yang sangat mantap. Anda akan mengisi cangkir sampai penuh setiap saat, dan Anda tidak akan pernah menumpahkannya.
- Begitu Anda mendekati akhir, akan sulit untuk mengambil secangkir penuh air. Anda tidak perlu khawatir tentang ini. Anda sangat kuat, sehingga Anda dapat memiringkan kolam ke sisinya (tanpa menghabiskan waktu lagi).
- Setiap kali Anda membuat perhitungan, tidak apa-apa untuk membulatkan ke seperseratus terdekat . Jawaban akhir Anda tidak perlu tepat.
Uji Kasus
Input: triangle 10 12.25 3 circle 5 2.2 5
Keluaran:10
Meskipun tersisa kurang dari 172,7 pada sendok terakhir, masih butuh lima detik untuk mengosongkannya.
Input: triangle 5 87.3 20001 rectangle 5.14 2 105.623 0.2
Keluaran:804.2
- Anda harus membulatkan ke seratus terdekat setelah setiap perhitungan.
- The perhitungan akhir dibulatkan 804,05567-804,2. Ini karena sedikit air yang terakhir harus dikosongkan.
Aturan
- Anda dapat menulis program atau fungsi lengkap.
- Input harus diambil dari stdin atau parameter fungsi. Output harus dicetak melalui stdout atau dikembalikan.
- Format input dapat disusun ulang, selama Anda menentukannya dalam pengiriman. Anda juga dapat mempersingkat string "lingkaran", "segitiga", dan "persegi panjang."
- Perpustakaan dan fungsi bawaan yang melibatkan volume atau area tidak diizinkan.
Mencetak gol
Ini adalah kode-golf . Kiriman dengan jumlah byte terkecil menang.
Jawaban:
JavaScript ES6,
10078828174 byteTerima kasih kepada @UndefinedFunction untuk membantu golf dari 4 byte
Pemakaian:
sumber
.5*v
, tidak bisakah kamu lakukanv/2
?t(["triangle", [10, 12.25, 3]], ["triangle", [10, 12.25, 3]], 5)
? Saya mendapatkan10
tetapi bukankah seharusnya jawabannya5
? EDIT: baru saja dikalahkan oleh edc65, masalah yang sama.f=(p,c,s,v=([s,a,b,c])=>s<'r'?a*a*b*3.14:a*b*c/(s<'t'?1:2))=>Math.ceil(v(p)/v(c))*s
-~
memiliki masalah dengan angka desimal dan akan menghasilkan langkah tambahan. Saya harus menambahkana<'t'?1:2
karena(1+(a>'t'))
tidak berfungsi karena suatu alasan.CJam, 46 byte
Penjelasan:
Cobalah online .
sumber
Python 3,
340304 bytePemakaian:
Di mana
i
deretan informasi.Contoh:
q("t 10 12.25 3 c 5 2.2 5")
q("t 5 87.3 20001 r 5.14 2 105.623 0.2")
Catatan: Nama masing-masing bentuk telah disingkat menjadi huruf pertama.
sumber
Javascript (ES6), 91
Mengambil input sebagai string untuk bentuk, array angka untuk dimensi, dan angka tunggal untuk kecepatan:
Ini mendefinisikan fungsi anonim, jadi gunakan add
g=
sebelum itu. Kemudian, itu bisa disebut sepertialert(g("triangle", [10, 12.25, 3], "circle", [5, 2.2], 5))
Penjelasan:
Solusi asli saya mengambil satu string, dan panjangnya 111 byte:
Ini juga mendefinisikan fungsi anonim, jadi gunakan add
f=
sebelum itu. Kemudian, itu bisa disebut sepertialert(f("triangle 5 87.3 20001 rectangle 5.14 2 105.623 0.2"))
sumber
K5 (oK), 123 byte
sumber
Julia,
122116958979 byteIni mengasumsikan bahwa hanya huruf pertama dari nama bentuk yang akan diberikan. Kalau tidak, solusinya adalah 6 byte lebih lama.
Penjelasan + tidak dikumpulkan:
Disimpan 21 byte berkat edc65 dan 10 berkat UndefinedFunction!
sumber
ceil
di Julia, untuk digunakan, bukanfloor
, memotong semua cek tentang hasil integer?a>'s'?prod(x)/2:prod(x)
denganprod(x)/(a>'s'?2:1)
? (mungkin bahkan tanpa tanda kurung, saya tidak punya ide juilia di tangan, dan belum dapat menguji ini)a<'d'?3.14x[1]^2*x[2]:a>'s'?prod(x)/2:prod(x)
denganprod(x)*(a<'d'?3.14x[1]:a>'s'?.5:1)
? (Lagi, belum diuji)F #,
217186184160 bytePersyaratan indentasi sial!
Pemakaian:
Memperbarui
Terima kasih kepada Alex karena mengomentari indentasi ruang tunggal, yang tampaknya didukung F #
Berhasil mengetuk lebih banyak beban dengan mengubah dari jenis
array
kelist
dalammatch
pernyataansumber
x**2.
Anda bisa melakukannyax*x
? Itu bisa menghemat 2 byte.Python 2.7 306 Bytes
Mengambil input dari stdin.
Menguji itu-
sumber
Python 2,
22214613911910393 byteImplementasi yang cukup mudah. Terima kasih kepada Sp3000 untuk
-(-n//1)
trik untuk plafon, yang harusnya berfungsi dalam semua kasus (yaitu belum menemukan masalah dengannya).Input harus diformat seperti ini:
Pemakaian:
Tidak Disatukan:
Solusi asli, 222 byte
Ini dibuat ketika aturan masih mengharuskan Anda untuk memasukkan seluruh kata daripada surat. Saya menggunakan fakta yang
hash(s)%5
memetakan merekacircle -> 2, triangle -> 3, rectangle -> 1
, namun jika saya hanya mengambil satu huruf sebagai masukan, saya pikir saya bisa mendapatkan ini lebih pendek.Pemakaian:
sumber
Python 2/3,
252249 byteContoh Penggunaan:
Versi hanya Python 2 dan Python 3 hanya berbeda dalam cara mereka menerima input;
raw_input()
untuk Python 2 daninput()
untuk Python 3, sebagai lawan darire.sys.stdin.readline()
untuk versi Python2 / 3.Python 2,
240237 bytePython 3,
236233 bytePerubahan:
Diubah
for o in[0,3if i[0]<'d'else 4]:
menjadifor o in[0,[4,3][i[0]<'d']]:
. Terima kasih kepada Vioz untuk ilhamnya :).sumber
[0, 3 if i[0] < 'd' else 4]
. Sudah terlambat (awal?): P.for
pernyataan :).Pyth -
4039363534 byteMenggunakan metode sederhana, memetakan kedua wadah dan kemudian mengurangi dengan pembagian.
Membawa koma masukan dipisahkan dari stdin, dengan huruf pertama dari setiap bentuk seperti:
"t", 10, 12.25, 3, "c", 5, 2.2, 5
.Test Suite .
sumber