... atau disana?
Tantangan Anda adalah mengurai tagihan makan siang saya, yang berisi harga dasar, tip, diskon, kupon, dan ekstra dan mencari tahu apakah makan siang saya adalah $ 0 atau kurang . Jika ini input:
12.34
15 tip
25 discount
1.5 extra
2 coupon
Maka hasilnya mungkin false
. Begini cara kerjanya:
12.34
adalah harga dasar.
15 tip
berarti menambahkan 15% dari total.
25 discount
berarti mengurangi 25% dari total.
1.5 extra
berarti menambahkan 1,5 ke total.
2 coupon
berarti mengurangi 2 dari total.
Mungkin ada sejumlah tips, diskon, kupon, dan ekstra, tetapi akan selalu ada satu harga dasar.
Kemudian kita lakukan (12.34 * 1.15) * 0.75 + 1.5 - 2
untuk output 10.14. 10.14 lebih besar dari 0, jadi kami menampilkan false. Makan siang saya tidak gratis.
Aturan
angka tip
berarti menambahkan angka persen ke total.
angka discount
berarti mengurangi angka persen dari total
angka extra
berarti menambahkan angka ke total
angka coupon
berarti mengurangi angka dari total
Contoh lain:
10
20 tip
20 discount
2 coupon
2 coupon
1 coupon
50 discount
2.55 coupon
Harganya -0.24
((10 * 1,20 * 0,80 - 2 - 2 - 1) * 0,5 - 2,55), jadi hasilnya benar (makan siang saya gratis.)
Catatan:
- Ketelitian harus minimal 2 angka desimal.
- Anda dapat mengambil input sebagai string dengan baris baru (mengikuti baris baru opsional) atau karakter pemisahan lain, atau array / daftar input.
15 tip
sebagai0.15 tip
Jawaban:
05AB1E ,
373334 byteCobalah online!
Penjelasan
Pinjam
mod 7
trik dari jawaban Jelly Jonathan Allan'ssumber
1
saat nilainya <1.JavaScript (ES6),
8885 byteMengambil input sebagai array string. Pengembalian
0
tidak gratis atau1
gratis.Bagaimana itu bekerja
Setiap baris dibagi pada ruang untuk mendapatkan
a
= jumlah,b
= jenis operasi. Jika tidak ada operasi sama sekali (yang merupakan kasus di baris pertama),b
diatur secara default ke"e"
untuk "ekstra".Untuk menambahkan jumlah yang benar ke total
t
, kami menggunakan objek yang kuncinya adalah huruf pertama dari operasi:Catatan : Jika tagihan hanya terdiri dari satu elemen,
map()
akan mengembalikan array elemen tunggal yang akan dipaksa ke integer ketika diterapkan|
operator, membuat tes akhir gagal. Tetapi OP menegaskan bahwa ini tidak bisa terjadi. (Array 2 atau lebih elemen dipaksa ke 0.)Demo
Tampilkan cuplikan kode
sumber
CJam ,
4542 byteAmbil input sebagai array string, dan ambil tip dan diskon sebagai desimal.
Cobalah online!
Penjelasan
Kode yang dievaluasi tergantung pada huruf pertama:
sumber
Jelly ,
4239 byteMengambil daftar string dengan angka berformat desimal
(Leading nol akan berfungsi, tetapi memiliki efek samping mencetak nol ke STDOUT sebelum hasil akhir).
Cobalah online! - tidak gratis; atau gratis .
Bagaimana?
sumber
GNU sed + dc,
117111107 byteMenggunakan
-z
bendera juru bahasa (termasuk dalam skor 1 byte):Penjelasan
Karena input sudah sangat dekat dengan notasi Reverse Polish, itu masalah sederhana untuk mengubah
extra
dancoupon
ke+
dan-
, dan tidak lebih untuk mengubah persentase menjadi pengganda. Kemudian memohondc
dan menghasilkan hasil yang dapat dibaca tergantung pada apakah-
ditemukan (kita harus meniadakan hasilnya, sehingga-
menyiratkan "tidak gratis", jika 0 akan menjadi kasus khusus yang akan membutuhkan penanganannya sendiri).Contoh
Kasus kedua dari pertanyaan adalah:
Itu menjadi
dc
program ini :Yang menghasilkan:
sumber
JavaScript,
173169145 byteMasih banyak golf yang harus dilakukan
Cobalah online! (145 byte saat ini)
Cobalah:
Terima kasih kepada programmer5000 untuk semua saran golfnya
sumber
{w=i.split`<nl>`
mana <nl> adalah baris literalf=
bagian, itu diizinkan oleh aturan, dan Anda dapat menggantinya$.split(' ')
dengan$.split` `
.JavaScript (ES6), 97
107Input sebagai string multiline dengan baris baru tambahan.
Regexp membagi bagian teks numerik dan opsional untuk setiap baris dalam d dan b .
Perhitungannya harus lebih kurang obviuos. Hanya beberapa catatan:
- gunakan
-=
untuk menghindari masalah pencampuran angka dengan string- jumlah dinegasikan untuk menghemat 1 byte, jadi cek terakhir adalah untuk
>= 0
bukan<= 0
PS masih jauh lebih lama dari @ Arnauld. Tikus
Uji
sumber
C #
324219 byteIni tidak cantik, dan mungkin bukan cara terbaik, tapi ini dia. Membutuhkan input yang dilewatkan sebagai string array, dan tip / diskon diluluskan sebagai float (
0.15 tip
bukan15 tip
) karena ini telah diklarifikasi sebagai dapat diterima dalam komentar spec.Penjelasan:
Pasti ada cara yang lebih baik untuk melakukan ini, tetapi ini setidaknya berhasil
sumber
100
dit
cabang.float.Parse(s.Split(' ')[0])
ke dalam sesuatu untuk mengurangi duplikasi. Itu akan menghemat sekitar 80 karakter.PowerShell ,
218156143 byteCobalah online!
EDIT Bytes yang disimpan dengan memisahkan variabel yang disalurkan sebelumnya
EDIT 2 Menyimpan bagian kedua dari string sehingga saya bisa membuat panggilan wildcard yang lebih baik
sumber
Python 133 byte
Mirip dengan versi JavaScript ES6. Tetapi konversi jenis diperlukan untuk
float
nilai dalam Python.Penjelasan:
Ekstrak nilai pertama dan ubah menjadi float.
Untuk setiap baris lain dalam tagihan:
float
dict
untuk memilih operasi yang tepat sesuai dengan huruf pertamaPemakaian:
sumber
Java 227 byte
Sudah lama dan masih tidak ada jawaban Java yang bisa saya lihat, jadi inilah jawaban C # saya porting ke Jawa, dengan biaya 8 byte
Untuk penjelasan dan semacamnya, lihat jawaban C # saya
Seperti jawaban itu, jawaban ini mengharapkan agar tip dan diskon diberikan sebagai float (
0.15
bukan15
)sumber
var
tipe generik, dan lambdas (Saya tahu Java memilikinya, tetapi C # lebih pandai golf)Jq 1.5 ,
129119114112 byteDiperluas
Cobalah online!
sumber