#! /usr/bin/perl # # Reference implementation for dynamic array testing. @a = (); while (<>) { chomp(); # print "$_\n"; @F = split(); if ($F[0] eq "push") { push(@a, $F[1]); } elsif ($F[0] eq "unshift") { unshift(@a, $F[1]); } elsif ($F[0] eq "pop") { if (@a == 0) { print "*UFLOW*\n"; } else { my $n = int(pop(@a)); print "$n\n"; } } elsif ($F[0] eq "shift") { if (@a == 0) { print "*UFLOW*\n"; } else { my $n = int(shift(@a)); print "$n\n"; } } elsif ($F[0] eq "insert") { shift(@F); unshift(@a, @F); } elsif ($F[0] eq "append") { shift(@F); push(@a, @F); } elsif ($F[0] eq "delete") { if ($F[1] > @a) { # @a = (); print "*UFLOW*\n"; } else { splice(@a, 0, $F[1]); } } elsif ($F[0] eq "reduce") { if ($F[1] > @a) { # @a = (); print "*UFLOW*\n"; } else { $#a -= $F[1]; } } elsif ($F[0] eq "set") { if ($F[1] > @a) { for (my $i = @a; $i < $F[1]; $i++) { $a[$i] = -1; } } $a[$F[1]] = int($F[2]); } elsif ($F[0] eq "get") { if ($F[1] >= @a) { print "*RANGE*\n"; } else { print int($a[$F[1]]), "\n"; } } elsif ($F[0] eq "first") { print int($a[0]), "\n"; } elsif ($F[0] eq "last") { print int($a[$#a]), "\n"; } elsif ($F[0] eq "show") { if (@a) { print join(" ", map int, @a), "\n"; } else { print "*EMPTY*\n"; } } else { print "*BAD*\n"; } }