如何解决可以进一步简化针对Entombed迷宫查询表的解决方案吗?
在引导了我的锁定精神之后,我想出了一个臭名昭著的谜题:为游戏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 举报,一经查实,本站将立刻删除。