回答編集履歴
3
コード変更
answer
CHANGED
@@ -34,8 +34,30 @@
|
|
34
34
|
|
35
35
|
追記 2017-08-06
|
36
36
|
seq_array を loop でなく、group_by で書き直すことができました。
|
37
|
+
さらに数値範囲を示す文字をパラメータで指定できるようにしてみました。
|
37
38
|
```ruby
|
39
|
+
# 連続した数値毎に分割する
|
38
|
-
def
|
40
|
+
def to_seq_array(array)
|
39
|
-
array.
|
41
|
+
array.group_by.with_index {|x, idx| x - idx }.values
|
40
42
|
end
|
43
|
+
|
44
|
+
def to_range_array(seq_array, range_str = '〜')
|
45
|
+
seq_array.map { |seq| seq.size > 2 ? "#{seq[0]}#{range_str}#{seq[-1]}" : seq }
|
46
|
+
end
|
47
|
+
|
48
|
+
data = ["1", "2", "3", "5", "7", "8", "9", "10", "11", "12", "15", "16"]
|
49
|
+
seq_array = to_seq_array(data.map(&:to_i))
|
50
|
+
|
51
|
+
range_array = to_range_array(seq_array)
|
52
|
+
puts range_array.join(',')
|
53
|
+
|
54
|
+
range_array = to_range_array(seq_array, "..")
|
55
|
+
puts range_array.join(' ')
|
41
56
|
```
|
57
|
+
|
58
|
+
実行結果:
|
59
|
+
```
|
60
|
+
$ ruby xxx.rb
|
61
|
+
1〜3,5,7〜12,15,16
|
62
|
+
1..3 5 7..12 15 16
|
63
|
+
```
|
2
誤字
answer
CHANGED
@@ -32,7 +32,7 @@
|
|
32
32
|
|
33
33
|
分割処理と文字化処理が明確に分離しているので、文字列書式を変更するのは容易だと思います。
|
34
34
|
|
35
|
-
追記 2017-08-
|
35
|
+
追記 2017-08-06
|
36
36
|
seq_array を loop でなく、group_by で書き直すことができました。
|
37
37
|
```ruby
|
38
38
|
def seq_array(array)
|
1
追記
answer
CHANGED
@@ -30,4 +30,12 @@
|
|
30
30
|
すると、最初の数列全体を 連続した部分毎に分割することができます。
|
31
31
|
あとは、この分割数列を文字列化する処理を書きました。
|
32
32
|
|
33
|
-
分割処理と文字化処理が明確に分離しているので、文字列書式を変更するのは容易だと思います。
|
33
|
+
分割処理と文字化処理が明確に分離しているので、文字列書式を変更するのは容易だと思います。
|
34
|
+
|
35
|
+
追記 2017-08-08
|
36
|
+
seq_array を loop でなく、group_by で書き直すことができました。
|
37
|
+
```ruby
|
38
|
+
def seq_array(array)
|
39
|
+
array.uniq.sort.group_by.with_index {|x, idx| x - idx }.values
|
40
|
+
end
|
41
|
+
```
|