Fred adalah pria yang sangat ramah, tetapi kenyataannya dia jahat.
Karena itu, Fred tinggal sendirian di sebuah apartemen kecil di Los Altos, CA. Fred sangat kejam karena dia sangat khusus tentang air. Karena itu, ia membutuhkan bantuan Anda untuk mencari tahu berapa tagihan airnya.
Tugas Anda adalah menulis fungsi atau program yang mengembalikan tagihan airnya mengingat jumlah air yang digunakan sebagai input (yang selalu berupa bilangan bulat).
Konsumsi air datang dalam tingkatan. Ini berarti ada kisaran harga tergantung pada jumlah air.
Ini adalah tingkatan, harganya, dan jumlah air yang sesuai dengan:
Tier I
First 10 Ccf: $3.8476/Ccf
Tier II
Next 17 Ccf: $4.0932/Ccf
Tier III
All subsequent water: $4.9118/Ccf
Untuk n ratusan kaki kubik (Ccf), ada juga biaya tambahan berikut:
CPUC fee: 1.5% of above charges
LIRA quantity surcharge: $0.047*n
PBOP amoritization surcharge: $0.004*n
Jumlah biaya Tier I, Tier II, Tier III, CPUC, LIRA, dan PBOP adalah total tagihan air. Jumlah ini Anda harus mengembalikan atau mencetak ke konsol dibulatkan ke dua tempat desimal.
Berikut ini dua contoh:
Input: 15
... Calculations which you do not need to output but here to help explain:
Tier I: 10*3.8476 = 38.476
Tier II: (15-10)*4.0932 = 20.466
Tier III: 0*4.9118 = 0
Tiers sum: 58.942
CPUC: 1.5% of 58.942 = 0.88413
LIRA: 0.047*15 = 0.705
PBOP: 0.004*15 = 0.06
Total sum: 58.942 + 0.88413 + 0.705 + 0.06 = 60.59113
...
Output: 60.59
Input: 100
... Calculations which you do not need to output but here to help explain:
Tier I: 10*3.8476 = 38.476
Tier II: 17*4.0932 = 69.5844
Tier III: (100-10-17)*4.9118 = 358.5614
Tiers sum: 466.6218
CPUC: 1.5% of = 6.999327
LIRA: 0.047*100 = 4.7
PBOP: 0.004*100 = 0.4
Total sum: 478.721127
...
Output: 478.72
Ini adalah kode golf sehingga kode terpendek dalam byte menang!
n
?Jawaban:
Pyth,
5541 byteKode berisi karakter yang tidak patut
xxd
dicetak , jadi ini hexdump.Penjelasan
."…"
adalah string yang berisi3.8476,4.0932,4.9118
.v
mengevaluasi itu ke tuple(3.8476, 4.0932, 4.9118)
. Ini adalah harga tingkatan yang dikalikan dengan CPUC yang ditambahkan.UQ
menghasilkan kisaran0
...n-1
.c
...,T27
pisahkan kisaran itu pada indeks 10 dan 27, dengan daftar kosong tambahan pada akhirnya jika kisarannya terlalu pendek.lM
menemukan panjang setiap bagian, memberikan jumlah air untuk setiap tingkatan.*V
mengalikan bahwa dengan tuple dari langkah 2 untuk mendapatkan harga untuk tingkatan.s
jumlah hasilnya.+
…*Q.051
Menambahkan input yang dikalikan dengan 0,051, yaitu LIRA + PBOP..R
...2
bulatkan hasilnya menjadi 2 desimal.Cobalah online.
sumber
Mathematica,
837669 byteFungsi anonim yang membangun array dari tiga tingkatan di kolom pertama ditambah LIRA dan PBOP direpresentasikan sebagai angka presisi sewenang-wenang di kolom keempat. Seluruhnya dikalikan dengan
1.015
dan semua elemen array dijumlahkan dan dibulatkan menjadi.01
. Karena51/1015*1.015
akan menjadi yang diinginkan0.051
, outputnya sama persis dengan spesifikasi dalam OP.Solusi yang lebih pendek, dalam 76 byte , seperti yang saya sarankan dalam komentar saya di bawah solusi Perl
di mana
1.015
diperhitungkan dalam harga dari awal dan kemudian LIRA dan PBOP ditambahkan di atas tingkat pertama.73 byte (tapi saya enggan untuk memperbarui byte-count saya karena ini cukup dekat dengan solusi Perl langsung):69 byte - ah apa-apaan, golf butuh usaha juga.
EDIT tentang kesalahan floating point
Tiga iterasi pertama dari jawaban saya memang tepat dalam representasi desimal mereka, karena semua koefisien yang terlibat telah mengakhiri representasi desimal. Namun, karena koefisien secara eksplisit mengapung, disimpan dalam biner dan memiliki representasi biner non-terminasi, input yang cukup besar akan mulai mengakumulasi kesalahan dalam digit paling tidak signifikan dari representasi biner. Saya kira, ketika float itu begitu besar, yang hanya muat 3-4 digit di sebelah kanan titik desimal, kita bisa mengharapkan kesalahan sekitar 1 sen. Lihat di bawah untuk jawaban yang tepat .
72 byte, agak kebal terhadap ketidakakuratan apung
Penggandaan oleh pimpinan
.01
dilakukan pada langkah terakhir. Sampai saat itu, semua perhitungan dilakukan dengan bilangan bulat. Ini berarti, bahwa jika.01
dihilangkan, akan ada hasil yang tepat , tetapi dinyatakan dalam sen, bukan dalam dolar. Tentu saja, perkalian dengan float mengubah seluruh hal menjadi float, dan, seperti yang disebutkan, itu harus cukup kecil untuk masuk ke 64 bit dan masih akurat.01
.sumber
05AB1E,
645851 byteDijelaskan
Cobalah online
sumber
Perl 5, 73 byte
Solusi yang jelas. 72 byte, ditambah 1 untuk
-ne
bukannya-e
.Disimpan 5 byte berkat LLlAMnYP . Terima kasih!
sumber
.01
, itu akan tetap akurat selama integer dapat disimpan.Oracle SQL 11.2, 151 byte
Tidak bermain golf
sumber
SELECT
dan((DECODE
untuk menghemat satu byte. Hemat lebih 10 byte menggunakan tabel bernama! 7 dengan menghapus titik dua dan menggunakan nama kolom satu char ditambah tiga menggunakan nama tabel satu char.JavaScript ES6, 77 byte
Tidak bermain golf
Saya memperhitungkan faktor koefisien LIRA dan PBOP. 1,5% ekstra akan ditambahkan di akhir.
Mungkin bukan solusi yang paling efisien dalam hal bermain golf tetapi agak berbeda dari yang Perl.
Kesalahan floating point harus terjadi dengan angka yang lebih besar dan dapat diperbaiki dengan menambahkan 1 atau 2 byte tambahan untuk setiap koefisien.
sumber
()
di sekitarx>10?:
,?:
rekan kanan-ke-kiri. Saya pikir Anda juga dapat menyimpan beberapa byte dengan mengalikan tanda kurung misalnya(x-10)*4.154598+39.05314
samax*4.154598-41.54598+39.05314
dengan samax*4.154598-2.49284
.R , 52 byte
Cobalah online!
Menghasilkan fungsi perkiraan linier, berdasarkan nilai jawaban saya sebelumnya di 0,10,27 dan 10 ^ 6. Tangkapan: batas atas pada input adalah 10 ^ 6.
approxfun
(denganecdf
,stepfun
,splinefun
, dll) adalah salah satu dari banyak fitur bagus dariR
.sumber
VBA, 88 byte
Tingkat dasar dan tingkat diferensial penggunaan yang lebih tinggi telah dikalikan dengan 5, dan pengali biaya CPUC dibagi dengan 5 (0,203).
Editor VB akan menambahkan
End Function
baris, itulah sebabnya umpan baris terminal disertakan.sumber
Pyth -
5851 byteTest Suite .
sumber