Since I was at a presentation during lunch, I took some time for myself and took a quick crack at Dustin Diaz’s programming brain teaser. He said any language, so the quickest to get running for me is Ruby (and Command-R
in Textmate is so easy).
It’s not terribly clever, but it takes a different approach from some of the other solutions in that it modifies the array elements then just joins them, instead of creating a single output string and concatenating as time goes. My favorite solution in the comments used a regular expression, which I thought was particularly clever. Anyway, here’s mine:
# the array
arr = ['a', 'b', 'c', 'c', 'd', 'e', 'e',
'e', 'e', 'e', 'f', 'e', 'f', 'e',
'f', 'a', 'a', 'a', 'f', 'f', 'f']
# some variables
count = 0
arr.each_index do |i|
# not the same as previous letter, so do some things
if i > 0 && arr[i] != arr[i-1]
if count > 2
arr[i-1] = arr[i-1] + ""
arr[i-count+2] = "" + arr[i-count+2]
end
count = 0
put_tag = false
end
# increment count
count += 1
end
if count > 2
arr[-1] = arr[-1] + ""
arr[-count+2] = "" + arr[-count+2]
end
puts arr.join(" ")
Thinking back, I should have gone for some JavaScript, since that’s mostly what I’m writing these days. Oh well.