From ff3a114540a01c0a8a3eafe50068006ac1ce1075 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 20 Oct 2012 15:00:56 -0500 Subject: another solution --- CONS.pl | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 CONS.pl diff --git a/CONS.pl b/CONS.pl new file mode 100644 index 0000000..6e3200b --- /dev/null +++ b/CONS.pl @@ -0,0 +1,44 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.016; + +use List::Util 'max'; +use List::MoreUtils 'firstidx'; + +my %map = ( + A => 0, + C => 1, + G => 2, + T => 3, +); +my %reverse_map = reverse %map; + +my @profile; + +my $length; +while (<>) { + chomp; + if (!$length) { + $length = length; + for my $base (0..3) { + $profile[$base] = [(0) x $length]; + } + } + my $i = 0; + for my $base (split '') { + $profile[$map{$base}][$i++]++; + } +} + +my $consensus = ''; +for my $index (0..$#{ $profile[0] }) { + my @vals = map { $profile[$_][$index] } 0..3; + my $max = max @vals; + $consensus .= $reverse_map{(firstidx { $_ == $max } @vals)}; +} + +say $consensus; +for my $base (0..3) { + say "$reverse_map{$base}: " . join ' ', @{ $profile[$base] }; +} -- cgit v1.2.3-54-g00ecf