ダブりも消してOK
// 再帰関数(順列生成)
function getPermutations(str) {
if (str.length <= 1) return [str];
let results = [];
for (let i = 0; i < str.length; i++) {
let char = str[i];
let remaining = str.slice(0, i) + str.slice(i + 1);
for (let p of getPermutations(remaining)) {
results.push(char + p);
}
}
return results;
}
const target = "ビートたけし";
// 1. 全通り生成
const rawList = getPermutations(target);
// 2. Setを使って重複を削除
// [...new Set(配列)] という書き方でユニークな配列になります
const uniqueList = [...new Set(rawList)];
// 3. フィルタリング(NG文字チェック)
const invalid = [
"ー", "ん", "ン", "っ", "ッ",
"ぁ", "ぃ", "ぅ", "ぇ", "ぉ", "ァ", "ィ", "ゥ", "ェ", "ォ",
"ゃ", "ゅ", "ょ", "ゎ", "ャ", "ュ", "ョ", "ヮ", "ヵ", "ヶ"
];
const filtered = uniqueList.filter(name => !invalid.includes(name[0]));
// 結果表示
console.log(`生成数: ${rawList.length} -> 重複排除: ${uniqueList.length} -> フィルタ後: ${filtered.length}`);
console.log(filtered.join("\n"));