summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-20 05:53:42 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-20 05:53:42 -0500
commit848db9d74f8540c13ce136761aaac5bd54ae2f32 (patch)
tree6d438394551ce3af9c9a32fa38a38b70e7cdf5fc
parente40fd1529a0f1a6bff445ec9d157c1f1b8109c4f (diff)
downloadrosalind-848db9d74f8540c13ce136761aaac5bd54ae2f32.tar.gz
rosalind-848db9d74f8540c13ce136761aaac5bd54ae2f32.zip
another solution
-rw-r--r--GC.pl44
1 files changed, 44 insertions, 0 deletions
diff --git a/GC.pl b/GC.pl
new file mode 100644
index 0000000..b25fdb6
--- /dev/null
+++ b/GC.pl
@@ -0,0 +1,44 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use 5.016;
+
+sub calculate_gc {
+ my ($dna) = @_;
+ return(($dna =~ tr/GC/GC/) / length($dna));
+}
+
+my ($max_name, $max_gc);
+sub process_string {
+ my ($name, $dna) = @_;
+ if ($max_name) {
+ my $gc = calculate_gc($dna);
+ if ($gc > $max_gc) {
+ $max_name = $name;
+ $max_gc = $gc;
+ }
+ }
+ else {
+ $max_name = $name;
+ $max_gc = calculate_gc($dna);
+ }
+}
+
+{
+ my ($name, $dna);
+ while (<>) {
+ chomp;
+ if (/^>(.*)/) {
+ process_string($name, $dna) if $name;
+ $name = $1;
+ $dna = '';
+ }
+ else {
+ $dna .= $_;
+ }
+ }
+ process_string($name, $dna);
+}
+
+say $max_name;
+say $max_gc * 100 . '%';