Permalink
Browse files

[shootout/regex-dna] add version that works on Rakudo

the .subst() call is what causes the excessive memory consumption
of the original version
  • Loading branch information...
1 parent 7a64336 commit 220cec796dc2f7bd1719e14345f1eb049cdcbd67 @gerdr gerdr committed May 14, 2012
Showing with 26 additions and 0 deletions.
  1. +26 −0 shootout/regex-dna.p6-v2.pl
@@ -0,0 +1,26 @@
+use v6;
+
+my $input = slurp;
+my $data = $input.lines.grep({ $_ !~~ /^ \>/}).join.lc;
+
+say $_ ~ ' ' ~ +$data.comb($_) for
+ /agggtaaa|tttaccct/ but 'agggtaaa|tttaccct',
+ /<[cgt]>gggtaaa|tttaccc<[acg]>/ but '[cgt]gggtaaa|tttaccc[acg]',
+ /a<[act]>ggtaaa|tttacc<[agt]>t/ but 'a[act]ggtaaa|tttacc[agt]t',
+ /ag<[act]>gtaaa|tttac<[agt]>ct/ but 'ag[act]gtaaa|tttac[agt]ct',
+ /agg<[act]>taaa|ttta<[agt]>cct/ but 'agg[act]taaa|ttta[agt]cct',
+ /aggg<[acg]>aaa|ttt<[cgt]>ccct/ but 'aggg[acg]aaa|ttt[cgt]ccct',
+ /agggt<[cgt]>aa|tt<[acg]>accct/ but 'agggt[cgt]aa|tt[acg]accct',
+ /agggta<[cgt]>a|t<[acg]>taccct/ but 'agggta[cgt]a|t[acg]taccct',
+ /agggtaa<[cgt]>|<[acg]>ttaccct/ but 'agggtaa[cgt]|[acg]ttaccct';
+
+say;
+
+my %iub = 'b' => '(c|g|t)', 'd' => '(a|g|t)', 'h' => '(a|c|t)',
+ 'k' => '(g|t)', 'm' => '(a|c)', 'n' => '(a|c|g|t)',
+ 'r' => '(a|g)', 's' => '(c|g)', 'v' => '(a|c|g)',
+ 'w' => '(a|t)', 'y' => '(c|t)';
+
+my $output = $data.comb.map({ %iub{$^c} // $^c }).join;
+
+.chars.say for $input, $data, $output;

0 comments on commit 220cec7

Please sign in to comment.