Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use strict;
- use warnings;
- use List::Util q(max);
- my $track_count = int(next_line());
- my @tracks;
- for(1 .. $track_count) {
- my @courses;
- my $course_count = int(next_line());
- for(1 .. $course_count) {
- my $line = next_line();
- my ($course_number, $follow_up_one, $follow_up_two) = prepare($line);
- $courses[$course_number] = {follow_up_one => $follow_up_one,
- follow_up_two => $follow_up_two};
- }
- push @tracks, \@courses;
- }
- foreach my $track (@tracks) {
- print search(100, $track, 0) . "\n";
- }
- sub search
- {
- my ($course_number, $courses_ref, $total) = @_;
- my @courses = @{$courses_ref};
- if($course_number == 0) {
- return $total;
- } else {
- return max(search($courses[$course_number]->{follow_up_one}, $courses_ref, $total + $course_number),
- search($courses[$course_number]->{follow_up_two}, $courses_ref, $total + $course_number));
- }
- }
- sub prepare
- {
- my ($line) = @_;
- my ($course_number, $follow_up_one, $follow_up_two) = split(' ', $line);
- return ($course_number, $follow_up_one, $follow_up_two);
- }
- sub next_line
- {
- my $line = <STDIN>;
- return $line;
- }
Add Comment
Please, Sign In to add comment