Biaya Sumber Daya Jaringan Listrik
pengantar
Dalam permainan papan Power Grid , bagian integral dari permainan adalah tindakan membeli sumber daya untuk mengisi bahan bakar pembangkit listrik Anda. Ada empat jenis sumber daya yang digunakan dalam permainan (lima, jika Anda memasukkan energi terbarukan, tetapi jelas Anda tidak bisa membeli sumber daya untuk itu). Ini adalah Batubara, Minyak, Sampah, dan Uranium. Pasar sumber daya terlihat seperti ini:
1---- | 2---- | 3---- | 4---- | 5---- | 6---- | 7---- | 8---- | 10 | 12
CCC | CCC | CCC | CCC | CCC | CCC | CCC | CCC | U | U
OOO U | OOO U | OOO U | OOO U | OOO U | OOO U | OOO U | OOO U | 14 | 16
GGG | GGG | GGG | GGG | GGG | GGG | GGG | GGG | U | U
Ketika sumber daya dibeli, mereka diambil dari kiri pasar, di mana mereka termurah. Ketika sumber daya baru ditambahkan ke pasar, mereka ditambahkan dari kanan. Seperti yang dapat dilihat, ini menghasilkan keseimbangan penawaran dan permintaan - jika lebih banyak sumber daya dari jenis tertentu dibeli daripada yang diisi ulang setiap putaran, harga sumber daya itu akan naik. Demikian pula, jika kurang, biayanya akan berkurang.
Batubara, Minyak, dan Sampah semuanya mengalami kenaikan pada tingkat yang sama, sementara skala Uranium jauh lebih cepat. Satu unit biaya sumber daya non-Uranium 8 - floor((<units available> - 1) / 3)
. Satu unit biaya Uranium 13 - <units available>
jika ada 5 atau lebih unit yang tersedia, dan 18 - (2 * <units available>)
sebaliknya.
Misalnya, pada awal permainan ada semua 24 unit Batubara tersedia untuk dibeli. Jika pemain pertama ingin membeli 4 unit Batubara, tiga unit pertama akan dikenakan biaya masing-masing 1, dan 4 unit akan biaya 2, sehingga total biaya 5. Ini membuat 20 unit tersedia. Jika pemain kedua juga ingin membeli 4 unit Batubara, biayanya adalah (2 * 2 + 2 * 3) = 10.
Tantangan
Tantangan Anda adalah menulis program atau fungsi yang menghitung biaya untuk membeli sejumlah tertentu sumber daya tertentu, dengan asumsi bahwa ada jumlah tertentu dari sumber daya yang ada di pasar.
Kiriman Anda harus menerima, dalam format input apa pun yang masuk akal dan dalam urutan apa pun, parameter berikut:
- Jenis sumber daya - dijamin menjadi salah satu dari [C, O, G, U].
- Jumlah sumber daya yang ada di pasar - dijamin sebagai bilangan bulat non-negatif. Jika jenis sumber daya bukan U, maka tidak akan lebih besar dari 24. Jika jenis sumber daya adalah U, maka tidak akan lebih besar dari 12.
- Jumlah sumber daya yang ingin dibeli pemain - dijamin bilangan bulat non-negatif yang kurang dari atau sama dengan jumlah yang sudah ada di pasar.
Keluaran harus berupa biaya sumber daya yang diminta.
Aturan tambahan
- Formula yang diberikan hanya untuk tujuan ilustrasi, jangan ragu untuk menggunakan metode apa pun dalam menghitung biaya yang Anda suka.
- Kode huruf untuk berbagai jenis sumber daya (C, O, G, U) dapat diganti dengan setara dengan huruf kecil. Anda juga dapat mengganti huruf untuk angka, baik dalam bentuk
C=0, O=1, G=2, U=3
atauC=1, O=2, G=3, U=4
. - Ini adalah kode-golf , jadi pengiriman terkecil dalam byte akan menjadi pemenangnya.
- Jika kiriman Anda memerlukan input dalam urutan atau format yang berbeda dari yang ditentukan di bagian sebelumnya, Anda harus memberikan perincian.
Uji kasus
Format kasus uji:
resource type, amount in market, amount to buy
> result
Kasus uji:
C, 24, 4
> 5
C, 20, 4
> 10
O, 3, 3
> 24
U, 1, 1
> 16
C, 1, 1
> 8
G, 0, 0
> 0
O, 10, 7
> 44
U, 12, 4
> 10
G, 11, 4
> 22
f("O",1,5)
?f(G, 11, 4) = 22
danf(O, 10, 7) = 44
.Jawaban:
Javascript (ES6),
7159 byteMengambil
type
,market_amount
danbuy_amount
sebagai argumen.type
adalah bilangan bulat antara 0 dan 3.Demo
Tampilkan cuplikan kode
sumber
Python 3,
7169 byteBerkat @xnor untuk -2 byte
Fungsi yang mengambil input melalui argumen dari tipe sumber daya yang diindeks nol
r
, jumlah yang tersediaa
dan jumlah yang akan dibelib
, dan mengembalikan biaya.Ini memanfaatkan fakta bahwa
True
danFalse
menyamakan ke1
dan0
dengan Python, memungkinkan penggunaan ekspresi Boolean untuk diindeks ke dalam daftar.Bagaimana itu bekerja
Cobalah di Ideone
sumber
max(18-2*a,13-a)
di tempat[18-2*a,13-a][a>4]
.Befunge, 142 byte
Coba di sini!Mengambil input sebagai 3 bilangan bulat, di mana jenis sumber daya adalah 0,1,2,3. Output adalah bilangan bulat.
Tidak tahu apakah ini bisa bermain golf lebih baik. Tidak ada banyak ruang putih, tetapi baris baru mungkin sakit.
sumber
Python 2.7, 85 byte:
Berdasarkan jawaban R. Kap, tetapi Anda dapat mencukur byte hingga 85 dengan menghapus divisi ekstra / untuk lantai. Karena ini semua bilangan bulat, maka secara otomatis lantai menjadi bilangan bulat.
sumber
Python 2.7, 86 byte:
Mengambil input oleh array dalam format
[resource type, units available, units to purchase]
. Output adalah bilangan bulat. Akan mencoba bermain golf lebih lama.Cobalah secara Online! (Ideone)
sumber
Lua,
107101 BytesFungsi rekursif yang harus dipanggil dengan
f(resource,stock,buy)
. sumber daya harus berupa angka antara 0 dan 3. Output dilakukan melalui nilai yang dikembalikan.Terima kasih LeakyNun karena telah menyelamatkan saya 6 byte:
(25-y+(y-1)%3)/3
lebih pendek dari8-math.floor((y-1)/3)
5 byte dan memungkinkan saya untuk mendapatkan satu byte lagi karena penempatannya.Tidak disatukan
Anda dapat menguji kode ini secara online dengan menyalin-menempelkan cuplikan berikut.
sumber
6and
tidak akan berfungsi karena6a
merupakan nilai hex, tetapi6an
tidak.8-math.floor((y-1)/3)
benar(25-y+(y-1)%3)/3