微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可以进一步简化针对Entombed迷宫查询表的解决方案吗?

如何解决可以进一步简化针对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 举报,一经查实,本站将立刻删除。