Old content

This post is from one of several previous incarnations of this site and probably doesn’t quite fit the current format. In a former life this was a group blog and a tumblelog before it became a static jekyll site. If anything looks broken or is worded oddly that could be why. Pardon the dust.

A minor morsel

I haven’t posted in ages, so I might as well use this to break radio silence. It’s a solution to this little programming brain teaser from Dustin Diaz. I don’t think it’s as much of a puzzle as he seemed think, given by the responses in the comments and how long it took me, but regardless:

@@javascript

var listA = \['a', 'b', 'c', 'c', 'd', 'e', 'e', 'e', 'e', 'e', 'f', 'e', 'f', 'e', 'f', 'a', 'a', 'a', 'f', 'f', 'f'\];
var listB = [];

var count = 0;

listA.forEach(function(val,key,arr){
    var matchPrev = (val == arr\[key - 1\]);
    var matchNext = (val == arr\[key + 1\]);

    count = matchPrev ? count+1 : 0;

    if (count == 2) {
        val = '<span>' + val;
    }
    if (count >= 2 && !matchNext) {
        val += '</span>';
    }

    listB.push(val);
});

console.log(listB.join(' '));

As some of the commenters’ solutions show, it can be done in a one-line regular expression, but I was sticking to the “rules” implicit in the original post.