JSFiddle - React, Tailwind, and code Playground

by BuddhiP

HTML

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

JavaScript

$(function() {
    var a = 'a',
        b = 'b';
    var board = [
        [a, 0, a],
        [b, b, b],
        [a, 0, a]
        ];
    var winner = null;

    checkForWinner = function() {
        lines = Array.prototype.slice.call(arguments);
        // Find compact all rows to unique values.
        var x = _.map(lines, function(l) {
            return _.uniq(l);
        });
        // Find the rows where all threee fields contained the same value.
        var y = _.filter(x, function(cl) {
            return (cl.length == 1 && cl[0] !== 0);
        });
        var w = (y.length > 0) ? y[0] : null;
        return w;
    };

    extractDiagonals = function(b) {
        var d1 = _.map(b, function(line, index) {
            return line[index];
        });
        var d2 = _.map(b, function(line, index) {
            return line[line.length - index - 1];
        });
        return [d1, d2];
    };

    console.log('Check for row winner...');
    winner = checkForWinner.apply(this, board);
    if (!winner) {
        var board2 = _.zip.apply(this, board);

        console.log('Check for column winner...');
        winner = checkForWinner.apply(this, board2);
        if (!winner) {
            // Check for the diagonals.
            console.log('Check for diagonals...');
            var diags = extractDiagonals(board);
            winner = checkForWinner.apply(this, diags);
        }
    }
    if (winner) {
        $('#result').text('We have a winner!! ' + winner);
    }
    else {
        $('#result').text('Oops!! No one wins.');
    }
});