Back to js-loops
03-auto-rickshaw-meter.js
JavaScript
1/**
2 * 🛺 Pappu ka Auto Rickshaw Meter (Mumbai Style)
3 *
4 * Pappu auto chalata hai Mumbai mein. Uska meter thoda unique hai - distance
5 * ke hisaab se rate change hota hai. Aur agar passenger ne waiting karaya,
6 * toh uska bhi charge lagta hai.
7 *
8 * Fare calculation (use while loop, process km by km):
9 * - First 1 km (minimum fare): Rs 30
10 * - Km 2 to 5 (i.e., next 4 km): Rs 15 per km
11 * - Beyond 5 km: Rs 10 per km
12 * - Distance ko Math.ceil() karo (e.g., 3.2 km = 4 km charge)
13 *
14 * Waiting charges:
15 * - Rs 5 per 2 minutes of waiting
16 * - Waiting minutes ko bhi Math.ceil() karo for pairs
17 * (e.g., 3 min = 2 pairs = Rs 10, 5 min = 3 pairs = Rs 15)
18 * - If waitingMinutes is not provided, default is 0
19 *
20 * Validation:
21 * - Agar distance ek positive number nahi hai, return -1
22 * - Agar waitingMinutes negative hai, return -1
23 *
24 * @param {number} distance - Distance in kilometers
25 * @param {number} [waitingMinutes=0] - Waiting time in minutes
26 * @returns {number} Total fare in rupees, or -1 for invalid input
27 *
28 * @example
29 * calculateAutoFare(3) // => 60 (30 + 15 + 15)
30 * calculateAutoFare(7, 4) // => 120 (30 + 60 + 20 + 10)
31 * calculateAutoFare(0.5) // => 30 (ceil to 1 km = minimum fare)
32 * calculateAutoFare(-2) // => -1
33 */
34export function calculateAutoFare(distance, waitingMinutes = 0) {
35 if( typeof distance !== "number" || distance <= 0 || waitingMinutes < 0){
36 return -1
37 }
38
39 distance = Math.ceil(distance)
40 let fare = 0;
41 let counter = 1;
42 while(distance >= counter){
43 if(counter == 1){
44 fare = 30
45 } else if(1 < counter && counter <= 5){
46 fare += 15
47 }else if(counter > 5){
48 fare += 10
49 }
50 counter++
51 }
52
53 let waitingPairs = Math.ceil(waitingMinutes/2)
54
55 let waitingFare = waitingPairs * 5;
56
57 return fare + waitingFare
58
59}
60