回答編集履歴

3

修正

2019/09/14 22:05

投稿

winterboum
winterboum

スコア23364

test CHANGED
@@ -1 +1,97 @@
1
1
  質問読み違えたので、一旦取り消し
2
+
3
+ タイトルの「配列の中身にループを回して別の配列に入れたい」と
4
+
5
+ 実際にやる「値の約数を求めて配列に入れるみたいな感じです」と
6
+
7
+ 「値ごとの素数を配列に入れたいです。」が違ってるです。
8
+
9
+ タイトルのやり方を書いてました。
10
+
11
+
12
+
13
+ で、「約数」を入れるのでしょうか「素数の約数」を入れるのでしょうか
14
+
15
+ つまり 12 に対して [1,2,3,4,6,12] なのか [1,2,3] なのか
16
+
17
+ プログラムでは [1,2,3,4,6,12] になってます。
18
+
19
+ [1,2,3]を得たいなら
20
+
21
+ require 'prime' しておいて
22
+
23
+ ```
24
+
25
+ lines.each do |a|
26
+
27
+ ary = []
28
+
29
+ Prime.each(a).each{|p|
30
+
31
+ break if p > a
32
+
33
+ ary << p if a % p == 0
34
+
35
+ }
36
+
37
+ p ary
38
+
39
+ end
40
+
41
+ ```
42
+
43
+ ただこれですとまだ題意を満足していないような気がします。
44
+
45
+ 欲しいのは
46
+
47
+ ary = [ [1,2,3],[1,43],[1,2,17,34] ]
48
+
49
+ では?
50
+
51
+ とすると
52
+
53
+ ```
54
+
55
+ ary =
56
+
57
+ lines.map do |a|
58
+
59
+ subary = []
60
+
61
+ Prime.each(a).each{|p|
62
+
63
+ break if p > a
64
+
65
+ subary << p if a % p == 0
66
+
67
+ }
68
+
69
+ subary
70
+
71
+ end
72
+
73
+ ```
74
+
75
+ とか
76
+
77
+ ```
78
+
79
+ ary =
80
+
81
+ lines.map do |a|
82
+
83
+ Prime.each(a).map{|p|
84
+
85
+ break if p > a
86
+
87
+ a % p == 0 ? p : nil
88
+
89
+ }.compact
90
+
91
+ end
92
+
93
+ ```
94
+
95
+ ####
96
+
97
+ 何をしたいのか、が場所によって違うと、読み取り間違いします

2

修正

2019/09/14 22:05

投稿

winterboum
winterboum

スコア23364

test CHANGED
@@ -1,55 +1 @@
1
- 3 #検証する回数
2
-
3
- 12 #検証する値
4
-
5
- 43 #検証する値
6
-
7
- 34 #検証する値
8
-
9
- の場合に ary = [12,43,34] を得たい、ということでしょうか。
10
-
11
- ですと
12
-
13
- ループをまわすなら
14
-
15
- lines.each{|a| ary << a }
16
-
17
- で済みます。
18
-
19
-
20
-
21
- ary[i] = a を使うなら(この場合はそんなことをする必要は無いですが、そのうち必要になるでしょうから)
22
-
23
- lines.each_with_index{|a,i| ary[i] = a }
24
-
25
-
26
-
27
- ただ、今回の場合は
28
-
29
- ary = lines
30
-
31
-
32
-
33
- で済みますし、頭の 3 を残す必要がないなら初めから
34
-
35
- ary = readlines(chomp: true).map{|line| line.split(' ').map(&:to_i)}.flatten[1,-1]
36
-
37
-
38
-
39
- あ、「別の配列に」か、
40
-
41
- すると 下二つは駄目すね。
1
+ 質問読み違えたので、一旦取り消し
42
-
43
- ary = lines は同じ配列を共有
44
-
45
- ary = readlines ...
46
-
47
- は linesがない。
48
-
49
-
50
-
51
- ary = lines.dup
52
-
53
-
54
-
55
- ですね

1

追記

2019/09/14 21:44

投稿

winterboum
winterboum

スコア23364

test CHANGED
@@ -28,6 +28,28 @@
28
28
 
29
29
  ary = lines
30
30
 
31
+
32
+
31
33
  で済みますし、頭の 3 を残す必要がないなら初めから
32
34
 
33
35
  ary = readlines(chomp: true).map{|line| line.split(' ').map(&:to_i)}.flatten[1,-1]
36
+
37
+
38
+
39
+ あ、「別の配列に」か、
40
+
41
+ すると 下の二つは駄目ですね。
42
+
43
+ ary = lines は同じ配列を共有
44
+
45
+ ary = readlines ...
46
+
47
+ は linesがない。
48
+
49
+
50
+
51
+ ary = lines.dup
52
+
53
+
54
+
55
+ ですね