回答編集履歴
3
d
answer
CHANGED
@@ -3,55 +3,22 @@
|
|
3
3
|
水を再帰的に追加していき、総容量が上限を超えたら再帰関数を終了します。
|
4
4
|
以下のようにすれば、入れられる水の種類が増えても対応できます。
|
5
5
|
|
6
|
-
|
7
|
-
|
8
6
|
```python
|
9
7
|
waters = [100, 150] # 入れられる水の容量
|
10
|
-
limit = 300 #
|
8
|
+
limit = 300 # 容量の上限
|
11
|
-
patterns =
|
9
|
+
patterns = [] # パターン記録用
|
12
10
|
|
13
11
|
|
14
|
-
def find_pattern(
|
12
|
+
def find_pattern(lst=tuple()):
|
15
|
-
"""
|
13
|
+
"""lst: 入れた水の履歴
|
16
|
-
lst: 入れた水の履歴
|
17
14
|
"""
|
18
15
|
if sum(lst) > limit:
|
19
|
-
# 上限を超えた場合は
|
16
|
+
return # 上限を超えた場合は再帰を終了する。
|
20
|
-
return patterns.add(tuple(lst[:-1]))
|
21
17
|
|
22
|
-
for water in waters:
|
23
|
-
|
18
|
+
patterns.append(lst)
|
24
19
|
|
25
|
-
|
26
|
-
find_pattern()
|
27
|
-
|
28
|
-
print(patterns) # 手順のパターン
|
29
|
-
# {(150, 100), (100, 100), (100, 150), (150, 150), (100, 100, 100)}
|
30
|
-
print(set(sum(x) for x in patterns)) # 容量のパターン
|
31
|
-
# {200, 250, 300}
|
32
|
-
```
|
33
|
-
|
34
|
-
300mL以下のパターンは全部 OK とするならば、以下のようにします。
|
35
|
-
|
36
|
-
```
|
37
|
-
waters = [100, 150] # 入れられる水の容量
|
38
|
-
limit = 300 # 容量の上限
|
39
|
-
patterns = set() # パターン記録用
|
40
|
-
|
41
|
-
|
42
|
-
def find_pattern(water=0, lst=[]):
|
43
|
-
"""water: 追加する水の容量
|
44
|
-
lst: 入れた水の履歴
|
45
|
-
"""
|
46
|
-
if sum(lst) > limit:
|
47
|
-
# 上限を超えた場合は再帰関数を終了する。
|
48
|
-
return
|
49
|
-
else:
|
50
|
-
patterns.add(tuple(lst))
|
51
|
-
|
52
|
-
|
53
20
|
for water in waters:
|
54
|
-
find_pattern(
|
21
|
+
find_pattern(lst + (water,))
|
55
22
|
|
56
23
|
|
57
24
|
find_pattern()
|
@@ -60,4 +27,6 @@
|
|
60
27
|
# {(150,), (150, 100), (100, 100), (100, 150), (100,), (150, 150), (100, 100, 100), ()}
|
61
28
|
print(set(sum(x) for x in patterns)) # 容量のパターン
|
62
29
|
# {0, 100, 200, 300, 150, 250}
|
63
|
-
```
|
30
|
+
```
|
31
|
+
|
32
|
+
不要な処理を削りました。
|
2
修正
answer
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
find_pattern()
|
27
27
|
|
28
28
|
print(patterns) # 手順のパターン
|
29
|
-
# {(150,
|
29
|
+
# {(150, 100), (100, 100), (100, 150), (150, 150), (100, 100, 100)}
|
30
30
|
print(set(sum(x) for x in patterns)) # 容量のパターン
|
31
31
|
# {200, 250, 300}
|
32
32
|
```
|
1
修正
answer
CHANGED
@@ -31,10 +31,6 @@
|
|
31
31
|
# {200, 250, 300}
|
32
32
|
```
|
33
33
|
|
34
|
-
```output
|
35
|
-
{(150, 100), (100, 100), (100, 150), (150, 150), (100, 100, 100)}
|
36
|
-
```
|
37
|
-
|
38
34
|
300mL以下のパターンは全部 OK とするならば、以下のようにします。
|
39
35
|
|
40
36
|
```
|