回答編集履歴

3

コード変更

2017/08/06 13:05

投稿

katoy
katoy

スコア22324

test CHANGED
@@ -70,14 +70,58 @@
70
70
 
71
71
  seq_array を loop でなく、group_by で書き直すことができました。
72
72
 
73
+ さらに数値範囲を示す文字をパラメータで指定できるようにしてみました。
74
+
73
75
  ```ruby
74
76
 
75
- def seq_array(array)
77
+ # 連続した数値毎に分割する
76
78
 
79
+ def to_seq_array(array)
80
+
77
- array.uniq.sort.group_by.with_index {|x, idx| x - idx }.values
81
+ array.group_by.with_index {|x, idx| x - idx }.values
78
82
 
79
83
  end
84
+
85
+
86
+
87
+ def to_range_array(seq_array, range_str = '〜')
88
+
89
+ seq_array.map { |seq| seq.size > 2 ? "#{seq[0]}#{range_str}#{seq[-1]}" : seq }
90
+
91
+ end
92
+
93
+
94
+
95
+ data = ["1", "2", "3", "5", "7", "8", "9", "10", "11", "12", "15", "16"]
96
+
97
+ seq_array = to_seq_array(data.map(&:to_i))
98
+
99
+
100
+
101
+ range_array = to_range_array(seq_array)
102
+
103
+ puts range_array.join(',')
104
+
105
+
106
+
107
+ range_array = to_range_array(seq_array, "..")
108
+
109
+ puts range_array.join(' ')
80
110
 
81
111
  ```
82
112
 
83
113
 
114
+
115
+ 実行結果:
116
+
117
+ ```
118
+
119
+ $ ruby xxx.rb
120
+
121
+ 1〜3,5,7〜12,15,16
122
+
123
+ 1..3 5 7..12 15 16
124
+
125
+ ```
126
+
127
+

2

誤字

2017/08/06 13:05

投稿

katoy
katoy

スコア22324

test CHANGED
@@ -66,7 +66,7 @@
66
66
 
67
67
 
68
68
 
69
- 追記 2017-08-08
69
+ 追記 2017-08-06
70
70
 
71
71
  seq_array を loop でなく、group_by で書き直すことができました。
72
72
 

1

追記

2017/08/06 12:03

投稿

katoy
katoy

スコア22324

test CHANGED
@@ -63,3 +63,21 @@
63
63
 
64
64
 
65
65
  分割処理と文字化処理が明確に分離しているので、文字列書式を変更するのは容易だと思います。
66
+
67
+
68
+
69
+ 追記 2017-08-08
70
+
71
+ seq_array を loop でなく、group_by で書き直すことができました。
72
+
73
+ ```ruby
74
+
75
+ def seq_array(array)
76
+
77
+ array.uniq.sort.group_by.with_index {|x, idx| x - idx }.values
78
+
79
+ end
80
+
81
+ ```
82
+
83
+