summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-20 06:18:26 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-20 06:18:26 -0500
commitb63cd2deb6d148db96bb29caedfddad4cd00d334 (patch)
treed5bce78da8ae54d128e06f61a8cc6822913c2cee
parent123da2fe665707a22e01c60a11277f9e8a873e20 (diff)
downloadrosalind-b63cd2deb6d148db96bb29caedfddad4cd00d334.tar.gz
rosalind-b63cd2deb6d148db96bb29caedfddad4cd00d334.zip
another solution
-rw-r--r--ORF.pl48
1 files changed, 48 insertions, 0 deletions
diff --git a/ORF.pl b/ORF.pl
new file mode 100644
index 0000000..517a05b
--- /dev/null
+++ b/ORF.pl
@@ -0,0 +1,48 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use 5.016;
+
+my %map = qw(
+ UUU F CUU L AUU I GUU V
+ UUC F CUC L AUC I GUC V
+ UUA L CUA L AUA I GUA V
+ UUG L CUG L AUG M GUG V
+ UCU S CCU P ACU T GCU A
+ UCC S CCC P ACC T GCC A
+ UCA S CCA P ACA T GCA A
+ UCG S CCG P ACG T GCG A
+ UAU Y CAU H AAU N GAU D
+ UAC Y CAC H AAC N GAC D
+ UAA Stop CAA Q AAA K GAA E
+ UAG Stop CAG Q AAG K GAG E
+ UGU C CGU R AGU S GGU G
+ UGC C CGC R AGC S GGC G
+ UGA Stop CGA R AGA R GGA G
+ UGG W CGG R AGG R GGG G
+);
+
+my $rna = <> =~ tr/T/U/r;
+my @proteins;
+
+for my $string ($rna, scalar(reverse($rna =~ tr/ACGU/UGCA/r))) {
+ my $start = 0;
+ while ((my $pos = index($string, 'AUG', $start)) != -1) {
+ my $orf = substr($string, $pos);
+ my $protein;
+ my $stop;
+ for my $amino (map { $map{$_} } $orf =~ /.../g) {
+ if ($amino eq 'Stop') {
+ $stop = 1;
+ last;
+ }
+ $protein .= $amino;
+ }
+ push @proteins, $protein
+ if $stop;
+ $start = $pos + 1;
+ }
+}
+
+my %seen;
+say for grep { !$seen{$_}++ } @proteins;