回答編集履歴

8

テキスト修正

2019/12/29 08:35

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  1または0を要素とするリストを引数に取る、次のような関数`increment`を考えます。
46
46
 
47
- - たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。
47
+ - たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。ただし、 `[1, 1, 1, 1]` が与えられたときは、リストの長さは変更されず、 `[0, 0, 0, 0]` にして返します。
48
48
 
49
49
 
50
50
 

7

テキスト修正

2019/12/29 08:34

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -42,9 +42,13 @@
42
42
 
43
43
 
44
44
 
45
- リストを引数に取る、次のような関数`increment`を考えます。
45
+ 1または0を要素とするリストを引数に取る、次のような関数`increment`を考えます。
46
46
 
47
- たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として再帰を使って以下のように書けます。
47
+ - たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。
48
+
49
+
50
+
51
+ このような `increment` は一例として再帰を使って以下のように書けます。(再帰を使わなくても書けるでしょう)
48
52
 
49
53
 
50
54
 

6

テキスト修正

2019/12/28 14:29

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -42,7 +42,9 @@
42
42
 
43
43
 
44
44
 
45
- まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられ `a` 要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す、 `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として、再帰使って以下のように書けます。
45
+ リストを引数にる、のような関数`increment`を考えます。
46
+
47
+ たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として再帰を使って以下のように書けます。
46
48
 
47
49
 
48
50
 

5

テキスト修正

2019/12/28 14:22

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
 
36
36
 
37
- __(※ビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、重複しない回答として、別の方法を下記に追記しました。)__
37
+ __(※ビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、別の方法を下記に追記しました。)__
38
38
 
39
39
 
40
40
 

4

テキスト修正

2019/12/28 14:20

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
 
36
36
 
37
- __(※上記のビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、重複しない回答として、別の方法を下記に追記しました。)__
37
+ __(※ビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、重複しない回答として、別の方法を下記に追記しました。)__
38
38
 
39
39
 
40
40
 

3

テキスト修正

2019/12/28 14:19

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -34,11 +34,11 @@
34
34
 
35
35
 
36
36
 
37
- ### 追記
37
+ __(※上記のビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、重複しない回答として、別の方法を下記に追記しました。)__
38
38
 
39
39
 
40
40
 
41
- 別の方法を挙げます。
41
+ ### 追記
42
42
 
43
43
 
44
44
 

2

テキスト修正

2019/12/28 14:18

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
 
44
44
 
45
- まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、この `a` を2進数の計算で1を加えた結果のビットの並びを表す、 `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として、再帰を使って以下のように書けます。
45
+ まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す、 `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として、再帰を使って以下のように書けます。
46
46
 
47
47
 
48
48
 

1

テキスト修正

2019/12/28 03:55

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -31,3 +31,65 @@
31
31
 
32
32
 
33
33
  参考になれば幸いです。
34
+
35
+
36
+
37
+ ### 追記
38
+
39
+
40
+
41
+ 別の方法を挙げます。
42
+
43
+
44
+
45
+ まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、この `a` を2進数の計算で1を加えた結果のビットの並びを表す、 `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として、再帰を使って以下のように書けます。
46
+
47
+
48
+
49
+ ```python3
50
+
51
+ def increment(lis, length=None):
52
+
53
+ if length is None:
54
+
55
+ length = len(lis)
56
+
57
+ if length == 0:
58
+
59
+ return
60
+
61
+
62
+
63
+ if lis[length-1]:
64
+
65
+ lis[length-1] = 0
66
+
67
+ increment(lis, length-1)
68
+
69
+ else:
70
+
71
+ lis[length-1] = 1
72
+
73
+
74
+
75
+ return lis
76
+
77
+
78
+
79
+ ```
80
+
81
+
82
+
83
+ 上記の `increment`を使うと、ご質問の `arrays` は、以下で得られます。
84
+
85
+ ```python3
86
+
87
+ M = 10
88
+
89
+ a = [1] * M
90
+
91
+ arrays = [increment(a).copy() for _ in range(2 ** M)]
92
+
93
+ ```
94
+
95
+ - **動作確認用 Replt.it:** [https://repl.it/@jun68ykt/Q232173-2](https://repl.it/@jun68ykt/Q232173-2)