# Ice Cream Parlor¶

This challenge is the same as the Two Sum on Codewars and Two Sum on LeetCode.

## JavaScript¶

### Solution 1¶

/**
* Finds the indices of two distinct indices in flavors that when
* added together are equal to money.
*
* NOTE: The challenge requires the output indices to start at 1 😅.
*
* ASSUME:
* - There is always a single, correct solution.
* - The input array is NOT sorted.
* - The input array could contain duplicate values.
*
* @sig Int -> [Int] -> [Int, Int]
* @param {number} money
* @param {Array<number>} flavorPrices
* @returns {[number, number]}
*/
function iceCreamParlor(money, flavorPrices) {
var len = flavorPrices.length,
i,
j;

for (i = 0; i < len; ++i) {
for (j = i + 1; j < len; ++j) {
if (flavorPrices[i] + flavorPrices[j] === money) {
return [i + 1, j + 1];
}
}
}
}


### Solution 2¶

/**
* Finds the indices of two distinct indices in flavors that when
* added together are equal to money.
*
* - T.C: O(n).
* - S.C: O(n).
*
* NOTE: The challenge requires the output indices to start at 1 😅.
*
* ASSUME:
*
* - There is always a single, correct solution.
* - The input array is NOT sorted.
* - The input array could contain duplicate values.
*
* @sig Int -> [Int] -> [Int, Int]
* @param {number} money
* @param {Array<number>} prices
* @returns {[number, number]}
*/
function iceCreamParlor(money, prices) {
var seen = {},
price,
complement,
idx = 0;

for (price of prices) {
complement = money - price;

if (seen[complement] !== undefined)
return [seen[complement], idx + 1];

seen[price] = idx + 1;
++idx;
}
}


This solution uses the seen object as a lookup table of sorts to figure out if the current price with the complement stored in seen totals money available.