Kembali ke Katalog
Back to Catalog
Solved
+25 pts
PHP
SOLID Architecture & OOP
Medium
PHP 04. SOLID Principles: Discount Calculator PHP 04. SOLID Principles: Discount Calculator
Hitung harga checkout bertingkat berdasarkan tier membership dan voucher flat. Calculate tiered checkout price based on membership and flat voucher.
Contoh Logika Serupa: Kalkulasi Pajak Kendaraan Similar Pattern Example: Tiered Vehicle Tax Calculation
Referensi Kode
Menggunakan ekspresi match untuk tarif persentase dan menambahkan biaya administrasi kondisional:
Using match expressions for rates and conditional extra fees:
<?php
function calculateTax(float $basePrice, string $type): float {
$rate = match(strtoupper($type)) {
'ELECTRIC' => 0.02,
'HYBRID' => 0.05,
default => 0.10,
};
$tax = $basePrice * $rate;
if ($basePrice > 100000000) {
$tax += 500000; // Biaya admin barang mewah
}
return $tax;
}
Langkah & Spesifikasi Tugas Step-by-Step Requirements
1
Tentukan persentase diskon membership:
PREMIUM = 20% (0.20), MEMBER = 10% (0.10), GUEST = 0% (0.0).
2
Hitung harga terdiskon awal:
$discounted = $subtotal - ($subtotal * $rate).
3
Syarat Voucher Ekstra: Jika nilai
$discounted >= 500000, berikan potongan tambahan flat sebesar Rp 25.000 ($discounted -= 25000).
4
Kembalikan nilai total harga akhir (float/number).
1
Determine membership rate:
PREMIUM = 20%, MEMBER = 10%, GUEST = 0%.
2
Compute discounted price:
$discounted = $subtotal - ($subtotal * $rate).
3
Voucher condition: If
$discounted >= 500000, deduct additional flat 25,000.
4
Return final calculated price.
Contoh Kasus & Ketentuan Example Cases & Rules
- Input:
(100000, "PREMIUM")→ Diskon 20% → Return:80000 - Input:
(600000, "MEMBER")→ Diskon 10% (540rb) + Flat 25rb → Return:515000 - Input:
(200000, "GUEST")→ Diskon 0% → Return:200000
- Input:
(100000, "PREMIUM")-> 20% off -> Return:80000 - Input:
(600000, "MEMBER")-> 10% off (540k) + Flat 25k off -> Return:515000 - Input:
(200000, "GUEST")-> 0% off -> Return:200000
Target Output (Expected) Expected Output
80000
Petunjuk Pengerjaan:
- Clue 1: Gunakan `match(strtoupper($membership))` untuk memetakan tier ke persentase desimal.
- Clue 2: Hitung diskon persentase dulu sebelum mengecek threshold 500.000.
- Clue 3: Potongan Rp 25.000 hanya diberikan jika harga setelah diskon persentase bernilai >= 500.000.
<?php
function calculateFinalPrice(float $subtotal, string $membership): float {
$rate = match(strtoupper($membership)) {
'PREMIUM' => 0.20,
'MEMBER' => 0.10,
default => 0.0,
};
$discounted = $subtotal - ($subtotal * $rate);
if ($discounted >= 500000) {
$discounted -= 25000;
}
return $discounted;
}
solution.php
✨ Kode dirapikan!
Test Case #
Target:
Output:
Pesan:
Login Diperlukan
Masuk dengan akun Google untuk mengeksekusi kodingan & query sandbox di server secara interaktif.