Inferring Protein from Spectrum
Author: L. Grondin
http://rosalind.info/problems/spec/
Sample input
3524.8542 3710.9335 3841.974 3970.0326 4057.0646
Sample output
WMQS
Source code: spec-grondilu.pl
use v6; constant monoisotopic-mass-table = Hash.new: < A 71.03711 C 103.00919 D 115.02694 E 129.04259 F 147.06841 G 57.02146 H 137.05891 I 113.08406 K 128.09496 L 113.08406 M 131.04049 N 114.04293 P 97.05276 Q 128.05858 R 156.10111 S 87.03203 T 101.04768 V 99.06841 W 186.07931 Y 163.06333 >; my @default-data = qw:to/END/; 3524.8542 3710.9335 3841.974 3970.0326 4057.0646 END sub spec(@weight, :$accuracy = .01) { my @a = my @b = sort *.Num, @weight; join '', gather for @b[1..*] Z- @b[0..*] -> $mass { take .key given first { abs($_.value - $mass) < $accuracy }, monoisotopic-mass-table; } } sub MAIN($input-file = Nil) { my @weights = $input-file ?? $input-file.IO.lines !! @default-data; say spec @weights; }