ビートたけしのアナグラム

1以下、名無しにかわりましてVIPがお送りします:2025/12/07(日) 21:28:05.57 ID:8qu0EzG2

全通り出力するプログラムについて考えたときに再帰関数だよなってAIに聞いたらやっぱり再帰関数だった
JavaScriptです

// 再帰関数
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;
}

// 実行して表示
console.log(getPermutations("ビートたけし").join("\n"));

2以下、名無しにかわりましてVIPがお送りします:2025/12/07(日) 21:33:18.24 ID:8qu0EzG2

せっかくだから実行結果も貼っておくぞ

ビートたけし, ビートたしけ, ビートけたし, ビートけした, ビートしたけ, ビートしけた, ビーたトけし, ビーたトしけ, ビーたけトし, ビーたけしト, ビーたしトけ, ビーたしけト, ビーけトたし, ビーけトした, ビーけたトし, ビーけたしト, ビーけしトた, ビーけしたト, ビーしトたけ, ビーしトけた, ビーしたトけ, ビーしたけト, ビーしけトた, ビーしけたト, ビトーたけし, ビトーたしけ, ビトーけたし, ビトーけした, ビトーしたけ, ビトーしけた, ビトたーけし, ビトたーしけ, ビトたけーし, ビトたけしー, ビトたしーけ, ビトたしけー, ビトけーたし, ビトけーした, ビトけたーし, ビトけたしー, ビトけしーた, ビトけしたー, ビトしーたけ, ビトしーけた, ビトしたーけ, ビトしたけー, ビトしけーた, ビトしけたー, ビたートけし, ビたートしけ, ビたーけトし, ビたーけしト, ビたーしトけ, ビたーしけト, ビたトーけし, ビたトーしけ, ビたトけーし, ビたトけしー, ビたトしーけ, ビたトしけー, ビたけートし, ビたけーしト, ビたけトーし, ビたけトしー, ビたけしート, ビたけしトー, ビたしートけ, ビたしーけト, ビたしトーけ, ビたしトけー, ビたしけート, ビたしけトー, ビけートたし, ビけートした, ビけーたトし, ビけーたしト, ビけーしトた, ビけーしたト, ビけトーたし, ビけトーした, ビけトたーし, ビけトたしー, ビけトしーた, ビけトしたー, ビけたートし, ビけたーしト, ビけたトーし, ビけたトしー, ビけたしート, ビけたしトー, ビけしートた, ビけしーたト, ビけしトーた, ビけしトたー, ビけしたート, ビけしたトー, ビしートたけ, ビしートけた, ビしーたトけ, ビしーたけト, ビしーけトた, ビしーけたト, ビしトーたけ, ビしトーけた, ビしトたーけ, ビしトたけー, ビしトけーた, ビしトけたー, ビしたートけ, ビしたーけト, ビしたトーけ, ビしたトけー, ビしたけート, ビしたけトー, ビしけートた, ビしけーたト, ビしけトーた, ビしけトたー, ビしけたート, ビしけたトー, ービトたけし, ービトたしけ, ービトけたし, ービトけした, ービトしたけ, ービトしけた, ービたトけし, ービたトしけ, ービたけトし, ービたけしト, ービたしトけ, ービたしけト, ービけトたし, ービけトした, ービけたトし, ービけたしト, ービけしトた, ービけしたト, ービしトたけ, ービしトけた, ービしたトけ, ービしたけト, ービしけトた, ービしけたト, ートビたけし, ートビたしけ, ートビけたし, ートビけした, ートビしたけ, ートビしけた, ートたビけし, ートたビしけ, ートたけビし, ートたけしビ, ートたしビけ, ートたしけビ, ートけビたし, ートけビした, ートけたビし, ートけたしビ, ートけしビた, ートけしたビ, ートしビたけ, ートしビけた, ートしたビけ, ートしたけビ, ートしけビた, ートしけたビ, ーたビトけし, ーたビトしけ, ーたビけトし, ーたビけしト, ーたビしトけ, ーたビしけト, ーたトビけし, ーたトビしけ, ーたトけビし, ーたトけしビ, ーたトしビけ, ーたトしけビ, ーたけビトし, ーたけビしト, ーたけトビし, ーたけトしビ, ーたけしビト, ーたけしトビ, ーたしビトけ, ーたしビけト, ーたしトビけ, ーたしトけビ, ーたしけビト, ーたしけトビ, ーけビトたし, ーけビトした, ーけビたトし, ーけビたしト, ーけビしトた, ーけビしたト, ーけトビたし, ーけトビした, ーけトたビし, ーけトたしビ, ーけトしビた, ーけトしたビ, ーけたビトし, ーけたビしト, ーけたトビし, ーけたトしビ, ーけたしビト, ーけたしトビ, ーけしビトた, ー

3以下、名無しにかわりましてVIPがお送りします:2025/12/07(日) 21:34:24.32 ID:8qu0EzG2

ああごめんjoin("\n")だと改行になるからjoin(", ")に変更して実行した

4以下、名無しにかわりましてVIPがお送りします:2025/12/07(日) 21:56:37.37 ID:T0MbLsnM

促音拗音とか伸ばし棒から始まるやつは除外したい…

5以下、名無しにかわりましてVIPがお送りします:2025/12/07(日) 22:19:44.97 ID:8qu0EzG2

おう

// 再帰関数
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;
}

// JSでのフィルタ例
const results = getPermutations("ビートたけし");
const invalid = ["ー", "っ", "ゃ", "ゅ", "ょ"];

// 先頭文字がinvalidに含まれないものだけ抽出
const filtered = results.filter(name => !invalid.includes(name[0]));

console.log(filtered.join("\n"));

6以下、名無しにかわりましてVIPがお送りします:2025/12/07(日) 22:22:18.81 ID:8qu0EzG2

"ん"もフィルタに入れるの忘れてた
まあいいか

7以下、名無しにかわりましてVIPがお送りします:2025/12/07(日) 22:28:07.35 ID:8qu0EzG2

他にもいろいろ忘れてるじゃんアホじゃん

const invalid = [
"ー", "ん", "ン",
"っ", "ッ",
"ぁ", "ぃ", "ぅ", "ぇ", "ぉ",
"ァ", "ィ", "ゥ", "ェ", "ォ",
"ゃ", "ゅ", "ょ", "ゎ",
"ャ", "ュ", "ョ", "ヮ",
"ヵ", "ヶ"
];

8以下、名無しにかわりましてVIPがお送りします:2025/12/07(日) 22:38:40.69 ID:8qu0EzG2

ダブりも消して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"));

9以下、名無しにかわりましてVIPがお送りします:2025/12/07(日) 23:33:47.06 ID:T0MbLsnM

しゅごいね簡単そうに修正するじゃん

10以下、名無しにかわりましてVIPがお送りします:2025/12/07(日) 23:34:45.82 ID:8qu0EzG2

めんどくさくてAIにお願いしたんで


レスを書き込む