Skip to content

Instantly share code, notes, and snippets.

@ANesbytnov
Last active February 1, 2020 08:06
Show Gist options
  • Save ANesbytnov/03fcced2c429dd047a00e9e05e91057b to your computer and use it in GitHub Desktop.
Save ANesbytnov/03fcced2c429dd047a00e9e05e91057b to your computer and use it in GitHub Desktop.
JS. Задача 84: Анаграммы
/*
#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