You are standing at the point (x, y) in the lattice grid of pairs of non-negative numbers, and wish to make your way to the origin point (0, 0). At any point, you are allowed to move either one step left or one step down. Furthermore, you are never allowed to step into any of the points in the tabu list (origin is never in tabu). This function should add up the number of different paths that lead from the point (x,y) to the origin (0,0) under these constraints.
If you feel yourself in need of a hint, here are two ideas of solving (click on a hint):
This constrained variation of the classic combinatorial problem turns out to have a reasonably straightforward recursive solution. As the base case, the number of paths from the origin (0, 0) to itself equals one for the empty path (note the crucial difference between an empty path that exists, versus a nonexistent path!). If the point (x, y) is in the tabu list, the number of paths from that point to the origin equals zero. Otherwise, the number of paths from the point to the origin equals the sum of paths from the two neighbors (x-1, y) and (x, y-1). However, this simple recursion branches into an exponential number of possibilities and may therefore be far too slow to execute. Therefore, you should either memoize the recursion with lru_cache, or even better...
Do not use recursion at all but build up a two-dimensional list whose entries are the individual subproblem solutions. Fill in the correct values with two for-loops in some order that guarantees that when these loops arrive at position [x][y], the results for positions [x-1][y] and [x][y-1] needed to compute [x][y] are already there.
Input: position as tuple of two integers (int) and tabu as list of positions.
Output: Integer (int).
assert lattice_paths((3, 3), ) == 20 assert lattice_paths((3, 4), [(2, 2)]) == 17 assert lattice_paths((10, 5), [(6, 1), (2, 3)]) == 2063
- x >= 0 and y >= 0.
The mission was taken from Python CCPS 109. It is taught for Ryerson Chang School of Continuing Education by Ilkka Kokkarinen
CheckiO Extensions allow you to use local files to solve missions. More info in a blog post.
In order to install CheckiO client you'll need installed Python (version at least 3.8)
Install CheckiO Client first:
pip3 install checkio_client
Configure your tool
checkio --domain=py config --key=
Sync solutions into your local folder
(in beta testing) Launch local server so your browser can use it and sync solution between local file end extension on the fly. (doesn't work for safari)
checkio serv -d
Alternatevly, you can install Chrome extension or FF addon
checkio install-plugin --ff
checkio install-plugin --chromium