-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy path(6 kyu) IQ Test.js
41 lines (41 loc) · 1.26 KB
/
(6 kyu) IQ Test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// #1 Using for loop
// function iqTest(numbers) {
// numbers = numbers.split(' ');
// const evens = [];
// const odds = [];
// for (let i = 0; i < numbers.length; i++) {
// numbers[i] & 1 ? odds.push(i + 1) : evens.push(i + 1);
// }
// return evens.length === 1 ? evens[0] : odds[0];
// }
// #2 Using "some"
// const iqTest = (numbers) => {
// const evenOdd = [[0, 0], [0, 0]];
// numbers.split(' ').some((num, i) => {
// const n = num % 2;
// evenOdd[n][0]++; // store quantity
// evenOdd[n][1] = i; // store its index
// if (evenOdd[n][0] > 1 && evenOdd[+!n][0] == 1) {
// return true; // stop iterating when found
// }
// });
// return ++evenOdd[evenOdd[0][0] == 1 ? 0 : 1][1];
// };
// #3 Using "filter"
// const iqTest = (numbers) => {
// numbers = numbers.split(' ').map((el) => +el);
// const odd = numbers.filter((el) => el % 2 === 1);
// const even = numbers.filter((el) => el % 2 === 0);
// return odd.length < even.length
// ? numbers.indexOf(odd[0]) + 1
// : numbers.indexOf(even[0]) + 1;
// };
// #4 Using "reduce"
const iqTest = (numbers) => {
numbers = numbers.split` `.map((x) => +x % 2);
return (
(numbers.reduce((x, y) => x + y) === 1
? numbers.indexOf(1)
: numbers.indexOf(0)) + 1
);
};