var colors = ['B', 'B', 'R', 'R', 'R', 'R', 'B', 'B', 'R', 'R', 'R', 'R', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'R', 'B', 'R', 'R', 'R', 'B', 'R', 'R', 'R', 'B', 'R', 'R', 'R', 'B', 'B', 'R', 'B', 'R', 'B', 'B', 'B', 'R', 'R', 'B', 'B', 'B', 'B', 'R', 'B'];
function getGroups(array) {
var groups = [];
for (var i = 0, g = -1; i < array.length; i++) {
var color = array[i];
if (i == 0 || color != array[i - 1]) {
g++;
groups[g] = [];
}
groups[g].push(color);
}
return groups;
}
function getElements(groups) {
var elements = [];
var x = 0;
var total = 0;
var topLeft = document.createElement('th');
topLeft.appendChild(document.createTextNode(''));
topLeft.setAttribute('class', 'header-cell');
elements[x] = [topLeft];
var maxJ = Math.max.apply(Math, groups.map(function(e) {
return e.length;
}));
for (var j = 0; j < maxJ; j++) {
var cell = document.createElement('td');
cell.appendChild(document.createTextNode(String.fromCharCode(65 + j)));
cell.setAttribute('class', 'header-cell');
elements[x].push(cell);
}
for (var z = 0; z < groups.length; z++) {
var top = document.createElement('td');
top.appendChild(document.createTextNode(z + 1));
top.setAttribute('class', 'header-cell');
elements[++x] = [top];
for (var j = 0; j < 7; j++) {
var cell = document.createElement('td');
var color = z < groups.length && j < groups[z].length ? groups[z][j] : '';
cell.appendChild(document.createTextNode(color ? ++total : ''));
if (color) {
cell.setAttribute('class', 'color-' + color);
}
elements[x].push(cell);
}
}
return elements;
}
function populateTable(table, elements) {
var maxY = Math.min.apply(Math, elements.map(function(e) {
return e.length;
}));
var fragment = document.createDocumentFragment();
for (var y = 0; y < maxY; y++) {
var row = document.createElement('tr');
for (var x = 0; x < elements.length; x++) {
row.appendChild(elements[x][y]);
}
fragment.appendChild(row);
}
table.appendChild(fragment);
}
var groups = getGroups(colors);
var elements = getElements(groups);
var table = document.getElementById('grid');
populateTable(table, elements);
.color-R {
background-color: hsl(0, 100%, 50%);
}
.color-B {
background-color: hsl(240, 100%, 50%);
color: white;
}
tr {
width: 10px;
height: 10px;
}
.header-cell {
background-color: hsl(60, 100%, 80%);
}
#grid {
border-collapse: collapse;
}
#grid th,
#grid td {
border: 1px solid black;
width: 30px;
text-align: center;
}
<table id="grid"></table>
おかげ@Moisheは、それが働いています! – Doungdara