|
1 | 1 | $cache = {}
|
2 | 2 | def bfs(a, b)
|
3 |
| - raise if a[0] > b[0] or a[1] > b[1] |
4 |
| - #if (b[0] - a[0] == 1 and b[1] == a[1]) or ( b[1] - a[1] == 1 and a[0] == b[0] ) |
5 |
| - # return 1 |
6 |
| - if a[0] == b[0] |
7 |
| - if b[1] - a[1] == 1 |
8 |
| - 1 |
9 |
| - else |
10 |
| - $cache[[a[0], a[1] + 1]] = bfs([a[0], a[1] + 1], b) unless $cache.include?([a[0], a[1] + 1]) |
11 |
| - $cache[[a[0], a[1] + 1]] |
12 |
| - end |
13 |
| - elsif a[1] == b[1] |
14 |
| - if b[0] - a[0] == 1 |
15 |
| - 1 |
16 |
| - else |
17 |
| - $cache[[a[0] + 1, a[1]]] = bfs([a[0] + 1, a[1]], b) unless $cache.include?([a[0] + 1, a[1]]) |
18 |
| - $cache[[a[0] + 1, a[1]]] |
19 |
| - end |
| 3 | + if (b[0] - a[0] == 1 and b[1] == a[1]) or ( b[1] - a[1] == 1 and a[0] == b[0] ) |
| 4 | + 1 |
| 5 | + elsif a[0] == b[0] |
| 6 | + getpoint([a[0], a[1] + 1], b) |
| 7 | + elsif b[1] == a[1] |
| 8 | + getpoint([a[0] + 1, a[1]], b) |
20 | 9 | else
|
21 |
| - |
22 |
| - $cache[[a[0] + 1, a[1]]] = bfs([a[0] + 1, a[1]], b) unless $cache.include?([a[0] + 1, a[1]]) |
23 |
| - $cache[[a[0], a[1] + 1]] = bfs([a[0], a[1] + 1], b) unless $cache.include?([a[0], a[1] + 1]) |
24 |
| - |
25 |
| - #bfs([a[0] + 1, a[1]], b) + bfs([a[0], a[1] + 1], b) |
26 |
| - $cache[[a[0] + 1, a[1]]] + $cache[[a[0], a[1] + 1]] |
| 10 | + getpoint([a[0] + 1, a[1]], b) + getpoint(([a[0], a[1] + 1]), b) |
27 | 11 | end
|
28 | 12 | end
|
29 | 13 |
|
| 14 | +def getpoint(point, b) |
| 15 | + $cache[point] = bfs(point, b) unless $cache.include?(point) |
| 16 | + $cache[point] |
| 17 | +end |
| 18 | + |
30 | 19 |
|
31 | 20 | p bfs([0, 0], [20, 20])
|
32 |
| -#p bfs([0, 0], [1, 2]) |
33 |
| -#p bfs([0, 0], [2, 2]) |
34 | 21 |
|
0 commit comments