>> 129 Python
def f129(table, words, SP = "*"):
  result = dict((word, []) for word in words)
  h, w = len(table), max(len(x) for x in table)
  table = [x.ljust(w) for x in table]
  def f129s(table, down=0, right=1):
    if down:
      if right < 0: table = [SP*i + table[i] + SP*(w-1-i) for i in range(w)]
      elif right > 0: table = [SP*(w-1-i) + table[i] + SP*i for i in range(w)]
      table = ["".join(table[i][j] for i in range(len(table))) for j in range(len(table[0]))]
    for word in words:
      rev_word = "".join(reversed(word))
      for i in range(len(table)):
        for (wd, inv, ofs) in [(word, 1, 0), (rev_word, -1, len(rev_word)-1)]:
          if wd in table[i]:
            row, col = i, table[i].find(wd) - inv*ofs
            if down:
              row += col*right
              if right > 0: row -= w-1
              row, col = col, row
            result[word].append(((row+1, col+1), (row+inv*down*len(wd), col+inv*right*len(wd)),(inv*down, inv*right)))
  for (down, right) in ((0,1), (1,0), (1,1), (1,-1)):
    f129s(table, down, right)
  for k in words:
    print k, result[k]

table = ['WVERTICALL', 'ROOAFFLSAB', 'ACRILIATOA', 'NDODKONWDC', 'DRKESOODDK', 'OEEPZEGLIW', 'MSIIHOAERA', 'ALRKRRIRER', 'KODIDEDRCD', 'HELWSLEUTH']
words = ['WEEK', 'FIND', 'RANDOM', 'SLEUTH', 'BACKWARD', 'VERTICAL', 'DIAGONAL', 'WIKIPEDIA', 'HORIZONTAL', 'WORDSEARCH']
f129(table, words)