diff --git a/client/i18n/locales/english/intro.json b/client/i18n/locales/english/intro.json index d868192c26e..fc932dd5e0e 100644 --- a/client/i18n/locales/english/intro.json +++ b/client/i18n/locales/english/intro.json @@ -2166,6 +2166,12 @@ "You will review how to add and remove elements from an array using methods like push, pop, shift, and unshift." ] }, + "lab-lunch-picker-program": { + "title": "Build a Lunch Picker Program", + "intro": [ + "In this lab, you will review working with arrays and random numbers by building a lunch picker program." + ] + }, "mokm": { "title": "161", "intro": [] }, "froz": { "title": "162", "intro": [] }, "quiz-javascript-arrays": { diff --git a/client/src/pages/learn/front-end-development/lab-lunch-picker-program/index.md b/client/src/pages/learn/front-end-development/lab-lunch-picker-program/index.md new file mode 100644 index 00000000000..6367534c891 --- /dev/null +++ b/client/src/pages/learn/front-end-development/lab-lunch-picker-program/index.md @@ -0,0 +1,9 @@ +--- +title: Introduction to the Build a Lunch Picker Program +block: lab-lunch-picker-program +superBlock: front-end-development +--- + +## Introduction to the Build a Lunch Picker Program + +In this lab, you create a lunch picker user arrays and random numbers diff --git a/curriculum/challenges/_meta/lab-lunch-picker-program/meta.json b/curriculum/challenges/_meta/lab-lunch-picker-program/meta.json new file mode 100644 index 00000000000..142c6d51eaf --- /dev/null +++ b/curriculum/challenges/_meta/lab-lunch-picker-program/meta.json @@ -0,0 +1,11 @@ +{ + "name": "Build a Lunch Picker Program", + "isUpcomingChange": true, + "usesMultifileEditor": true, + "dashedName": "lab-lunch-picker-program", + "order": 160, + "superBlock": "front-end-development", + "challengeOrder": [{ "id": "66db529d37ad966480ebb633", "title": "Build a Lunch Picker Program" }], + "helpCategory": "JavaScript", + "blockType": "lab" +} diff --git a/curriculum/challenges/english/25-front-end-development/lab-lunch-picker-program/66db529d37ad966480ebb633.md b/curriculum/challenges/english/25-front-end-development/lab-lunch-picker-program/66db529d37ad966480ebb633.md new file mode 100644 index 00000000000..06bd6c5e6c9 --- /dev/null +++ b/curriculum/challenges/english/25-front-end-development/lab-lunch-picker-program/66db529d37ad966480ebb633.md @@ -0,0 +1,261 @@ +--- +id: 66db529d37ad966480ebb633 +title: Build a Lunch Picker Program +challengeType: 14 +dashedName: build-a-lunch-picker-program +--- + +# --description-- + +In this lab, you'll build a program that helps in managing lunch options. You'll work with an array of lunches, add and remove items from the array, and randomly select a lunch option. + +**Objective:** Fulfill the user stories below and get all the tests to pass to complete the lab. + +**User Stories:** + +1. You should create a `lunches` variable and assign it an empty array that will be used to store lunch items. + +2. You should create a function `addLunchToEnd` that takes a string parameter and adds it to the end of the `lunches` array and returns a string in the format: `"[Lunch Item] added to the end of the lunch menu."` + +3. You should create a function `addLunchToStart` that takes a string parameter and adds it to the start of the `lunches` array and returns a string in the format: `"[Lunch Item] added to the start of the lunch menu."` + +4. You should create a function `removeLastLunch` that removes the last lunch item from the `lunches` array and: + - If successful, returns a string in the format: `"[Lunch Item] removed from the end of the lunch menu."` + - If the `lunches` array is empty, returns a string: `"No lunches to remove."` + +5. You should create a function `removeFirstLunch` that removes the first lunch item from the `lunches` array and: + - If successful, returns a string in the format: `"[Lunch Item] removed from the start of the lunch menu."` + - If the `lunches` array is empty, returns a string: `"No lunches to remove."` + +6. You should create a function `getRandomLunch` that selects a random lunch item from the `lunches` array and: + - If successful, returns a string in the format: `"Randomly selected lunch: [Lunch Item]"` + - If the `lunches` array is empty, returns a string: `"No lunches available."` + +7. You should create a function `showLunchMenu` that: + - If there are items in the `lunches` array, returns a string in the format: `"Menu items: [Lunch Item], [Lunch Item]...` + - If the `lunches` array is empty, returns a string: `"The menu is empty."` + +# --hints-- + +You should declare a variable `lunches` and assign it an empty array to store the lunch items. + +```js +assert.isArray(lunches); +``` + +You should define a function `addLunchToEnd`. + +```js +assert.isFunction(addLunchToEnd); +``` + +The function `addLunchToEnd` should take a single argument. + +```js +assert.lengthOf(addLunchToEnd, 1); +``` + +`addLunchToEnd("Tacos")` should return the string `"Tacos added to the end of the lunch menu."`. + +```js +assert.strictEqual(addLunchToEnd("Tacos"), "Tacos added to the end of the lunch menu."); + +// prevent hardcoding +assert.strictEqual(addLunchToEnd("Pizza"), "Pizza added to the end of the lunch menu."); +assert.strictEqual(addLunchToEnd("Burger"), "Burger added to the end of the lunch menu."); +``` + +You should define a function `addLunchToStart`. + +```js +assert.isFunction(addLunchToStart); +``` + +The function `addLunchToStart` should take a single argument. + +```js +assert.lengthOf(addLunchToStart, 1); +``` + +`addLunchToStart("Sushi")` should return the string `"Sushi added to the start of the lunch menu."`. + +```js +assert.strictEqual(addLunchToStart("Sushi"), "Sushi added to the start of the lunch menu."); + +// prevent hardcoding +assert.strictEqual(addLunchToStart("Salad"), "Salad added to the start of the lunch menu."); +assert.strictEqual(addLunchToStart("Pasta"), "Pasta added to the start of the lunch menu."); +``` + +You should define a function `removeLastLunch`. + +```js +assert.isFunction(removeLastLunch) +``` + +When the `lunches` array is empty, the function `removeLastLunch` should return the string `"No lunches to remove."`. + +```js +lunches = []; +assert.strictEqual(removeLastLunch(), "No lunches to remove."); +``` + +When `lunches = ["Stew", "Soup", "Toast"]`, the function `removeLastLunch` should return the string `"Toast removed from the end of the lunch menu."`. + +```js +lunches = ["Stew", "Soup", "Toast"]; +assert.strictEqual(removeLastLunch(), "Toast removed from the end of the lunch menu."); + +// prevent hardcoding +assert.strictEqual(removeLastLunch(), "Soup removed from the end of the lunch menu."); +assert.strictEqual(removeLastLunch(), "Stew removed from the end of the lunch menu."); +``` + +When the `lunches` array is empty, the function `removeFirstLunch` should return the string `"No lunches to remove."`. + +```js +lunches = []; +assert.strictEqual(removeFirstLunch(), "No lunches to remove."); +``` + +When `lunches = ["Salad", "Eggs", "Cheese"]`, the function `removeFirstLunch` should return the string `"Salad removed from the start of the lunch menu."`. + +```js +lunches = ["Salad", "Eggs", "Cheese"]; +assert.strictEqual(removeFirstLunch(), "Salad removed from the start of the lunch menu."); + +// prevent hardcoding +assert.strictEqual(removeFirstLunch(), "Eggs removed from the start of the lunch menu."); +assert.strictEqual(removeFirstLunch(), "Cheese removed from the start of the lunch menu."); +``` + +You should define a function `getRandomLunch`. + +```js +assert.isFunction(getRandomLunch); +``` + +When the `lunches` array is empty, the function `getRandomLunch` should return the string `"No lunches available."`. + +```js +lunches = []; +assert.strictEqual(getRandomLunch(), "No lunches available."); +``` + +When `lunches = ["Fish", "Fries", "Roast"]`, the function `getRandomLunch` should return a string in the format `"Randomly selected lunch: [Lunch Item]"`. + +```js +const temp = Math.random; + +lunches = ["Fish", "Fries", "Roast"]; + +// check that it correctly outputs the first item +Math.random = () => 0; +assert.equal(getRandomLunch(), `Randomly selected lunch: ${lunches[0]}`); + +// second item +Math.random = () => 0.4; +assert.equal(getRandomLunch(), `Randomly selected lunch: ${lunches[1]}`); + +// third item +Math.random = () => 0.8; +assert.equal(getRandomLunch(), `Randomly selected lunch: ${lunches[2]}`); + +// restore Math.random +Math.random = temp; +``` + +You should define a function `showLunchMenu`. + +```js +assert.isFunction(showLunchMenu); +``` + +When the `lunches` array is empty, the function `showLunchMenu` should return the string `"The menu is empty."`. + +```js +lunches = []; +assert.strictEqual(showLunchMenu(), "The menu is empty."); +``` + +When `lunches = ["Greens", "Corns", "Beans"]`, the function `showLunchMenu` should return a string in the format `"Menu items: Greens, Corns, Beans"`. + +```js +lunches = ["Greens", "Corns", "Beans"]; +assert.strictEqual(showLunchMenu(), "Menu items: Greens, Corns, Beans"); + +lunches = ["Pizza", "Burger", "Fries"]; +assert.strictEqual(showLunchMenu(), "Menu items: Pizza, Burger, Fries"); +``` + +# --seed-- + +## --seed-contents-- + +```js + +``` + +# --solutions-- + +```js +const lunches = []; + +// Add a new lunch to the list (at the end) +function addLunchToEnd(newLunch) { + lunches.push(newLunch); + return `${newLunch} added to the end of the lunch menu.`; +} + +// Add a new lunch to the start of the list +function addLunchToStart(newLunch) { + lunches.unshift(newLunch); + return `${newLunch} added to the start of the lunch menu.`; +} + +// Remove the last lunch from the list +function removeLastLunch() { + const removedLunch = lunches.pop(); + if (removedLunch) { + return `${removedLunch} removed from the end of the lunch menu.`; + } else { + return "No lunches to remove."; + } +} + +// Remove the first lunch from the list +function removeFirstLunch() { + const removedLunch = lunches.shift(); + if (removedLunch) { + return `${removedLunch} removed from the start of the lunch menu.`; + } else { + return "No lunches to remove."; + } +} + +// Function to get a random lunch from the list +function getRandomLunch() { + if (lunches.length === 0) { + return "No lunches available."; + } + const randomIndex = Math.floor(Math.random() * lunches.length); + const randomLunch = lunches[randomIndex]; + return `Randomly selected lunch: ${randomLunch}`; +} + +// New function to display the lunches as a numbered menu using a for loop +function showLunchMenu() { + if (lunches.length === 0) { + return "The menu is empty."; + } + return `Menu items: ${lunches.join(', ')}`; +} + +addLunchToEnd("Tacos"); +addLunchToStart("Sushi"); +removeLastLunch(); +removeFirstLunch(); +getRandomLunch(); +showLunchMenu(); + +```