回答編集履歴

4

修正

2015/09/19 07:01

投稿

ozwk
ozwk

スコア13521

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- 「最初に出てきた切断位置のを返す関数」(先頭を0文字目とする、切断不可なら文字列長を返す)
21
+ 「最初に出てきた切断位置のインデックスを返す関数」(先頭を0文字目とする、切断不可なら文字列長を返す)
22
22
 
23
23
  を作ります。
24
24
 

3

日本語が不自由だったのを修正

2015/09/19 07:00

投稿

ozwk
ozwk

スコア13521

test CHANGED
@@ -10,13 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- 複数の切断位置に対応するなら、
13
+ 複数の切断位置に対応することを考えます。
14
-
15
- 「最初に出てきた切断位置の値を返す関数」(先頭を0文字目とする、切断不可なら文字列長を返す)
16
-
17
- を作ります。
18
-
19
- それを用いて
20
14
 
21
15
  (塩基配列だと長ったらしいので例として".."で切断するとします。)
22
16
 
@@ -24,9 +18,17 @@
24
18
 
25
19
 
26
20
 
21
+ 「最初に出てきた切断位置の値を返す関数」(先頭を0文字目とする、切断不可なら文字列長を返す)
22
+
23
+ を作ります。
24
+
25
+ それを用いて、
26
+
27
+
28
+
27
29
  対象文字列に関数を適用します。
28
30
 
29
- 結果を配列に保存します。
31
+ 結果を配列に退避します。
30
32
 
31
33
  対象文字列を結果分オフセットして、
32
34
 

2

追記に対する回答

2015/09/19 06:56

投稿

ozwk
ozwk

スコア13521

test CHANGED
@@ -3,3 +3,49 @@
3
3
  `s[i]`~`s[i+5]`が"GGATCC"に一致するか調べ、
4
4
 
5
5
  一致すれば`i+1`(検索文字列の先頭から一文字後ろで切るから+1)を返し、一致しなければ`i`をインクリメントして繰り返すのはどうでしょう。
6
+
7
+
8
+
9
+ ---
10
+
11
+
12
+
13
+ 複数の切断位置に対応するなら、
14
+
15
+ 「最初に出てきた切断位置の値を返す関数」(先頭を0文字目とする、切断不可なら文字列長を返す)
16
+
17
+ を作ります。
18
+
19
+ それを用いて
20
+
21
+ (塩基配列だと長ったらしいので例として".."で切断するとします。)
22
+
23
+ "012..56..9" -> "012. .56. .9" 切断位置{3,7,9}のような。
24
+
25
+
26
+
27
+ 対象文字列に関数を適用します。
28
+
29
+ 結果を配列に保存します。
30
+
31
+ 対象文字列を結果分オフセットして、
32
+
33
+ 切断できなくなるまで繰り返します。
34
+
35
+ 最後に配列の累積和を取ればもともとの対象文字列のすべての切断位置になります。(きっと多分)
36
+
37
+
38
+
39
+ こんな感じです:
40
+
41
+ 対象文字列 -> 作用させた後の配列
42
+
43
+ "012..56..9" -> {3}
44
+
45
+ ".56..9" -> {3,4}
46
+
47
+ ".9" -> {3,4,2}
48
+
49
+
50
+
51
+ {3,4,2} -> {3,7,9}

1

修正

2015/09/19 06:53

投稿

ozwk
ozwk

スコア13521

test CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  `s[i]`~`s[i+5]`が"GGATCC"に一致するか調べ、
4
4
 
5
- 一致すれば`i`を返し、一致しなければ`i`をインクリメントして繰り返すのはどうでしょう。
5
+ 一致すれば`i+1`(検索文字列の先頭から一文字後ろで切るから+1)を返し、一致しなければ`i`をインクリメントして繰り返すのはどうでしょう。