Created
July 11, 2018 10:03
-
-
Save corporateanon/6135e8d656329a391a366ab9074c38d2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Возвращает TRUE для чисел вида 122, 202, 221, то есть для таких, у которых есть неуникальные цифры. | |
* @param a | |
*/ | |
function hasDoubleElement(a) { | |
const aStr = a.toString(10); | |
//число уникальных символов меньше длины строки | |
return Array.from(new Set(aStr.split(''))).length < aStr.length; | |
} | |
/** | |
* Проверяет, являются ли числа `a` и `b` валидной парой. | |
* Возвращает FALSE, если числа имеют две и более общих цифр. | |
* Возвращает TRUE, в противном случае. | |
* | |
* @param a | |
* @param b | |
*/ | |
function isValidPair(a, b) { | |
const aStr = a.toString(10); | |
const bStr = b.toString(10); | |
let sameCount = 0; | |
for (let i = 0; i < aStr.length; i++) { | |
for (let j = 0; j < aStr.length; j++) { | |
if (aStr[i] === bStr[j]) { | |
sameCount++; | |
if (sameCount >= 2) { | |
return false; | |
} | |
} | |
} | |
} | |
return true; | |
} | |
/** | |
* Проверяет, можно ли число `a` добавить к списку `list` | |
* | |
* @param list | |
* @param a | |
*/ | |
function isValidListMember(list, a) { | |
return list.every(function(b) { | |
return isValidPair(a, b); | |
}); | |
} | |
/** | |
* Получить заданную последовательность чисел | |
* | |
* @param seed число которое должно присутствовать в списке | |
* @param start число, с которого следует начать перебор | |
* @param end число, которым следует закончить перебор | |
*/ | |
function getMagicNumbers(seed, start, end) { | |
const numbers = [seed]; | |
for (let i = start; i <= end; i++) { | |
if (!hasDoubleElement(i) && isValidListMember(numbers, i)) { | |
numbers.push(i); | |
} | |
} | |
return numbers; | |
} | |
console.log(getMagicNumbers(100, 100, 999)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment