问题描述
在引导了我的锁定精神之后,我想出了一个臭名昭著的谜题:为游戏Entombed (Atari 2600)中用于迷宫生成的查找表找到算法解决方案。
我想出了这个伪代码:
function GenerateCell(A,B,C,D,E) {
if A != B and B != C return !C;
if BCD = 111 return 0;
if CDE = 010 return 1;
if BD = 00 return !C;
if DE = 01 return 0;
return 2;
}
就我的口味而言,这确实很hacky,所以我想知道是否可以进一步简化它。我只得到了下面的javascript中相同功能的排列。根据随附的测试代码,所有代码均显示为有效,但请随时指出错误:
var tableA = [
[[0,0],1],[[0,1,2],[[1,0]
];
function GenerateCell(A,E) {
if (A != B && B != C) return +!C;
if (B == C && C == D) return +!C;
if (C != D && D != E) return +!C;
if (B == 0 && D == 0) return +!C;
if (D == 0 && E == 1) return 0;
return 2;
}
function GenerateCell(A,E) {
if (A != B && B != C) return +!C;
if (B == 1 && C == 1 && D == 1) return 0;
if (C == 0 && D == 1 && E == 0) return 1;
if (B == 0 && D == 0) return +!C;
if (D == 0 && E == 1) return 0;
return 2;
}
function GenerateCell(A,E) {
if (A != B && B != C) return +!C;
if (D) {
if (C) {
if (B) return 0;
} else {
if (!E) return 1;
}
} else {
if (!B) return +!C;
if (E) return 0;
}
return 2;
}
function GenerateCell(A,E) {
if ((A ^ B) & (B ^ C)) return +!C;
if (B & C & D) return 0;
if (!E & !C & D) return 1;
if (!B & !D) return +!C;
return 2 * !(D < E);
}
// TESTING
for (y=0;y<tableA.length;y++) {
var state = tableA[y][0];
var newCell = GenerateCell(state[0],state[1],state[2],state[3],state[4]);
if (tableA[y][1] != newCell) {
console.log("ERROR",state,tableA[y][1],newCell);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)