/**
問題:3個A、3個B、3個C,輸出滿足條件:相鄰的字母不能重複這樣的序列
*/
let c = [];
function IsBetweenEqual(c) {
for (let i = 0; i < 8; i++) {
if (c[i] == c[i + 1]) {
return false;
}
}
return true;
}
function isThree(c) {
let count = [];
for (let i = 0; i < 9; i++) {
let num = c[i];
if (!count[num]) {
count[num] = 0;
}
count[num]++;
}
for (let i = 0; i < count.length; i++) {
if (count[i] != 3) {
return false;
}
}
return true;
}
function dfs(start, answer_list) {
if (start == 9) {
if (IsBetweenEqual(c) && isThree(c)) {
answer_list.push(c.slice(0));
}
return;
}
for (let i = 0; i < 3; i++) {
c[start] = i;
dfs(start + 1, answer_list);
c[start] = undefined;
}
}
let answer_list = [];
dfs(0, answer_list);
console.log(answer_list);
/**
[ [ 0, 1, 0, 1, 2, 0, 2, 1, 2 ],
[ 0, 1, 0, 1, 2, 1, 2, 0, 2 ],
[ 0, 1, 0, 2, 0, 1, 2, 1, 2 ],
[ 0, 1, 0, 2, 0, 2, 1, 2, 1 ],
[ 0, 1, 0, 2, 1, 0, 2, 1, 2 ],
[ 0, 1, 0, 2, 1, 2, 0, 1, 2 ],
[ 0, 1, 0, 2, 1, 2, 0, 2, 1 ],
[ 0, 1, 0, 2, 1, 2, 1, 0, 2 ],
[ 0, 1, 0, 2, 1, 2, 1, 2, 0 ],
[ 0, 1, 2, 0, 1, 0, 2, 1, 2 ],
[ 0, 1, 2, 0, 1, 2, 0, 1, 2 ],
[ 0, 1, 2, 0, 1, 2, 0, 2, 1 ],
[ 0, 1, 2, 0, 1, 2, 1, 0, 2 ],
[ 0, 1, 2, 0, 1, 2, 1, 2, 0 ],
[ 0, 1, 2, 0, 2, 0, 1, 2, 1 ],
[ 0, 1, 2, 0, 2, 1, 0, 1, 2 ],
[ 0, 1, 2, 0, 2, 1, 0, 2, 1 ],
[ 0, 1, 2, 0, 2, 1, 2, 0, 1 ],
[ 0, 1, 2, 0, 2, 1, 2, 1, 0 ],
[ 0, 1, 2, 1, 0, 1, 2, 0, 2 ],
[ 0, 1, 2, 1, 0, 2, 0, 1, 2 ],
[ 0, 1, 2, 1, 0, 2, 0, 2, 1 ],
[ 0, 1, 2, 1, 0, 2, 1, 0, 2 ],
[ 0, 1, 2, 1, 0, 2, 1, 2, 0 ],
[ 0, 1, 2, 1, 2, 0, 1, 0, 2 ],
[ 0, 1, 2, 1, 2, 0, 1, 2, 0 ],
[ 0, 1, 2, 1, 2, 0, 2, 0, 1 ],
[ 0, 1, 2, 1, 2, 0, 2, 1, 0 ],
[ 0, 1, 2, 1, 2, 1, 0, 2, 0 ],
[ 0, 2, 0, 1, 0, 1, 2, 1, 2 ],
[ 0, 2, 0, 1, 0, 2, 1, 2, 1 ],
[ 0, 2, 0, 1, 2, 0, 1, 2, 1 ],
[ 0, 2, 0, 1, 2, 1, 0, 1, 2 ],
[ 0, 2, 0, 1, 2, 1, 0, 2, 1 ],
[ 0, 2, 0, 1, 2, 1, 2, 0, 1 ],
[ 0, 2, 0, 1, 2, 1, 2, 1, 0 ],
[ 0, 2, 0, 2, 1, 0, 1, 2, 1 ],
[ 0, 2, 0, 2, 1, 2, 1, 0, 1 ],
[ 0, 2, 1, 0, 1, 0, 2, 1, 2 ],
[ 0, 2, 1, 0, 1, 2, 0, 1, 2 ],
[ 0, 2, 1, 0, 1, 2, 0, 2, 1 ],
[ 0, 2, 1, 0, 1, 2, 1, 0, 2 ],
[ 0, 2, 1, 0, 1, 2, 1, 2, 0 ],
[ 0, 2, 1, 0, 2, 0, 1, 2, 1 ],
[ 0, 2, 1, 0, 2, 1, 0, 1, 2 ],
[ 0, 2, 1, 0, 2, 1, 0, 2, 1 ],
[ 0, 2, 1, 0, 2, 1, 2, 0, 1 ],
[ 0, 2, 1, 0, 2, 1, 2, 1, 0 ],
[ 0, 2, 1, 2, 0, 1, 0, 1, 2 ],
[ 0, 2, 1, 2, 0, 1, 0, 2, 1 ],
[ 0, 2, 1, 2, 0, 1, 2, 0, 1 ],
[ 0, 2, 1, 2, 0, 1, 2, 1, 0 ],
[ 0, 2, 1, 2, 0, 2, 1, 0, 1 ],
[ 0, 2, 1, 2, 1, 0, 1, 0, 2 ],
[ 0, 2, 1, 2, 1, 0, 1, 2, 0 ],
[ 0, 2, 1, 2, 1, 0, 2, 0, 1 ],
[ 0, 2, 1, 2, 1, 0, 2, 1, 0 ],
[ 0, 2, 1, 2, 1, 2, 0, 1, 0 ],
[ 1, 0, 1, 0, 2, 0, 2, 1, 2 ],
[ 1, 0, 1, 0, 2, 1, 2, 0, 2 ],
[ 1, 0, 1, 2, 0, 1, 2, 0, 2 ],
[ 1, 0, 1, 2, 0, 2, 0, 1, 2 ],
[ 1, 0, 1, 2, 0, 2, 0, 2, 1 ],
[ 1, 0, 1, 2, 0, 2, 1, 0, 2 ],
[ 1, 0, 1, 2, 0, 2, 1, 2, 0 ],
[ 1, 0, 1, 2, 1, 0, 2, 0, 2 ],
[ 1, 0, 1, 2, 1, 2, 0, 2, 0 ],
[ 1, 0, 2, 0, 1, 0, 2, 1, 2 ],
[ 1, 0, 2, 0, 1, 2, 0, 1, 2 ],
[ 1, 0, 2, 0, 1, 2, 0, 2, 1 ],
[ 1, 0, 2, 0, 1, 2, 1, 0, 2 ],
[ 1, 0, 2, 0, 1, 2, 1, 2, 0 ],
[ 1, 0, 2, 0, 2, 0, 1, 2, 1 ],
[ 1, 0, 2, 0, 2, 1, 0, 1, 2 ],
[ 1, 0, 2, 0, 2, 1, 0, 2, 1 ],
[ 1, 0, 2, 0, 2, 1, 2, 0, 1 ],
[ 1, 0, 2, 0, 2, 1, 2, 1, 0 ],
[ 1, 0, 2, 1, 0, 1, 2, 0, 2 ],
[ 1, 0, 2, 1, 0, 2, 0, 1, 2 ],
[ 1, 0, 2, 1, 0, 2, 0, 2, 1 ],
[ 1, 0, 2, 1, 0, 2, 1, 0, 2 ],
[ 1, 0, 2, 1, 0, 2, 1, 2, 0 ],
[ 1, 0, 2, 1, 2, 0, 1, 0, 2 ],
[ 1, 0, 2, 1, 2, 0, 1, 2, 0 ],
[ 1, 0, 2, 1, 2, 0, 2, 0, 1 ],
[ 1, 0, 2, 1, 2, 0, 2, 1, 0 ],
[ 1, 0, 2, 1, 2, 1, 0, 2, 0 ],
[ 1, 2, 0, 1, 0, 1, 2, 0, 2 ],
[ 1, 2, 0, 1, 0, 2, 0, 1, 2 ],
[ 1, 2, 0, 1, 0, 2, 0, 2, 1 ],
[ 1, 2, 0, 1, 0, 2, 1, 0, 2 ],
[ 1, 2, 0, 1, 0, 2, 1, 2, 0 ],
[ 1, 2, 0, 1, 2, 0, 1, 0, 2 ],
[ 1, 2, 0, 1, 2, 0, 1, 2, 0 ],
[ 1, 2, 0, 1, 2, 0, 2, 0, 1 ],
[ 1, 2, 0, 1, 2, 0, 2, 1, 0 ],
[ 1, 2, 0, 1, 2, 1, 0, 2, 0 ],
[ 1, 2, 0, 2, 0, 1, 0, 1, 2 ],
[ 1, 2, 0, 2, 0, 1, 0, 2, 1 ],
[ 1, 2, 0, 2, 0, 1, 2, 0, 1 ],
... 74 more items ]
*/