树中的距离
作者:L. Grondin
http://rosalind.info/problems/nwck/
示例输入
(cat)dog; dog cat (dog,cat); dog cat
注意:输入数据中需要有一个尾随换行符,以便输入可以被三整除。
示例输出
1 2
源代码: nwck-grondilu.pl
use v6; my $default-data = q:to/END/; (cat)dog; dog cat (dog,cat); dog cat END sub MAIN($input-file = Nil) { my $input = $input-file ?? $input-file.IO.slurp !! $default-data; say gather for $input.lines.list -> $newick, $taxa, $ { my ($a, $b) = $taxa.split: ' '; my @token = $newick.comb: rx/ <.ident>+ | <[(),]> /; Nil while @token.shift ne $a|$b; my ($climbs, $descents) = 0 xx 2; for @token { last if $_ eq $a or $_ eq $b; if /< , ) >/ { if $descents > 0 { $descents-- } else { $climbs++ } } if /< , ( >/ { $descents++ } } take $climbs + $descents; }.join(" "); }