mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-12-21 02:30:15 +00:00
54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
|
"""
|
||
|
Project Euler Problem 117: https://projecteuler.net/problem=117
|
||
|
|
||
|
Using a combination of grey square tiles and oblong tiles chosen from:
|
||
|
red tiles (measuring two units), green tiles (measuring three units),
|
||
|
and blue tiles (measuring four units),
|
||
|
it is possible to tile a row measuring five units in length
|
||
|
in exactly fifteen different ways.
|
||
|
|
||
|
|grey|grey|grey|grey|grey| |red,red|grey|grey|grey|
|
||
|
|
||
|
|grey|red,red|grey|grey| |grey|grey|red,red|grey|
|
||
|
|
||
|
|grey|grey|grey|red,red| |red,red|red,red|grey|
|
||
|
|
||
|
|red,red|grey|red,red| |grey|red,red|red,red|
|
||
|
|
||
|
|green,green,green|grey|grey| |grey|green,green,green|grey|
|
||
|
|
||
|
|grey|grey|green,green,green| |red,red|green,green,green|
|
||
|
|
||
|
|green,green,green|red,red| |blue,blue,blue,blue|grey|
|
||
|
|
||
|
|grey|blue,blue,blue,blue|
|
||
|
|
||
|
How many ways can a row measuring fifty units in length be tiled?
|
||
|
|
||
|
NOTE: This is related to Problem 116 (https://projecteuler.net/problem=116).
|
||
|
"""
|
||
|
|
||
|
|
||
|
def solution(length: int = 50) -> int:
|
||
|
"""
|
||
|
Returns the number of ways can a row of the given length be tiled
|
||
|
|
||
|
>>> solution(5)
|
||
|
15
|
||
|
"""
|
||
|
|
||
|
ways_number = [1] * (length + 1)
|
||
|
|
||
|
for row_length in range(length + 1):
|
||
|
for tile_length in range(2, 5):
|
||
|
for tile_start in range(row_length - tile_length + 1):
|
||
|
ways_number[row_length] += ways_number[
|
||
|
row_length - tile_start - tile_length
|
||
|
]
|
||
|
|
||
|
return ways_number[length]
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
print(f"{solution() = }")
|