Encoding Suffix Trees
Author: L. Grondin
http://rosalind.info/problems/suff/
Sample input
ATAAATG$
Sample output
AAATG$ G$ T ATG$ TG$ A A AAATG$ G$ T G$ $
Source code: suff-grondilu.pl
use v6; sub suffixes(Str $str) { map *.flip, [\~] $str.flip.comb } sub suffix-tree(@a) { @a == 0 ?? [] !! @a == 1 ?? hash @a[0] => [] !! hash gather for @a.classify(*.substr(0, 1)) { my $subtree = suffix-tree([ grep *.chars, map *.substr(1), .value[] ]); if $subtree.elems == 1 { my $pair = $subtree.pick; take .key ~ $pair.key => $pair.value; } else { take .key => $subtree; } } } sub show-edges($tree) { return if $tree.elems == 0; for $tree[] { say .key; show-edges .value; } } sub MAIN(Str $input = 'ATAAATG$') { show-edges suffix-tree suffixes $input; }