Mercurial > coderloop
view src/reverse_seq.pl @ 0:307a81e46071 tip
initial committ
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Tue, 18 Oct 2011 01:17:49 -0700 |
parents | |
children |
line wrap: on
line source
1 #!/usr/bin/perl3 $a = "/home/r/coderloop-test/reversesequence-a.in";4 $b = "/home/r/coderloop-test/reversesequence-b.in";5 $c = "/home/r/coderloop-test/reversesequence-c.in";7 %test_map = ("a" => "b", "b" => "c");9 sub create_map{10 ## creates a "linked map" from a string representing11 ## the input file.12 (my $file) = @_;13 my %map;14 open FILE, "<".$file or die $!;15 for (<FILE>){ chomp; /^(\w+)\W+(\w+)$/; $map{$1} = $2;}16 close FILE;17 return %map;}19 sub find_beginning{20 ## takes a map representing a linked list and21 ## returns the beginning of that list.22 (my %map) = @_;23 my %val_set = map {$_ => 1} (values %map);24 my $start;25 foreach (keys %map){26 if (!($val_set{$_})){$start = $_;last}}27 return $start;}29 sub trace_map{30 ## crawls through a map representing a linked-list31 ## and converts it into an actual array structure.32 (my %map) = @_;33 my $position = &find_beginning(%map);34 my @array = ($position);35 while(my $new_position = $map{$position}){36 push (@array, $new_position);37 $position = $new_position;}38 return @array;}42 if (defined @ARGV){43 map {print;print"\n";} reverse(trace_map(create_map($ARGV[0])));}