# Exam ###### tags: `exam` /** * Write a function that returns a password whose length is passed as a parameter. */ /** * The generated password must be at least 3 characters long. * Password must comply with * at least three of the following four character categories: * - Contain at least one uppercase character (A-Z). * - Contain at least one lowercase character (a-z). * - Contain at least one digit (0-9). * - Contain at least one symbol (~!@#$%^&*_-+=`|(){}[]:;"'<>,.?/). */ /** * Case 1: * Input is not an integer. * For input: * passwordGenerator(null) or * passwordGenerator(undefined) or * passwordGenerator({}) or * passwordGenerator([]) or * passwordGenerator('') or * passwordGenerator(' ') or * passwordGenerator('abc') or * passwordGenerator('16.1') or * passwordGenerator(16.1) * Expected Output: 'Not an Integer' * * Case 2: * Input is less than 3. * * For Input: * passwordGenerator(2) Expected Output: 'Minimum length allowed: 3' * * Case 3: * Output is a string with desired length and complies * with at least three of the four character categories. * * For Input: * passwordGenerator(16) Expected Output: 8t=(eUz1/G*N;?v_ (Password as example) */ /** * - The name of the method to perform the task is already provided * with the correct definition of name and parameters * (passwordGenerator(charsQuantity)). * - The charsQuantity parameter must always be a number. * - RegExp can be used. */ /** * You would like to make a list of N top brand names * for a specific user based on his/her preferences. * * The method of compiling the list is as follows: * 1. Every user has a list of brands he/she likes most. * If there are at least N liked brands, * take the first N brand names from the list. * * 2. There are lists of brands which are most popular * among the users of each gender. * If the user's list does not have enough liked brands, * then the rest of the result list * should be filled up with top brands from list for the user's gender. * * 3. If the user's individual preference list * and the list for that user's gender combined do not provide enough brands, * you should finish with an error. * * Write a function: * function solution(U, N); * * that, given user U and the nmber of brand names N, * returns a Promise that should either be: * * - resolved with an array of exactly N top brand names for the given user, * in the following format: * ["Some Brand Name", "Other Brand Name", ...]; or * * - rejected with a CustomError with the message * "Not enough data" * (if there are fewer than N brand names to be listed, * or both Promises getLikedBrands(id) and getTopBrandsForGender(gender) are rejected). * * Technical details: * * Accessing data: * - The user parameter is an object of the following structure: * { id: 123132, gender: "FEMALE" }, * where id is an integer and gender is a string containing either "FEMALE" or "MALE". * * - The brand names liked by a specific user can be accessed * by calling the function getLikedBrands(id). * * - The list of brands for a gender can be obtained * by calling the function getTopBrandsForGender(gender). * * - The functions return Promises, * that will be rejected or resolved with data in the following format: * [ * { id: 123, name: "Some Brand Name" }, * { id: 456, name: "Other Brand Name" }, * ... * ] * * The result: * - The order of the brand names in the result list * should be the same as the order in the lists produced by the functions, * with brand names returned by getLikedBrands(id) listed first. * * - Brand names returned by * both functions getLikedBrands(id) and getTopBrandsForGender(gender) in combination, * should appear in the result list only once. * * Examples: * Given user U, * assume that getLikedBrands(U.id) returns * [ * { id: 1, name: "Logestyx" }, * { id: 10, name: "Gladlear" } * ] * and getTopBrandsForGender(U.gender) returns * [ * { id: 6, name: "Burylaze Slapgalt" }, * { id: 1, name: "Logestyx" }, * { id: 7, name: "Izarpure" } * ]. * * 1. For N=1, * your function should return a Promise * which resolves with an array ["Logestyx"]. * * 2. For N=3, * Promise should be resolved * with an array * [ "Logestyx", "Gladlear", "Burylaze Slapgalt"]. * * 3. For N=4, * Promise should be resolved * with an array * ["Logestyx", "Gladlear", "Burylaze Slapgalt", "Izarpure"]. * * 4. For N=5, * Promise should be rejected with a CustomError. * */ /** * Your task is to implement a React component * that renders a running-clock * that will count down time * until it reaches 0 minutes and 0 seconds (00:00). * * Requirements * Functionality * * Given the HTML structure: * <label> * <input type="number"> * Minutes * </label> * <label> * <input type="number"> * Seconds * </label> * * <button>START</button> * <button>PAUSE / RESUME</button> * <button>RESET</button> * * <h1 data-testid="running-clock">00:00</h1> * * implement a running-clock that receives its time value from user inputs * and allows the user to start, pause/resume the countdown and reset the clock. * * In order to satisfy the task's requirements, * you need to implement the following: * * 1. Time display: * - time is displayed in <h1 data-testid="running-clock"> * and its initial value is 00:00; * - time is displayed in mm:ss format; * - 1 minute, 5 seconds should be displayed as: 01:05; * - 1 minute, 65 seconds should be displayed as: 02:05. * * 2. Inputs: * - changing input values does not change the value * displayed in <h1 data-testid="running-clock">; * - inputs do not need to have max or min attributes; * - the clock doesn't need to handle negative values; * this is not a part of the solution and will not be evaluated. * * 3. Behavior: * 1. On a START button click, * set the clock value displayed in <h1 data-testid="running-clock"> * with the time calculated from the inputs and start counting down * 2. Once the clock is running, * update the displayed time every second * 3. Once the clock is running and the START button is clicked, * restart the clock with the same time originally provided in the inputs * 4. Once the countdown is done and the clock reaches 00:00, * stop counting and keep displaying 00:00 * 5. On a PAUSE / RESUME button click, * pause or resume the clock appropriately: * - PAUSE puts the countdown on hold * - RESUME resumes the countdown from where it left off * 6. Once the RESET button is clicked, * both inputs should be reset to 0 * 7. Once the RESET button is clicked, * the time displayed in <h1 data-testid="running-clock"> * should be reset to 00:00. * * Implementation hints & notice: * - Do not clear the inputs on a START button click. * - Use the same button element for both pause and resume actions. * - The following elements are used in tests and therefore must not be changed: * - <input> labels * - <button> texts * - <h1>element data-testid attribute value. * * Hints * - Only imports from the react module are allowed. * - Your solution will be evaluated based on its correctness. * - Design/styling is not assessed and will not affect the score. * You should focus only on implementing the requirements. * - The Preview tab will display your component. * You can use it for testing purposes. * - You can use console.log and console.error for debugging purposes * via your browser's developer tools. */