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.');
}
});