diff --git a/js-core/homeworks/homework-21/index.html b/js-core/homeworks/homework-21/index.html new file mode 100644 index 0000000..c25919d --- /dev/null +++ b/js-core/homeworks/homework-21/index.html @@ -0,0 +1,11 @@ + + + + + Home work 21 + + + + + + \ No newline at end of file diff --git a/js-core/homeworks/homework-21/src/main.js b/js-core/homeworks/homework-21/src/main.js new file mode 100644 index 0000000..5acb32b --- /dev/null +++ b/js-core/homeworks/homework-21/src/main.js @@ -0,0 +1,36 @@ +/* TASK 0 +Сделайте валидацию кредитной карты, валидация происходит +используя алгоритм Луна. +Простое описание: +1. Начиная с последнего правого числа, двигаясь влево, +умножайте каждое второе число на 2, +если результат умножения больше 9 +(например 8 х 2 = 16), +тогда сумируйте получившиеся число +(например 16: 1+6 = 7, 18: 1+8 = 9). +2. Получите сумму всех чисел. +3. Если сумма всех чисел кратно 10, тогда число является подходящим, +иначе нет. +P.S. -> проверьте на свой карте. +arguments ["4408041234567893"] => expected true +arguments ["1234567890123456"] => expected false +arguments ["4408042234567893"] => expected false +arguments ["38520000023237"] => expected true +arguments ["4222222222222"] => expected true +*/ + +const solution = (credit_num) => { + return !(credit_num.split("").reverse().map((checkNum, i) => { + checkNum = parseInt(checkNum, 10); + return i % 2 == 0 + ? checkNum + : (checkNum *= 2) > 9 ? checkNum - 9 : checkNum; + }).reduce((a, b) => a + b) % 10); +} + +console.log(solution('4408041234567893')); +console.log(solution('1234567890123456')); +console.log(solution('4408042234567893')); +console.log(solution('38520000023237')); +console.log(solution('4222222222222')); +