Back to js-datatype-intermediate
05-mumbai-local-pass.js
JavaScript
1/**
2 * 🚂 Mumbai Local Train Pass Generator
3 *
4 * Aaj se tu Mumbai local ka digital pass system bana raha hai! Passenger
5 * ka data milega aur tujhe ek formatted pass string generate karni hai.
6 * Pass mein sab details honi chahiye ek specific format mein.
7 *
8 * Rules:
9 * - passenger object mein required fields: name, from, to, classType
10 * - classType must be "first" ya "second" (case-insensitive check)
11 * - Pass ID generate karo:
12 * classType ka first char uppercase + from ke pehle 3 letters uppercase
13 * + to ke pehle 3 letters uppercase
14 * Example: "first", "dadar", "andheri" => "F" + "DAD" + "AND" = "FDADAND"
15 * - Output format using template literal:
16 * Line 1: "MUMBAI LOCAL PASS"
17 * Line 2: "---"
18 * Line 3: "Name: <NAME IN UPPERCASE>"
19 * Line 4: "From: <From in Title Case>"
20 * Line 5: "To: <To in Title Case>"
21 * Line 6: "Class: <FIRST or SECOND>"
22 * Line 7: "Pass ID: <PASSID>"
23 * - Title Case = first letter uppercase, rest lowercase
24 * - Lines are separated by \n (newline)
25 * - Hint: Use template literals, slice(), toUpperCase(), toLowerCase(),
26 * charAt(), typeof
27 *
28 * Validation:
29 * - Agar passenger object nahi hai ya null hai, return "INVALID PASS"
30 * - Agar koi required field (name, from, to, classType) missing hai
31 * ya empty string hai, return "INVALID PASS"
32 * - Agar classType "first" ya "second" nahi hai, return "INVALID PASS"
33 *
34 * @param {{ name: string, from: string, to: string, classType: string }} passenger
35 * @returns {string} Formatted pass or "INVALID PASS"
36 *
37 * @example
38 * generateLocalPass({ name: "rahul sharma", from: "dadar", to: "andheri", classType: "first" })
39 * // => "MUMBAI LOCAL PASS\n---\nName: RAHUL SHARMA\nFrom: Dadar\nTo: Andheri\nClass: FIRST\nPass ID: FDADAND"
40 *
41 * generateLocalPass(null)
42 * // => "INVALID PASS"
43 */
44export function generateLocalPass(passenger) {
45 if(typeof passenger !== "object" || passenger === null){
46 return "INVALID PASS"
47 }
48 let fieldRequired = ["name", "from", "to", "classType"]
49
50
51 const hasInvalidField = fieldRequired.some(field => {
52 return (
53 !(field in passenger) ||
54 typeof passenger[field] !== "string" ||
55 passenger[field].trim() === ""
56 );
57 });
58
59 if (hasInvalidField) {
60 return "INVALID PASS";
61 }
62
63 if(passenger.classType.toLowerCase() !== "first" && passenger.classType.toLowerCase() !== "second"){
64 return "INVALID PASS"
65 }
66
67 let passId = passenger.classType.charAt(0).toUpperCase() + passenger.from.slice(0,3).toUpperCase() + passenger.to.slice(0,3).toUpperCase()
68
69 function convertTitleCase(name){
70 return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase()
71 }
72
73 return `MUMBAI LOCAL PASS\n---\nName: ${passenger.name.toUpperCase()}\nFrom: ${convertTitleCase(passenger.from)}\nTo: ${convertTitleCase(passenger.to)}\nClass: ${passenger.classType.toUpperCase()}\nPass ID: ${passId}`
74}
75