码疯窝

一道数字游戏的代码解法

2015/09/15 16:13:48    分类: 技术随笔    3人评论 次浏览

深更半夜朋友发来一道数字游戏的题目. 如下图:

QQ图片20150915160540

想看看此题目是否有多解, 无奈数学不好, 证明不了, 于是写出代码, 穷举所有可能性得出果真只有一解.

resolved

仔细看会发现只需要穷举13 * 9 次就行了. 代码如下:


function isInt(v) {
    return v === parseInt(v) && v >= 0;
}

// Algorithm
function calc(r) {
    return (81- 9 * r[6] - 9 * r[0] + r[0] * r[6]) / (4 * r[6] - r[0] * r[6] - r[0] + 5);
}

function check(r) {
    var status = true;
    r.forEach(function(v) {status = status && isInt(v);});
    
    return status && (r[0] + r[1] - r[2] === 4) &&
        (r[3] - r[4] * r[5] === 4) &&
        (r[6] + r[7] - r[8] === 4) &&
        
        (r[0] + r[3] / r[6] === 4) &&
        (r[1] - r[4] * r[7] === 4) &&
        (r[2] - r[5] - r[8] === 4);
}



function solve() {
    var r = Array.apply(null, {length: 9}), count = 0;
    r[2] = 9;
    r[0] = 0;
    // From the first row, we can see a <= 13.
    while(r[0]++ < 13) {
        r[6] = 0;
        // From the last row and last column we can see f <= 9
        while(r[6]++ < 9) {
            r[7] = calc(r);
            r[1] = 13 - r[0];
            r[8] = r[6] + r[7] - 4;
            r[3] = (4 - r[0]) * r[6];
            r[5] = 5 - r[8];
            r[4] = r[5] !== 0 ? ((4 - r[3]) / r[5] * -1) : ((4 - r[1]) / r[7] * -1);
            if (check(r)) {
                count++;
                console.log('================================');
                console.log('(' + r[0] + ') + (' + r[1] + ') - (' + r[2] + ')');
                console.log(' +     -     -');
                console.log('(' + r[3] + ') - (' + r[4] + ') * (' + r[5] + ')');
                console.log(' /     *     -');
                console.log('(' + r[6] + ') + (' + r[7] + ') - (' + r[8] + ')');
            }
        }
    }
    console.log(count + ' Solution.');
}
var startTime, endTime;
startTime = new Date().getTime();
solve();
endTime = new Date().getTime();
console.log('Totally take ' + (endTime - startTime) + 'ms');
继续查看有关 技术随笔的文章

3个访客评论

  1. 一看就知道是谁

    我看不懂 呜呜呜

    qweqwe Reply
  2. long

    好好玩的样子

    qweqwe Reply