# JavaScript Workshop Day 1

### It’s a Code Challenge Adventure

An interesting fact is that coming out of Turing, being able to do the job and getting the job can often involve different strategies. In some scenarios, what is asked of you in the technical part of an interview won’t involve building out an application. Rather, it could be an abstract logic problem that you will need to solve either in front of someone or on your own within a short time constraint. The following challenges will not only help you start to prepare for these, but will also help you review some of the concepts we’ve covered in class (for loops, conditionals, accessing values in objects, etc.). It is also likely that they will make you think in ways you haven’t previously (when to use return statements, how to access values in an object other than dot notation, etc.).

#### Scrabble Hand

Given an array of scrabble tiles, create a function that outputs the maximum possible score a player can achieve by summing up the total number of points for all the tiles in their hand. Each hand contains 7 scrabble tiles.

Here’s an example hand:

``````[
{ tile: "N", score: 1 },
{ tile: "K", score: 5 },
{ tile: "Z", score: 10 },
{ tile: "X", score: 8 },
{ tile: "D", score: 2 },
{ tile: "A", score: 1 },
{ tile: "E", score: 1 }
]
``````

The players maximumScore from playing all these tiles would be 1 + 5 + 10 + 8 + 2 + 1 + 1, or 28.

##### Examples
``````getMaximumScore([
{ tile: "N", score: 1 },
{ tile: "K", score: 5 },
{ tile: "Z", score: 10 },
{ tile: "X", score: 8 },
{ tile: "D", score: 2 },
{ tile: "A", score: 1 },
{ tile: "E", score: 1 }
]) ➞ 28

getMaximumScore([
{ tile: "B", score: 2 },
{ tile: "V", score: 4 },
{ tile: "F", score: 4 },
{ tile: "U", score: 1 },
{ tile: "D", score: 2 },
{ tile: "O", score: 1 },
{ tile: "U", score: 1 }
]) ➞ 15
``````

#### Online Shopping

Create a function that determines whether a shopping order is eligible for free shipping. An order is eligible for free shipping if the total cost of items purchased exceeds \$50.00.

##### Examples
``````checkForFreeShipping({ "Shampoo": 5.99, "Rubber Ducks": 15.99 }) ➞ false

checkForFreeShipping({ "Flatscreen TV": 399.99 }) ➞ true

checkForFreeShipping({
"Monopoly": 11.99,
"Secret Hitler": 35.99,
"Bananagrams": 13.99
}) ➞ true
``````
##### Notes
• Look into how you can create an array based on the values of an object.

#### Frequency Distribution

Create a function that returns the frequency distribution of an array. This function should return an object, where the keys are the unique elements and the values are the frequency in which those elements occur.

##### Examples
``````getFrequencies(["A", "B", "A", "A", "A"]) ➞ { A: 4, B: 1 }

getFrequencies([1, 2, 3, 3, 2]) ➞ { "1": 1, "2": 2, "3": 2 }

getFrequencies([true, false, true, false, false]) ➞ { true: 2, false: 3 }

getFrequencies([]) ➞ {}
``````
##### Notes
• Look into ways of grabbing values out of objects aside from dot notation.
• If given an empty array, return an empty object (see example #4).

#### Two of the Same

Create a function that checks to see if two object arguments are equal to one another. Return true if the objects are equal, otherwise, return false.

##### Examples
``````checkIfDataIsSame({
name: "Benny",
phone: "3325558745",
email: "benny@edabit.com"
}, {
name: "Jason",
phone: "9853759720",
email: "jason@edabit.com"
})

➞ false

checkIfDataIsSame({
name: "Jason",
phone: "9853759720",
email: "jason@edabit.com"
}, {
name: "Jason",
phone: "9853759720",
email: "jason@edabit.com"
})

➞ true
``````