回答編集履歴

7

コードのコメントの変更。

2015/07/25 17:59

投稿

manman
manman

スコア233

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- # 1/nが循環小数なら以下でOK
13
+ # 1/nが有限小数いとき
14
14
 
15
15
  def sum(n, i, j)
16
16
 

6

コードの修正をおこなう。

2015/07/25 17:59

投稿

manman
manman

スコア233

test CHANGED
@@ -10,21 +10,21 @@
10
10
 
11
11
 
12
12
 
13
- # n = 2, 5, 10 以外なら以下でOK
13
+ # 1/nが循環小数なら以下でOK
14
14
 
15
15
  def sum(n, i, j)
16
16
 
17
17
  if n > 10
18
18
 
19
- str, remain = BigDecimal("1").div(n, j + n).to_s.split('E-') # 念のためn余分に位をとっている
19
+ a, remain = BigDecimal("1").div(n, j + n).to_s.split('E-') # 念のためn余分に位をとっている
20
20
 
21
21
  else
22
22
 
23
- str, remain = BigDecimal("1").div(n, j + n).to_s.split('E') # 念のためn余分に位をとっている
23
+ a, remain = BigDecimal("1").div(n, j + n).to_s.split('E') # 念のためn余分に位をとっている
24
24
 
25
25
  end
26
26
 
27
- x, y, *z = str.split('')
27
+ x, y, *z = a.split('')
28
28
 
29
29
  z.map(&:to_i).unshift(0 * remain.to_i)[i - 1..j - 1].inject(:+)
30
30
 

5

コードを短くしてみた。

2015/07/25 17:18

投稿

manman
manman

スコア233

test CHANGED
@@ -18,19 +18,15 @@
18
18
 
19
19
  str, remain = BigDecimal("1").div(n, j + n).to_s.split('E-') # 念のためn余分に位をとっている
20
20
 
21
- x, y, *z = str.split('')
22
-
23
- return z.map(&:to_i).unshift(0 * remain.to_i)[i - 1..j - 1].inject(:+)
24
-
25
21
  else
26
22
 
27
23
  str, remain = BigDecimal("1").div(n, j + n).to_s.split('E') # 念のためn余分に位をとっている
28
24
 
29
- x, y, *z = str.split('')
25
+ end
30
26
 
31
- return z.map(&:to_i)[i - 1..j - 1].inject(:+)
27
+ x, y, *z = str.split('')
32
28
 
33
- end
29
+ z.map(&:to_i).unshift(0 * remain.to_i)[i - 1..j - 1].inject(:+)
34
30
 
35
31
  end
36
32
 

4

しょうもないミスをしていたので修正。

2015/07/25 16:48

投稿

manman
manman

スコア233

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  x, y, *z = str.split('')
22
22
 
23
- return z.map(&:to_i).unshift(0 * remain.to_i)[i - 1, j - 1].inject(:+)
23
+ return z.map(&:to_i).unshift(0 * remain.to_i)[i - 1..j - 1].inject(:+)
24
24
 
25
25
  else
26
26
 
@@ -28,7 +28,7 @@
28
28
 
29
29
  x, y, *z = str.split('')
30
30
 
31
- return z.map(&:to_i)[i - 1, j - 1].inject(:+)
31
+ return z.map(&:to_i)[i - 1..j - 1].inject(:+)
32
32
 
33
33
  end
34
34
 
@@ -44,6 +44,6 @@
44
44
 
45
45
  実行結果
46
46
 
47
- 29
47
+ 27
48
48
 
49
49
  432

3

n が 10 未満でもOK

2015/07/25 16:31

投稿

manman
manman

スコア233

test CHANGED
@@ -10,17 +10,33 @@
10
10
 
11
11
 
12
12
 
13
- def sum(n, i, j)
13
+ # n = 2, 5, 10 以外なら以下でOK
14
14
 
15
- str, remain = BigDecimal("1").div(n, j + n).to_s.split('E-') # 念のためn余分に位をとっている
15
+ def sum(n, i, j)
16
16
 
17
- x, y, *z = str.split('')
17
+ if n > 10
18
18
 
19
+ str, remain = BigDecimal("1").div(n, j + n).to_s.split('E-') # 念のためn余分に位をとっている
20
+
21
+ x, y, *z = str.split('')
22
+
19
- z.map(&:to_i).unshift(0 * remain.to_i)[i - 1, j - 1].inject(:+)
23
+ return z.map(&:to_i).unshift(0 * remain.to_i)[i - 1, j - 1].inject(:+)
24
+
25
+ else
26
+
27
+ str, remain = BigDecimal("1").div(n, j + n).to_s.split('E') # 念のためn余分に位をとっている
28
+
29
+ x, y, *z = str.split('')
30
+
31
+ return z.map(&:to_i)[i - 1, j - 1].inject(:+)
32
+
33
+ end
20
34
 
21
35
  end
22
36
 
23
37
 
38
+
39
+ p sum(7, 3, 8)
24
40
 
25
41
  p sum(97, 2, 96)
26
42
 
@@ -28,4 +44,6 @@
28
44
 
29
45
  実行結果
30
46
 
47
+ 29
48
+
31
49
  432

2

コメントを追加した。

2015/07/25 16:10

投稿

manman
manman

スコア233

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  def sum(n, i, j)
14
14
 
15
- str, remain = BigDecimal("1").div(n, j + n).to_s.split('E-')
15
+ str, remain = BigDecimal("1").div(n, j + n).to_s.split('E-') # 念のためn余分に位をとっている
16
16
 
17
17
  x, y, *z = str.split('')
18
18
 

1

文を追加してみた。

2015/07/25 15:15

投稿

manman
manman

スコア233

test CHANGED
@@ -1,3 +1,7 @@
1
+ シンプルに解いてみた。
2
+
3
+
4
+
1
5
  jの上限はメモリが許す限りです。
2
6
 
3
7
  ```Ruby