Last active
February 1, 2020 08:06
-
-
Save ANesbytnov/03fcced2c429dd047a00e9e05e91057b to your computer and use it in GitHub Desktop.
JS. Задача 84: Анаграммы
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
/* | |
#announcement #task_84 | |
🎓 Задача 84: Анаграммы | |
Анаграммой слова называется любая перестановка всех букв слова. Например, из слова СОЛО можно получить 12 анаграмм: СОЛО, ЛОСО, ОСЛО, ОЛСО, ОСОЛ, ОЛОС, СЛОО, ЛСОО, ООЛС, ООСЛ, ЛООС, СООЛ. | |
Необходимо написать функцию, ктр выведет кол-во различных анаграмм, ктр могут получиться из этого слова. | |
Входные данные: строка, кол-во символов не превышает 10. | |
Вывод: кол-во анаграмм. | |
Пример: СОЛО | |
Вывод: 12 | |
*/ | |
'use strict'; | |
function getCountAnagrams(word) { | |
let uniqueWords = []; // уникальные слова | |
const chars = word.split(''), // набор букв | |
total = chars.length; // количество букв | |
// Функция получает на вход массив уникальных индексов, из которых собирает слово и проверяет, есть ли оно в uniqueWords. Если нет, то добавляет. | |
function checkWord(arr) { | |
let newWord = ''; | |
arr.forEach((elem) => newWord += chars[elem]); | |
if (!uniqueWords.includes(newWord)) { | |
uniqueWords.push(newWord); | |
} | |
} | |
// Рекурсия получает массив использованных индексов | |
function recursion(arr) { | |
for (let i = 0; i < total; i++) { | |
if (!arr.includes(i)) { | |
arr.push(i); | |
if (arr.length === total) { | |
checkWord(arr); | |
} else { | |
recursion(arr); | |
} | |
arr.pop(); | |
} | |
} | |
} | |
recursion([]); | |
return uniqueWords.length; | |
} | |
console.log(getCountAnagrams('ХОЛОДИЛ')); | |
console.log(getCountAnagrams('ХОЛОДИ')); | |
console.log(getCountAnagrams('ХОЛОД')); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment