diff options
author | Jesse Luehrs <doy@tozt.net> | 2012-10-20 05:53:42 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2012-10-20 05:53:42 -0500 |
commit | 848db9d74f8540c13ce136761aaac5bd54ae2f32 (patch) | |
tree | 6d438394551ce3af9c9a32fa38a38b70e7cdf5fc | |
parent | e40fd1529a0f1a6bff445ec9d157c1f1b8109c4f (diff) | |
download | rosalind-848db9d74f8540c13ce136761aaac5bd54ae2f32.tar.gz rosalind-848db9d74f8540c13ce136761aaac5bd54ae2f32.zip |
another solution
-rw-r--r-- | GC.pl | 44 |
1 files changed, 44 insertions, 0 deletions
@@ -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 . '%'; |