matching-sub-array-in-array-scheme-in-scheme

Attempted answer to the above question in StackOverflow

by BuddhiP

HTML

<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.2/underscore-min.js"></script>
<div id="target">
    <h2 id="result">Results Pending</h2>
</div>

JavaScript

$(function() {
    function getBinaryString(flatboard, player) {
        return _.map(flatboard, function(b) {
            // Return 1 for squares marked by the 'player' and 0 for everything else.
            return b == player ? 1 : 0;
        }).join(""); // Join without a seperator so it will form a binary number.
    }

    function getIntegerFromBinary(binaryString) {
        return parseInt(binaryString, 2);
    }

    var winningPatterns = [
        '111000000',
        '000111000',
        '000000111',
        '100100100',
        '010010010',
        '001001001',
        '100010001',
        '001010100'
        ];

    var winningNumbers = _.map(winningPatterns, function(pattern) {
        return getIntegerFromBinary(pattern)
    });

    console.log(winningNumbers);

    var a = 'a',
        b = 'b';
    var board = [
        [b, 0, a],
        [0, b, a],
        [b, a, b]
        ];
    var flatboard = _.flatten(board);

    console.log(flatboard);
    var board_a = getBinaryString(flatboard, a);
    console.log(board_a);

    var aValue = getIntegerFromBinary(board_a);
    console.log(aValue);
    console.log(_.indexOf(winningNumbers, aValue));
    if ((_.indexOf(winningNumbers, aValue)) >= 0) {
        $('#result').text('Winner is A!!! :)');
    } else {
        var board_b = getBinaryString(flatboard, b);
        console.log(board_b);
        var bValue = getIntegerFromBinary(board_b);
        if ((_.indexOf(winningNumbers, bValue)) >= 0) {
            $('#result').text('Winner is B!!! :)');
        } else {
            $('#result').text('No one wins!! :(');
        }
    }



});