可以进一步简化针对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 (将#修改为@)