From d2312baf5bea9bb603352b10410cb82f9c3e2e49 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Wed, 14 Feb 2018 12:31:28 -0500 Subject: [PATCH] 2016-12 --- 2016/12/1.pl | 59 +++++++++++++++++++++++++++++++++++++++++++++++ 2016/12/input.txt | 23 ++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 2016/12/1.pl create mode 100644 2016/12/input.txt diff --git a/2016/12/1.pl b/2016/12/1.pl new file mode 100644 index 0000000..0537474 --- /dev/null +++ b/2016/12/1.pl @@ -0,0 +1,59 @@ +use 5.20.0; + +undef $/; +my $code = <>; + +$code =~ s/\b([a-d])\b/\$$1/g; + +$code =~ s/cpy (\S+) (\S+)/$2 = $1/g; + +$code =~ s/inc (\S+)/$1++/g; +$code =~ s/dec (\S+)/$1--/g; + + +my $i = 1; +$code = + join "\n", + map { $_->[1] } + map { + $_->[1] =~ s/jnz (\S+) (\S+)/"if($1){ goto LINE_" . ( $_->[0] + $2 ) . "}"/e; + $_ } + map { $_->[1] = "LINE_" . $_->[0] . ': ' . $_->[1]; $_ } + map { [ $i++, $_ ] } grep { length } split /\n/, $code; + +$code =~ s/$/;/mg; + +my( $c, $d) = ( 1,0); +eval $code; + +die $@ if $@; + +say $a; + +__END__ +use Scalar::Util qw/ looks_like_number /; + +my $i = 0; +my @instructions = map { "LINE_" . $i++ . ': ' . $_ } <>; + + +my %reg; + +while ( my $c = $instructions[$i++] ) { + say $i; + use DDP; + p %reg; + if( $c =~ /cpy (\S+) (.)/ ) { + $reg{$2} = looks_like_number($1) ? $1 : $reg{$1}; + } + elsif ( $c =~ /(inc|dec) (.)/ ) { + $reg{$2} += ($1 eq 'inc') ? 1 : -1; + } + elsif( $c =~ /jnz (.) (.*)/ ) { + $i += -1 + $2 if $reg{$1}; + } + else { die } + my $x = ; +} + +say $reg{a}; diff --git a/2016/12/input.txt b/2016/12/input.txt new file mode 100644 index 0000000..3729d83 --- /dev/null +++ b/2016/12/input.txt @@ -0,0 +1,23 @@ +cpy 1 a +cpy 1 b +cpy 26 d +jnz c 2 +jnz 1 5 +cpy 7 c +inc d +dec c +jnz c -2 +cpy a c +inc a +dec b +jnz b -2 +cpy c b +dec d +jnz d -6 +cpy 19 c +cpy 11 d +inc a +dec d +jnz d -2 +dec c +jnz c -5