5
5
# Fix from David Campbell
6
6
7
7
const variants = [
8
- " agggtaaa|tttaccct" ,
9
- " [cgt]gggtaaa|tttaccc[acg]" ,
10
- " a[act]ggtaaa|tttacc[agt]t" ,
11
- " ag[act]gtaaa|tttac[agt]ct" ,
12
- " agg[act]taaa|ttta[agt]cct" ,
13
- " aggg[acg]aaa|ttt[cgt]ccct" ,
14
- " agggt[cgt]aa|tt[acg]accct" ,
15
- " agggta[cgt]a|t[acg]taccct" ,
16
- " agggtaa[cgt]|[acg]ttaccct"
8
+ r " agggtaaa|tttaccct" ,
9
+ r " [cgt]gggtaaa|tttaccc[acg]" ,
10
+ r " a[act]ggtaaa|tttacc[agt]t" ,
11
+ r " ag[act]gtaaa|tttac[agt]ct" ,
12
+ r " agg[act]taaa|ttta[agt]cct" ,
13
+ r " aggg[acg]aaa|ttt[cgt]ccct" ,
14
+ r " agggt[cgt]aa|tt[acg]accct" ,
15
+ r " agggta[cgt]a|t[acg]taccct" ,
16
+ r " agggtaa[cgt]|[acg]ttaccct"
17
17
]
18
18
19
- const subs = [
20
- (r " B" , " (c|g|t)" ),
21
- (r " D" , " (a|g|t)" ),
22
- (r " H" , " (a|c|t)" ),
23
- (r " K" , " (g|t)" ),
24
- (r " M" , " (a|c)" ),
25
- (r " N" , " (a|c|g|t)" ),
26
- (r " R" , " (a|g)" ),
27
- (r " S" , " (c|g)" ),
28
- (r " V" , " (a|c|g)" ),
29
- (r " W" , " (a|t)" ),
30
- (r " Y" , " (c|t)" )
31
- ]
19
+ const subs = (
20
+ (" B" => " (c|g|t)" ),
21
+ (" D" => " (a|g|t)" ),
22
+ (" H" => " (a|c|t)" ),
23
+ (" K" => " (g|t)" ),
24
+ (" M" => " (a|c)" ),
25
+ (" N" => " (a|c|g|t)" ),
26
+ (" R" => " (a|g)" ),
27
+ (" S" => " (c|g)" ),
28
+ (" V" => " (a|c|g)" ),
29
+ (" W" => " (a|t)" ),
30
+ (" Y" => " (c|t)" )
31
+ )
32
32
33
33
function perf_regex_dna ()
34
34
infile = joinpath (SHOOTOUT_DATA_PATH, " regexdna-input.txt" )
@@ -38,20 +38,30 @@ function perf_regex_dna()
38
38
seq = replace (seq, r" >.*\n |\n " => " " )
39
39
l2 = length (seq)
40
40
41
+ kk = 0
41
42
for v in variants
42
43
k = 0
43
- for m in eachmatch (Regex (v) , seq)
44
+ for m in eachmatch (v , seq)
44
45
k += 1
45
46
end
46
- # @printf("%s %d\n", v, k)
47
+ kk += k
47
48
end
48
49
49
- for (u, v) in subs
50
- seq = replace (seq, u => v)
50
+ if applicable (replace, seq, subs... )
51
+ # VERSION > 1.7-dev
52
+ seq = replace (seq, subs... )
53
+ elseif false
54
+ # semi-optimized regex
55
+ seq = replace (seq, subs... )
56
+ r = Regex (join (first .(subs), " |" ))
57
+ repl = Dict (subs)
58
+ seq = replace (seq, r => (r -> repl[r]))
59
+ else
60
+ # multiple passes
61
+ for sub in subs
62
+ seq = replace (seq, sub)
63
+ end
51
64
end
52
65
53
- # println()
54
- # println(l1)
55
- # println(l2)
56
- # println(length(seq))
66
+ seq, kk
57
67
end
0 commit comments