]> www.fi.muni.cz Git - aoc2020.git/commitdiff
Speed optimization
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Tue, 8 Dec 2020 09:48:19 +0000 (10:48 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Tue, 8 Dec 2020 09:48:19 +0000 (10:48 +0100)
16.pl

diff --git a/16.pl b/16.pl
index 3447bfd5c587e24d93ed357508babff29f7ec074..899e942b5897d4cc0c626414a2a0886486ab6eb6 100755 (executable)
--- a/16.pl
+++ b/16.pl
@@ -7,23 +7,23 @@ my @code = map { [ split /\s+/ ] } <>;
 for my $i (0 .. $#code) {
        if ($code[$i]->[0] eq 'nop') {
                local $code[$i]->[0] = 'jmp';
-               interp(@code);
+               interp(\@code);
        } elsif ($code[$i]->[0] eq 'jmp') {
                local $code[$i]->[0] = 'nop';
-               interp(@code);
+               interp(\@code);
        }
 }
                
 sub interp {
-       my @code = @_;
+       my ($code) = @_;
        my $acc = 0;
        my $pc = 0;
        my %seen;
 
-       while (!$seen{$pc} && $pc != @code) {
+       while (!$seen{$pc} && $pc != @$code) {
                $seen{$pc} = 1;
-               my ($ins, $arg) = @{ $code[$pc] };
-               print "pc=$pc, acc=$acc, $ins $arg\n";
+               my ($ins, $arg) = @{ $code->[$pc] };
+               print "pc=$pc, acc=$acc, $ins $arg\n";
                if ($ins eq 'nop') {
                        $pc++;
                } elsif ($ins eq 'acc') {
@@ -32,9 +32,9 @@ sub interp {
                        $pc += $arg;
                }
        }
-       if ($pc == @code) {
+       if ($pc == @$code) {
                print "terminating with acc=$acc.\n";
                exit 0;
        }
-       print "\n";
+       print "\n";
 }