回答編集履歴

3

d

2020/11/02 03:46

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -8,103 +8,37 @@
8
8
 
9
9
 
10
10
 
11
-
12
-
13
-
14
-
15
11
  ```python
16
12
 
17
13
  waters = [100, 150] # 入れられる水の容量
18
14
 
19
- limit = 300 # 水の容量の上限
15
+ limit = 300 # 容量の上限
20
16
 
21
- patterns = set() # パターン記録用 重複を除くために set を利用
17
+ patterns = [] # パターン記録用
22
18
 
23
19
 
24
20
 
25
21
 
26
22
 
27
- def find_pattern(water=0, lst=[]):
23
+ def find_pattern(lst=tuple()):
28
24
 
29
- """water: 追加する水の容量
25
+ """lst: 入れた水の履歴
30
-
31
- lst: 入れた水の履歴
32
26
 
33
27
  """
34
28
 
35
29
  if sum(lst) > limit:
36
30
 
37
- # 上限を超えた場合は記録して、再帰関数を終了する。
31
+ return # 上限を超えた場合は再帰を終了する。
38
32
 
33
+
34
+
39
- return patterns.add(tuple(lst[:-1]))
35
+ patterns.append(lst)
40
36
 
41
37
 
42
38
 
43
39
  for water in waters:
44
40
 
45
- find_pattern(water, lst + [water])
41
+ find_pattern(lst + (water,))
46
-
47
-
48
-
49
-
50
-
51
- find_pattern()
52
-
53
-
54
-
55
- print(patterns) # 手順のパターン
56
-
57
- # {(150, 100), (100, 100), (100, 150), (150, 150), (100, 100, 100)}
58
-
59
- print(set(sum(x) for x in patterns)) # 容量のパターン
60
-
61
- # {200, 250, 300}
62
-
63
- ```
64
-
65
-
66
-
67
- 300mL以下のパターンは全部 OK とするならば、以下のようにします。
68
-
69
-
70
-
71
- ```
72
-
73
- waters = [100, 150] # 入れられる水の容量
74
-
75
- limit = 300 # 容量の上限
76
-
77
- patterns = set() # パターン記録用
78
-
79
-
80
-
81
-
82
-
83
- def find_pattern(water=0, lst=[]):
84
-
85
- """water: 追加する水の容量
86
-
87
- lst: 入れた水の履歴
88
-
89
- """
90
-
91
- if sum(lst) > limit:
92
-
93
- # 上限を超えた場合は再帰関数を終了する。
94
-
95
- return
96
-
97
- else:
98
-
99
- patterns.add(tuple(lst))
100
-
101
-
102
-
103
-
104
-
105
- for water in waters:
106
-
107
- find_pattern(water, lst + [water])
108
42
 
109
43
 
110
44
 
@@ -123,3 +57,7 @@
123
57
  # {0, 100, 200, 300, 150, 250}
124
58
 
125
59
  ```
60
+
61
+
62
+
63
+ 不要な処理を削りました。

2

修正

2020/11/02 03:46

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
  print(patterns) # 手順のパターン
56
56
 
57
- # {(150,), (150, 100), (100, 100), (100, 150), (100,), (150, 150), (100, 100, 100), ()}
57
+ # {(150, 100), (100, 100), (100, 150), (150, 150), (100, 100, 100)}
58
58
 
59
59
  print(set(sum(x) for x in patterns)) # 容量のパターン
60
60
 

1

修正

2020/11/01 20:43

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -64,14 +64,6 @@
64
64
 
65
65
 
66
66
 
67
- ```output
68
-
69
- {(150, 100), (100, 100), (100, 150), (150, 150), (100, 100, 100)}
70
-
71
- ```
72
-
73
-
74
-
75
67
  300mL以下のパターンは全部 OK とするならば、以下のようにします。
76
68
 
77
69