mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-27 15:01:08 +00:00
feat: add Project Euler problem 114 solution 1 (#6300)
Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
This commit is contained in:
parent
9eac958725
commit
a69d880bb5
|
@ -854,6 +854,8 @@
|
||||||
* [Sol1](project_euler/problem_112/sol1.py)
|
* [Sol1](project_euler/problem_112/sol1.py)
|
||||||
* Problem 113
|
* Problem 113
|
||||||
* [Sol1](project_euler/problem_113/sol1.py)
|
* [Sol1](project_euler/problem_113/sol1.py)
|
||||||
|
* Problem 114
|
||||||
|
* [Sol1](project_euler/problem_114/sol1.py)
|
||||||
* Problem 119
|
* Problem 119
|
||||||
* [Sol1](project_euler/problem_119/sol1.py)
|
* [Sol1](project_euler/problem_119/sol1.py)
|
||||||
* Problem 120
|
* Problem 120
|
||||||
|
|
0
project_euler/problem_114/__init__.py
Normal file
0
project_euler/problem_114/__init__.py
Normal file
58
project_euler/problem_114/sol1.py
Normal file
58
project_euler/problem_114/sol1.py
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
"""
|
||||||
|
Project Euler Problem 114: https://projecteuler.net/problem=114
|
||||||
|
|
||||||
|
A row measuring seven units in length has red blocks with a minimum length
|
||||||
|
of three units placed on it, such that any two red blocks
|
||||||
|
(which are allowed to be different lengths) are separated by at least one grey square.
|
||||||
|
There are exactly seventeen ways of doing this.
|
||||||
|
|
||||||
|
|g|g|g|g|g|g|g| |r,r,r|g|g|g|g|
|
||||||
|
|
||||||
|
|g|r,r,r|g|g|g| |g|g|r,r,r|g|g|
|
||||||
|
|
||||||
|
|g|g|g|r,r,r|g| |g|g|g|g|r,r,r|
|
||||||
|
|
||||||
|
|r,r,r|g|r,r,r| |r,r,r,r|g|g|g|
|
||||||
|
|
||||||
|
|g|r,r,r,r|g|g| |g|g|r,r,r,r|g|
|
||||||
|
|
||||||
|
|g|g|g|r,r,r,r| |r,r,r,r,r|g|g|
|
||||||
|
|
||||||
|
|g|r,r,r,r,r|g| |g|g|r,r,r,r,r|
|
||||||
|
|
||||||
|
|r,r,r,r,r,r|g| |g|r,r,r,r,r,r|
|
||||||
|
|
||||||
|
|r,r,r,r,r,r,r|
|
||||||
|
|
||||||
|
How many ways can a row measuring fifty units in length be filled?
|
||||||
|
|
||||||
|
NOTE: Although the example above does not lend itself to the possibility,
|
||||||
|
in general it is permitted to mix block sizes. For example,
|
||||||
|
on a row measuring eight units in length you could use red (3), grey (1), and red (4).
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def solution(length: int = 50) -> int:
|
||||||
|
"""
|
||||||
|
Returns the number of ways a row of the given length can be filled
|
||||||
|
|
||||||
|
>>> solution(7)
|
||||||
|
17
|
||||||
|
"""
|
||||||
|
|
||||||
|
ways_number = [1] * (length + 1)
|
||||||
|
|
||||||
|
for row_length in range(3, length + 1):
|
||||||
|
for block_length in range(3, row_length + 1):
|
||||||
|
for block_start in range(row_length - block_length):
|
||||||
|
ways_number[row_length] += ways_number[
|
||||||
|
row_length - block_start - block_length - 1
|
||||||
|
]
|
||||||
|
|
||||||
|
ways_number[row_length] += 1
|
||||||
|
|
||||||
|
return ways_number[length]
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(f"{solution() = }")
|
Loading…
Reference in New Issue
Block a user