回答編集履歴
11
f
test
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
直交座標面(h, y)において
|
26
26
|
|
27
|
-
直線y = p1+p2+p3 = t[0]*s[0]-t[0]*h + t[1]*s[1]-t[1]*h + t[
|
27
|
+
直線y = p1+p2+p3 = t[0]*s[0]-t[0]*h + t[1]*s[1]-t[1]*h + t[2]*s[2]-t[2]*h
|
28
28
|
|
29
29
|
= -(t[0] + t[1] + t[2])*h + (t[0]*s[0] + t[1]*s[1] + t[2]*s[2])
|
30
30
|
|
10
f
test
CHANGED
@@ -62,9 +62,9 @@
|
|
62
62
|
|
63
63
|
def func1(s, t):
|
64
64
|
|
65
|
-
x = sum(t) # t[0] + t[1] + t[2]
|
65
|
+
x = sum(t) # t[0] + t[1] + t[2]...
|
66
66
|
|
67
|
-
k = sum(
|
67
|
+
k = sum(ss*tt for ss, tt in zip(s, t)) # [0]*s[0] + t[1]*s[1] + t[2]*s[2]...
|
68
68
|
|
69
69
|
|
70
70
|
|
@@ -78,9 +78,9 @@
|
|
78
78
|
|
79
79
|
hh = h
|
80
80
|
|
81
|
-
for
|
81
|
+
for ss, tt in zip(s, t):
|
82
82
|
|
83
|
-
if t
|
83
|
+
if tt*(ss - hh) <= 0:
|
84
84
|
|
85
85
|
h = None
|
86
86
|
|
@@ -88,7 +88,7 @@
|
|
88
88
|
|
89
89
|
return None
|
90
90
|
|
91
|
-
return tuple(t
|
91
|
+
return tuple(tt*(ss - h) for ss, tt in zip(s, t))
|
92
92
|
|
93
93
|
```
|
94
94
|
|
9
追加
test
CHANGED
@@ -114,4 +114,24 @@
|
|
114
114
|
|
115
115
|
# sum = 0.9999999999999998
|
116
116
|
|
117
|
+
|
118
|
+
|
119
|
+
s = [1, 2, 3, 2]
|
120
|
+
|
121
|
+
t = [0.2, 0.3, 0.2, 0.1]
|
122
|
+
|
123
|
+
# answer= (0.04999999999999996, 0.37499999999999994, 0.45, 0.12499999999999999)
|
124
|
+
|
125
|
+
# sum = 1.0
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
s = [1, 2, 3, 2]
|
130
|
+
|
131
|
+
t = [0.2, 0.3, 0.2, 0.5]
|
132
|
+
|
133
|
+
# answer= None
|
134
|
+
|
135
|
+
# sum = None
|
136
|
+
|
117
137
|
```
|
8
修正
test
CHANGED
@@ -62,9 +62,9 @@
|
|
62
62
|
|
63
63
|
def func1(s, t):
|
64
64
|
|
65
|
-
x = sum(t) # t[0] + t[1] + t[2]
|
65
|
+
x = sum(t) # t[0] + t[1] + t[2] ...
|
66
66
|
|
67
|
-
k = sum(i*j for i, j in zip(s, t)) # [0]*s[0] + t[1]*s[1] + t[2]*s[2]
|
67
|
+
k = sum(i*j for i, j in zip(s, t)) # [0]*s[0] + t[1]*s[1] + t[2]*s[2] ...
|
68
68
|
|
69
69
|
|
70
70
|
|
@@ -78,13 +78,17 @@
|
|
78
78
|
|
79
79
|
hh = h
|
80
80
|
|
81
|
-
for p in range(
|
81
|
+
for p in range(len(t)):
|
82
82
|
|
83
83
|
if t[p]*(s[p]-hh) <= 0:
|
84
84
|
|
85
|
-
|
85
|
+
h = None
|
86
86
|
|
87
|
+
if h is None:
|
88
|
+
|
89
|
+
return None
|
90
|
+
|
87
|
-
return tuple(t[i]*(s[i] - h) for i in range(
|
91
|
+
return tuple(t[i]*(s[i] - h) for i in range(len(t)))
|
88
92
|
|
89
93
|
```
|
90
94
|
|
7
修正
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
が直線 y=1と交わるhを算出し
|
33
|
+
が直線 y=1と交わるときのh座標を算出し
|
34
34
|
|
35
35
|
求めたhがいずれのk=0,1,2についてもpk=tk(sk - h)>0を満たしているか
|
36
36
|
|
6
内容を修正しました
test
CHANGED
@@ -1,117 +1,113 @@
|
|
1
|
-
|
1
|
+
```
|
2
2
|
|
3
|
-
|
3
|
+
s = [s[0], s[1], s[2]]
|
4
4
|
|
5
|
-
|
5
|
+
t = [t[0], t[1], t[2]]
|
6
6
|
|
7
|
-
|
7
|
+
```
|
8
8
|
|
9
|
-
としたとき、
|
9
|
+
としたとき、max()を無視すれば、
|
10
10
|
|
11
|
-
|
11
|
+
```
|
12
12
|
|
13
|
-
p
|
13
|
+
p1 = t[0]*s[0]-t[0]*h
|
14
14
|
|
15
|
-
p
|
15
|
+
p2 = t[1]*s[1]-t[1]*h
|
16
16
|
|
17
|
+
p3 = t[2]*s[2]-t[2]*h
|
18
|
+
|
19
|
+
```
|
20
|
+
|
17
|
-
とな
|
21
|
+
となります。
|
22
|
+
|
23
|
+
p1~p3のいずれかが0となるようなhは除外するのですから、結局、
|
24
|
+
|
25
|
+
直交座標面(h, y)において
|
26
|
+
|
27
|
+
直線y = p1+p2+p3 = t[0]*s[0]-t[0]*h + t[1]*s[1]-t[1]*h + t[1]*s[1]-t[1]*h
|
28
|
+
|
29
|
+
= -(t[0] + t[1] + t[2])*h + (t[0]*s[0] + t[1]*s[1] + t[2]*s[2])
|
18
30
|
|
19
31
|
|
20
32
|
|
21
|
-
|
33
|
+
が直線 y=1と交わるhを算出し
|
22
34
|
|
23
|
-
p
|
35
|
+
求めたhがいずれのk=0,1,2についてもpk=tk(sk - h)>0を満たしているか
|
24
36
|
|
25
|
-
|
37
|
+
確認すればよいのではないでしょうか。
|
26
|
-
|
27
|
-
p3= h≦3ならば 6*(3-h) 、 h>3ならば0
|
28
38
|
|
29
39
|
|
30
40
|
|
41
|
+
上記で
|
42
|
+
|
43
|
+
x = t[0] + t[1] + t[2]
|
44
|
+
|
45
|
+
k = t[0]*s[0] + t[1]*s[1] + t[2]*s[2]
|
46
|
+
|
47
|
+
とおけば
|
48
|
+
|
49
|
+
y = -xh+k と y = 1の交点を求めるわけですから、
|
50
|
+
|
51
|
+
h = (k-1)/x
|
52
|
+
|
31
|
-
とな
|
53
|
+
となります。(x=0の場合は除外)
|
32
54
|
|
33
55
|
|
34
56
|
|
35
|
-
|
57
|
+
※s,tの中身によっては、解を持ちません。
|
36
58
|
|
37
59
|
|
38
60
|
|
39
|
-
|
61
|
+
```lang-python
|
40
62
|
|
41
|
-
|
63
|
+
def func1(s, t):
|
42
64
|
|
43
|
-
|
65
|
+
x = sum(t) # t[0] + t[1] + t[2]
|
44
66
|
|
45
|
-
|
67
|
+
k = sum(i*j for i, j in zip(s, t)) # [0]*s[0] + t[1]*s[1] + t[2]*s[2]
|
46
|
-
|
47
|
-
・2<h≦3の場合
|
48
|
-
|
49
|
-
p1+p2+p3 = 0+0+p3 = 6*(3-h)
|
50
|
-
|
51
|
-
・3<hの場合
|
52
|
-
|
53
|
-
p1+p2+p3 = 0
|
54
68
|
|
55
69
|
|
56
70
|
|
71
|
+
if x == 0:
|
72
|
+
|
73
|
+
h = None
|
74
|
+
|
75
|
+
else:
|
76
|
+
|
77
|
+
h = (k-1)/x
|
78
|
+
|
79
|
+
hh = h
|
80
|
+
|
81
|
+
for p in range(3):
|
82
|
+
|
83
|
+
if t[p]*(s[p]-hh) <= 0:
|
84
|
+
|
85
|
+
return None
|
86
|
+
|
57
|
-
p
|
87
|
+
return tuple(t[i]*(s[i] - h) for i in range(3))
|
88
|
+
|
89
|
+
```
|
90
|
+
|
91
|
+
実行例
|
92
|
+
|
93
|
+
```lang-python
|
94
|
+
|
95
|
+
s = [1, 2, 3]
|
96
|
+
|
97
|
+
t = [0.4, 0.3, 0.2]
|
58
98
|
|
59
99
|
|
60
100
|
|
61
|
-
|
101
|
+
r = func1(s,t)
|
62
102
|
|
103
|
+
print("answer=", r)
|
104
|
+
|
63
|
-
p
|
105
|
+
print("sum = {}".format(sum(r) if r else None))
|
64
106
|
|
65
107
|
|
66
108
|
|
67
|
-
|
109
|
+
# answer= (0.13333333333333328, 0.3999999999999999, 0.4666666666666666)
|
68
110
|
|
69
|
-
|
111
|
+
# sum = 0.9999999999999998
|
70
112
|
|
71
|
-
ak*bk≧0となる場合には
|
72
|
-
|
73
|
-
・h≦a1 → [p1+p2+p3]
|
74
|
-
|
75
|
-
・a1<h≦a2 → [p2+p3]
|
76
|
-
|
77
|
-
・a2<h≦a3 → [p3]
|
78
|
-
|
79
|
-
の各範囲(定義域といいます)における矢印の右側に記した直線と、直線y=1の交点のx座標が、求めるべきhの値になるということがわかります。
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
y=Ax+B と y=Cの交点は、yにCを代入して
|
88
|
-
|
89
|
-
C=Ax+B を解いて
|
90
|
-
|
91
|
-
x=(C-B)/A (ただしA≠0。A=0のときは解なし)
|
92
|
-
|
93
|
-
|
113
|
+
```
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
これに倣えば
|
98
|
-
|
99
|
-
y = bk(ak - h) と y=1 の交点は
|
100
|
-
|
101
|
-
1 = bk(ak - h)
|
102
|
-
|
103
|
-
1/bk = ak - h
|
104
|
-
|
105
|
-
h= ak - 1/bk (ただし bk≠0。 bk=0の場合は解なし)
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
となります。
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
あとは上記の内容をpythonで実装するだけです。
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
詳しい人はpulpか何かでスマートな解き方を示してくれるかもしれませんが。
|
5
fix
test
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
1
|
+
考え方だけ記します。
|
2
|
-
|
3
|
-
|
4
2
|
|
5
3
|
具体的な数字を与えて考えてみましょう。たとえば
|
6
4
|
|
@@ -58,8 +56,6 @@
|
|
58
56
|
|
59
57
|
p1+p2+p3 = yとして、(h, y)のグラフを上記に従ってノートかなんかに描いてみましょう。
|
60
58
|
|
61
|
-
**わからなかったら中学数学からやり直してください**
|
62
|
-
|
63
59
|
|
64
60
|
|
65
61
|
すると、上記の場合で
|
@@ -94,7 +90,7 @@
|
|
94
90
|
|
95
91
|
x=(C-B)/A (ただしA≠0。A=0のときは解なし)
|
96
92
|
|
97
|
-
となります
|
93
|
+
となります
|
98
94
|
|
99
95
|
|
100
96
|
|
4
fix
test
CHANGED
@@ -72,7 +72,7 @@
|
|
72
72
|
|
73
73
|
a1≦a2≦a3として、a1,a2,a3に対応するbを b1,b2,b3として並び替えたうえで
|
74
74
|
|
75
|
-
|
75
|
+
ak*bk≧0となる場合には
|
76
76
|
|
77
77
|
・h≦a1 → [p1+p2+p3]
|
78
78
|
|
3
fix
test
CHANGED
@@ -80,7 +80,7 @@
|
|
80
80
|
|
81
81
|
・a2<h≦a3 → [p3]
|
82
82
|
|
83
|
-
の各範囲(定義域といいます)における矢
|
83
|
+
の各範囲(定義域といいます)における矢印の右側に記した直線と、直線y=1の交点のx座標が、求めるべきhの値になるということがわかります。
|
84
84
|
|
85
85
|
|
86
86
|
|
2
fix
test
CHANGED
@@ -52,7 +52,7 @@
|
|
52
52
|
|
53
53
|
・3<hの場合
|
54
54
|
|
55
|
-
p1+p2+p3 = 0
|
55
|
+
p1+p2+p3 = 0
|
56
56
|
|
57
57
|
|
58
58
|
|
@@ -62,25 +62,25 @@
|
|
62
62
|
|
63
63
|
|
64
64
|
|
65
|
-
すると、
|
65
|
+
すると、上記の場合で
|
66
66
|
|
67
67
|
p1+p2+p3 (= y)=1となるのは、 直線y=6*(3-h) が直線 y=1と交わる点のx座標ということになります。
|
68
68
|
|
69
69
|
|
70
70
|
|
71
|
-
|
71
|
+
一般化すると、
|
72
72
|
|
73
73
|
a1≦a2≦a3として、a1,a2,a3に対応するbを b1,b2,b3として並び替えたうえで
|
74
74
|
|
75
75
|
|
76
76
|
|
77
|
-
・h≦a1
|
77
|
+
・h≦a1 → [p1+p2+p3]
|
78
78
|
|
79
|
-
・a1<h≦a2
|
79
|
+
・a1<h≦a2 → [p2+p3]
|
80
80
|
|
81
|
-
・a2<h≦a3
|
81
|
+
・a2<h≦a3 → [p3]
|
82
82
|
|
83
|
-
の各範囲(定義域といいます)における直線
|
83
|
+
の各範囲(定義域といいます)における矢尻氏の右側に記した直線と、直線y=1の交点のx座標が、求めるべきhの値になるということがわかります。
|
84
84
|
|
85
85
|
|
86
86
|
|
1
修正
test
CHANGED
@@ -106,7 +106,7 @@
|
|
106
106
|
|
107
107
|
1/bk = ak - h
|
108
108
|
|
109
|
-
h= ak - 1/bk ただし bk≠
|
109
|
+
h= ak - 1/bk (ただし bk≠0。 bk=0の場合は解なし)
|
110
110
|
|
111
111
|
|
112
112
|
|
@@ -115,3 +115,7 @@
|
|
115
115
|
|
116
116
|
|
117
117
|
あとは上記の内容をpythonで実装するだけです。
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
詳しい人はpulpか何かでスマートな解き方を示してくれるかもしれませんが。
|