Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for [old] Domino Chain by mortonfox
"use strict";
function countChains(dominos, lastDigit) {
if (dominos.length === 0) {
return 1;
}
return dominos.reduce((count, domino, i) => {
if (lastDigit === '' || lastDigit === domino[0]) {
count += countChains(dominos.slice(0, i).concat(dominos.slice(i + 1)), domino[1]);
}
if ((lastDigit === '' || lastDigit === domino[1]) && domino[0] !== domino[1]) {
count += countChains(dominos.slice(0, i).concat(dominos.slice(i + 1)), domino[0]);
}
return count;
}, 0);
}
function dominoChain(tiles){
let dominos = tiles.split(', ').map(tile => tile.split('-'));
return countChains(dominos, '') / 2;
}
var assert = require('assert');
if (!global.is_checking) {
assert.equal(dominoChain("0-2, 0-5, 1-5, 1-3, 5-5"), 1);
assert.equal(dominoChain("1-5, 2-5, 3-5, 4-5, 3-4"), 2);
assert.equal(dominoChain("0-5, 1-5, 2-5, 3-5, 4-5, 3-4"), 0);
assert.equal(dominoChain("0-1, 0-2, 1-3, 1-2, 3-4, 2-4"), 6);
assert.equal(dominoChain("0-1, 0-2, 1-3, 1-2, 3-4, 2-4, 3-0, 0-4"), 0);
assert.equal(dominoChain("1-2, 2-2, 2-3, 3-3, 3-1"), 5);
assert.equal(dominoChain("1-4, 3-4, 0-4, 0-5, 4-5, 2-4, 2-5"), 0);
assert.equal(dominoChain("1-4, 1-5, 0-2, 1-6, 4-6, 4-5, 5-6"), 0);
assert.equal(dominoChain("1-2, 2-3, 2-4, 3-4, 2-5, 2-6, 5-6"), 8);
assert.equal(dominoChain("1-2, 2-3, 3-1, 4-5, 5-6, 6-4"), 0);
assert.equal(dominoChain("1-2, 1-4, 1-5, 1-6, 1-1, 2-5, 4-6"), 28);
console.log("Basic tests passed.");
}
Sept. 12, 2017