>>137 ruby 1.8.6
def ddup(o)
Marshal.load(Marshal.dump(o))
end
def f129(table, words)
css = table.map {|s| s.scan(/./)}
trioss = (0...css.size).inject([]) {|trioss, i| trioss << (0...css[i].size).inject([]){|trios, j| trios << [i, j, css[i][j]]}}
naname = Array.new(trioss.size + trioss[0].size - 1) {|i| []}
tmp, a, b = trioss.dup, ddup(naname), ddup(naname)
while !tmp.empty?
trios = tmp.pop
i = trios.size - 1 - tmp.size
trios.each_index{|j| a[i + j] << trios[j]; b[i + j] << trios[trios.size - 1 - j]}
end
lines = trioss + trioss.transpose + a + b # 横、縦、斜め、逆斜め
lines = lines + lines.map {|trios| trios.reverse} # 逆方向
tails = words.inject({}) {|h, w| h[w] = w.scan(/./).size - 1; h}
lines.each {|trios|
s = trios.map{|trio| trio.last}.join
words.each{|w|
i = s.index(w)
puts w + ' ' + trios[i].inspect + '..' + trios[i + tails[w]].inspect if i
}
}
end
table = %w(WVERTICALL ROOAFFLSAB ACRILIATOA NDODKONWDC DRKESOODDK OEEPZEGLIW MSIIHOAERA ALRKRRIRER KODIDEDRCD HELWSLEUTH)
words = %w(WEEK FIND RANDOM SLEUTH BACKWARD VERTICAL DIAGONAL WIKIPEDIA HORIZONTAL WORDSEARCH)
f129(table, words)