# "Pure JS" exercises ## Commands - Only built-in functions allowed: `split()`, `slice()`, `parseInt()`, `parseFloat()`, `Math.random()` and `Math.floor()`. **NO OTHER BUILT-IN FUNCTIONS!** - Inputs and outputs are examples, not a unique use case! - Code structure must be the same as the commands implemented during the live-coding, not another structure - For all commands, we consider that the user inputs valid parameters, so input validation is not expected! ### Command `add` - Write a command which adds two numbers - Input: `add 2 2` - Ouput: `4` ### Command `square` - Write a command which calculates the square of one number - Input: `square 2` - Output: `4` ### Command `area` - Write a command which calculates the area with two parameters - Input: `area 2 2` - Output: `4` ### Command `revstr` - Write a command which reverses a string - Input: `revstr "hello toto"` - Output: `otot olleh` ### Command `sum` - Write a command which calculates the sum of `n` numbers - Input: `sum 3,4,6,2` - Output: `15` ### Command `max` - Write a command which finds the max value from `n` unordered numbers - Input: `max 3,4,6,1` - Output: `6` ### Command `cntocc` - Write a command which counts the number of occurences of a letter in a string - Input: `cntocc "Hello world!" l` - Output: `3` ### Command `statsn` - Write a command which calculates the average, the min, the max, and counts the number of values greater than or equal to the average - Input: `statsn 1,3,2` - Output: `Avg: 2, min: 1, max: 3, count: 2` ### Command `cntoe` - Write a command which counts the number of odds and evens in a list of n integers - Input: `cntoe 2,5,6,9` - Output: `Odds: 2, Evens: 2` ### Command `unqstr` - Write a command which extracts from a string the characters appearing only once - Input: `unqstr "Hello world!"` - Output: `['H','e','w',' ','r','d','!']` ### Command `pairs` - Write a command which returns pairs of equal letters from a "shuffled" list of characters, excluding ones appearing once or more than twice. Order of returned pairs is not important - Input: `pairs a,c,b,a,b,c,h,h,h,o` - Output: `[['a','a'],['c','c'],['b','b']]` ### Command `shift` - Write a command which shifts letters of a text given a number of places and a direction - The text contains only letters from the latin alphabet, uppercased, unaccented. In other words only letters from `A` to `Z`. Text can contain whitespaces between words, whitespaces are not shifted - The number of places indicates the number of shifts - The direction indicates if the shift is to the right (`R`) or to the left (`L`) - Input: `shift R 3 "HELLO WORLDZ"` - Output: `KHOOR ZRUOGC` ### Command `passw` - Write a command which generates a random text (password) - Must have `n` characters from these `classes`: `4` x `a-z`, `4` x `A-Z`, `4` x `0-9` and `1` x `@&#";!*=`. A character from one class can appear more than once - Classes must be "mixed up", each character from any class should appear anywhere in the generated text ### Command `invoice` - Write a command which calculates the details and totals (with and without VAT) for an invoice - Products, quantities, unit prices and rates are ordered and have the same number of "elements" - Unit prices are without VAT - VAT is input in `%` - Results do not have to be rounded - Input: `invoice "bread, butter, coca-cola light" 2,1,3 .94,1.88,2.09 5.5,5.5,20.0` - Output: one line per product with name, quantity, unit price, total without VAT, VAT rate, total with VAT. Then one lats line with the total without VAT and total with VAT ### Command `fmtstrtojson` - Write a command which formats a string into a json - Try to infer the conversion rules from the examples below (no more/no less) to handle JS strings, booleans and numbers only - Input: `fmtstrtojson "firstName='Toto' lastName='MIAOU' happy=true age=16 nickname='false'"` - Output: `{"firstName": "Toto", "lastName": "MIAOU", "happy": true, "age": 16, "nickname": "false"}`