func (b *Boggler) DoDFS(i, length uint, t *trie.Trie) { //fmt.Printf("i=%d, len=%d, word=%s\n", i, length, trie.ReverseLookup(b.t, t)) c := b.bd[i] b.used ^= (1 << i) if c == kQ { length += 2 } else { length += 1 } if t.IsWord() { // fmt.Println("Found ", trie.ReverseLookup(b.t, t)) if t.GetMark() != b.counter { t.Mark(b.counter) b.score += kWordScores[length] } } l := length switch i { case 0*4 + 0: b.Hit(0, 1, l, t) b.Hit(1, 0, l, t) b.Hit(1, 1, l, t) case 0*4 + 1: b.Hit(0, 0, l, t) b.Hit3y(1, 0, l, t) b.Hit(0, 2, l, t) case 0*4 + 2: b.Hit(0, 1, l, t) b.Hit3y(1, 1, l, t) b.Hit(0, 3, l, t) case 0*4 + 3: b.Hit(0, 2, l, t) b.Hit(1, 2, l, t) b.Hit(1, 3, l, t) case 1*4 + 0: b.Hit(0, 0, l, t) b.Hit(2, 0, l, t) b.Hit3x(0, 1, l, t) case 1*4 + 1: b.Hit8(1, 1, l, t) case 1*4 + 2: b.Hit8(1, 2, l, t) case 1*4 + 3: b.Hit3x(0, 2, l, t) b.Hit(0, 3, l, t) b.Hit(2, 3, l, t) case 2*4 + 0: b.Hit(1, 0, l, t) b.Hit(3, 0, l, t) b.Hit3x(1, 1, l, t) case 2*4 + 1: b.Hit8(2, 1, l, t) case 2*4 + 2: b.Hit8(2, 2, l, t) case 2*4 + 3: b.Hit3x(1, 2, l, t) b.Hit(1, 3, l, t) b.Hit(3, 3, l, t) case 3*4 + 0: b.Hit(2, 0, l, t) b.Hit(2, 1, l, t) b.Hit(3, 1, l, t) case 3*4 + 1: b.Hit3y(2, 0, l, t) b.Hit(3, 0, l, t) b.Hit(3, 2, l, t) case 3*4 + 2: b.Hit3y(2, 1, l, t) b.Hit(3, 1, l, t) b.Hit(3, 3, l, t) case 3*4 + 3: b.Hit(2, 2, l, t) b.Hit(3, 2, l, t) b.Hit(2, 3, l, t) } b.used ^= (1 << i) }