回答編集履歴

3

別解の追加

2021/07/25 04:48

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -91,3 +91,35 @@
91
91
  ```
92
92
 
93
93
  とにかく、書き方はいくつもあります。
94
+
95
+
96
+
97
+ **追記3**
98
+
99
+ range も len も [i] による要素アクセスも全部なくせます。
100
+
101
+ ```Python
102
+
103
+ def sum13(nums):
104
+
105
+ if not nums:
106
+
107
+ return 0
108
+
109
+ prev = total = 0
110
+
111
+ for val in nums:
112
+
113
+ if val != 13 and prev != 13:
114
+
115
+ total += val
116
+
117
+ prev = val
118
+
119
+ return total
120
+
121
+
122
+
123
+ print(sum13([1, 2, 13, 2, 1, 13]))
124
+
125
+ ```

2

別解の追加

2021/07/25 04:48

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -55,3 +55,39 @@
55
55
  条件は、「13ではない、かつ 13の次ではない」であり、
56
56
 
57
57
  「13の次ではない」は「先頭であるか、または 1つ前が 13ではない」。
58
+
59
+
60
+
61
+ **追記2**
62
+
63
+ 条件は、「13ではない、かつ 1つ前が 13ではない」ですから、
64
+
65
+ 1つ前の値(previous value) を憶えておく変数を用意すると、
66
+
67
+ ```Python
68
+
69
+ def sum13(nums):
70
+
71
+ if not nums:
72
+
73
+ return 0
74
+
75
+ prev = total = 0
76
+
77
+ for i in range(len(nums)):
78
+
79
+ if nums[i] != 13 and prev != 13:
80
+
81
+ total += nums[i]
82
+
83
+ prev = nums[i]
84
+
85
+ return total
86
+
87
+
88
+
89
+ print(sum13([1, 2, 13, 2, 1, 13]))
90
+
91
+ ```
92
+
93
+ とにかく、書き方はいくつもあります。

1

コードの追加

2021/07/25 02:34

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -19,3 +19,39 @@
19
19
  nums[4] は 1 で 13 ではなく、nums[3] が 13 ではないから total は 3。
20
20
 
21
21
  nums[5] は 13 で else に行き、total は 3 のまま。
22
+
23
+
24
+
25
+ **追記**
26
+
27
+ なぜ、3 となるかは説明しましたが、条件通りのコードとするには、
28
+
29
+ ```Python
30
+
31
+ def sum13(nums):
32
+
33
+ if not nums:
34
+
35
+ return 0
36
+
37
+ total = 0
38
+
39
+ for i in range(len(nums)):
40
+
41
+ if nums[i] != 13 and (i == 0 or nums[i-1] != 13):
42
+
43
+ total += nums[i]
44
+
45
+ return total
46
+
47
+
48
+
49
+ print(sum13([1, 2, 13, 2, 1, 13]))
50
+
51
+ ```
52
+
53
+
54
+
55
+ 条件は、「13ではない、かつ 13の次ではない」であり、
56
+
57
+ 「13の次ではない」は「先頭であるか、または 1つ前が 13ではない」。