回答編集履歴
5
code
test
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
-
3連続奇数or偶数が続いた場合は別のグループから選択する
|
1
|
+
3連続奇数or偶数が続いた場合は別のグループから選択するプログラムを実装しました。
|
2
|
+
配列数、奇数、偶数それぞれの最大連続数を設定できる形です。
|
3
|
+
条件に沿う形で出来る限りランダム性を担保していると思います。
|
2
4
|
|
3
|
-
|
5
|
+
尚、条件に合う数列が生成できないケースでは、一から再計算します。
|
4
6
|
|
5
|
-
尚、条件に合う数列が生成できなくなった場合は、再度トライさせています。
|
6
|
-
また、その失敗
|
7
|
+
また、その失敗する確率も計算させましたが、
|
7
8
|
n=100, max_odd_sequense=3, max_even_sequense=3の条件では、11%程度でした。
|
8
9
|
|
9
10
|
|
4
コード
test
CHANGED
@@ -21,7 +21,6 @@
|
|
21
21
|
is_odd = [True if i%2 !=0 else False for i in before_odd_array]
|
22
22
|
is_even =[True if i%2 ==0 else False for i in before_even_array]
|
23
23
|
|
24
|
-
|
25
24
|
if sum(is_odd) >= max_odd_sequense:
|
26
25
|
even_list = [i for i in choice_list if i%2 == 0]
|
27
26
|
if len(even_list) == 0:
|
@@ -29,9 +28,7 @@
|
|
29
28
|
return make_conditional_sequence(n, max_odd_sequense, max_even_sequense, failed=failed+1)
|
30
29
|
else:
|
31
30
|
choiced = random.choice(even_list)
|
32
|
-
choice_list.remove(choiced)
|
33
31
|
#print('random choiced from even', choiced)
|
34
|
-
random_array.append(choiced)
|
35
32
|
|
36
33
|
|
37
34
|
elif sum(is_even) >= max_even_sequense:
|
@@ -40,13 +37,12 @@
|
|
40
37
|
return make_conditional_sequence(n, max_odd_sequense, max_even_sequense, failed=failed+1)
|
41
38
|
else:
|
42
39
|
choiced = random.choice(odd_list)
|
43
|
-
choice_list.remove(choiced)
|
44
|
-
random_array.append(choiced)
|
45
40
|
|
46
41
|
else:
|
47
42
|
choiced = random.choice(choice_list)
|
43
|
+
|
48
|
-
|
44
|
+
choice_list.remove(choiced)
|
49
|
-
|
45
|
+
random_array.append(choiced)
|
50
46
|
|
51
47
|
#print(f'failed {failed}')
|
52
48
|
|
3
コード名修正
test
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
import random
|
12
12
|
import numpy as np
|
13
13
|
|
14
|
-
def make_conditional_sequence(n=
|
14
|
+
def make_conditional_sequence(n=100, max_odd_sequense=3, max_even_sequense=3, failed=0):
|
15
15
|
choice_list = list(range(n))
|
16
16
|
random_array = []
|
17
17
|
#print('Start')
|
2
修正
test
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
import random
|
12
12
|
import numpy as np
|
13
13
|
|
14
|
-
def make_
|
14
|
+
def make_conditional_sequence(n=5, max_odd_sequense=2, max_even_sequense=2, failed=0):
|
15
15
|
choice_list = list(range(n))
|
16
16
|
random_array = []
|
17
17
|
#print('Start')
|
@@ -26,7 +26,7 @@
|
|
26
26
|
even_list = [i for i in choice_list if i%2 == 0]
|
27
27
|
if len(even_list) == 0:
|
28
28
|
#print('this trial failed')
|
29
|
-
return make_
|
29
|
+
return make_conditional_sequence(n, max_odd_sequense, max_even_sequense, failed=failed+1)
|
30
30
|
else:
|
31
31
|
choiced = random.choice(even_list)
|
32
32
|
choice_list.remove(choiced)
|
@@ -37,7 +37,7 @@
|
|
37
37
|
elif sum(is_even) >= max_even_sequense:
|
38
38
|
odd_list = [i for i in choice_list if i%2 != 0]
|
39
39
|
if len(odd_list) == 0:
|
40
|
-
return make_
|
40
|
+
return make_conditional_sequence(n, max_odd_sequense, max_even_sequense, failed=failed+1)
|
41
41
|
else:
|
42
42
|
choiced = random.choice(odd_list)
|
43
43
|
choice_list.remove(choiced)
|
@@ -54,7 +54,7 @@
|
|
54
54
|
|
55
55
|
failed_list = []
|
56
56
|
for i in range(100):
|
57
|
-
random_ , failed = make_
|
57
|
+
random_ , failed = make_conditional_sequence(n=100, max_odd_sequense=3, max_even_sequense=3)
|
58
58
|
#print(random_)
|
59
59
|
failed_list.append(failed)
|
60
60
|
|
1
test
CHANGED
@@ -1,6 +1,11 @@
|
|
1
|
+
3連続奇数or偶数が続いた場合は別のグループから選択するので問題ないと思います。
|
2
|
+
|
3
|
+
奇数、偶数それぞれの最大連続数を設定できる形でコード記載しました。
|
4
|
+
|
1
|
-
条件に合
|
5
|
+
尚、条件に合う数列が生成できなくなった場合は、再度トライさせています。
|
2
|
-
また、失敗した確率も計算させていますが、
|
6
|
+
また、その失敗した確率も計算させていますが、
|
3
7
|
n=100, max_odd_sequense=3, max_even_sequense=3の条件では、11%程度でした。
|
8
|
+
|
4
9
|
|
5
10
|
```python
|
6
11
|
import random
|