teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

8

テキスト修正

2019/12/29 08:35

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -21,7 +21,7 @@
21
21
  ### 追記
22
22
 
23
23
  1または0を要素とするリストを引数に取る、次のような関数`increment`を考えます。
24
- - たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。
24
+ - たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。ただし、 `[1, 1, 1, 1]` が与えられたときは、リストの長さは変更されず、 `[0, 0, 0, 0]` にして返します。
25
25
 
26
26
  このような `increment` は一例として再帰を使って以下のように書けます。(再帰を使わなくても書けるでしょう)
27
27
 

7

テキスト修正

2019/12/29 08:34

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -20,9 +20,11 @@
20
20
 
21
21
  ### 追記
22
22
 
23
- リストを引数に取る、次のような関数`increment`を考えます。
23
+ 1または0を要素とするリストを引数に取る、次のような関数`increment`を考えます。
24
- たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として再帰を使って以下のように書けます。
24
+ - たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。
25
25
 
26
+ このような `increment` は一例として再帰を使って以下のように書けます。(再帰を使わなくても書けるでしょう)
27
+
26
28
  ```python3
27
29
  def increment(lis, length=None):
28
30
  if length is None:

6

テキスト修正

2019/12/28 14:29

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -20,7 +20,8 @@
20
20
 
21
21
  ### 追記
22
22
 
23
- まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられ `a` 要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す、 `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として、再帰使って以下のように書けます。
23
+ リストを引数にる、のような関数`increment`を考えます。
24
+ たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として再帰を使って以下のように書けます。
24
25
 
25
26
  ```python3
26
27
  def increment(lis, length=None):

5

テキスト修正

2019/12/28 14:22

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  参考になれば幸いです。
18
18
 
19
- __(※ビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、重複しない回答として、別の方法を下記に追記しました。)__
19
+ __(※ビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、別の方法を下記に追記しました。)__
20
20
 
21
21
  ### 追記
22
22
 

4

テキスト修正

2019/12/28 14:20

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  参考になれば幸いです。
18
18
 
19
- __(※上記のビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、重複しない回答として、別の方法を下記に追記しました。)__
19
+ __(※ビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、重複しない回答として、別の方法を下記に追記しました。)__
20
20
 
21
21
  ### 追記
22
22
 

3

テキスト修正

2019/12/28 14:19

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -16,10 +16,10 @@
16
16
 
17
17
  参考になれば幸いです。
18
18
 
19
+ __(※上記のビット演算を使ったコードは、shiracamusさんのご回答で既に提示されていましたので、重複しない回答として、別の方法を下記に追記しました。)__
20
+
19
21
  ### 追記
20
22
 
21
- 別の方法を挙げます。
22
-
23
23
  まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す、 `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として、再帰を使って以下のように書けます。
24
24
 
25
25
  ```python3

2

テキスト修正

2019/12/28 14:18

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  別の方法を挙げます。
22
22
 
23
- まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、この `a` を2進数の計算で1を加えた結果のビットの並びを表す、 `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として、再帰を使って以下のように書けます。
23
+ まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、 `a` の要素の並びを2進数とみたてて、1を加えた結果のビットの並びを表す、 `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として、再帰を使って以下のように書けます。
24
24
 
25
25
  ```python3
26
26
  def increment(lis, length=None):

1

テキスト修正

2019/12/28 03:55

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -14,4 +14,35 @@
14
14
  ```
15
15
  - **動作確認用 Replt.it:** [https://repl.it/@jun68ykt/Q232173](https://repl.it/@jun68ykt/Q232173)
16
16
 
17
- 参考になれば幸いです。
17
+ 参考になれば幸いです。
18
+
19
+ ### 追記
20
+
21
+ 別の方法を挙げます。
22
+
23
+ まず次のような関数`increment`を考えます。たとえば、`[0, 1, 0, 1]` というリスト `a` があったとして、この `a` を引数に与えられると、この `a` を2進数の計算で1を加えた結果のビットの並びを表す、 `[0, 1, 1, 0]` に変更し、変更後の `a` を返します。そのような `increment` は一例として、再帰を使って以下のように書けます。
24
+
25
+ ```python3
26
+ def increment(lis, length=None):
27
+ if length is None:
28
+ length = len(lis)
29
+ if length == 0:
30
+ return
31
+
32
+ if lis[length-1]:
33
+ lis[length-1] = 0
34
+ increment(lis, length-1)
35
+ else:
36
+ lis[length-1] = 1
37
+
38
+ return lis
39
+
40
+ ```
41
+
42
+ 上記の `increment`を使うと、ご質問の `arrays` は、以下で得られます。
43
+ ```python3
44
+ M = 10
45
+ a = [1] * M
46
+ arrays = [increment(a).copy() for _ in range(2 ** M)]
47
+ ```
48
+ - **動作確認用 Replt.it:** [https://repl.it/@jun68ykt/Q232173-2](https://repl.it/@jun68ykt/Q232173-2)