--- /dev/null
+#!/usr/bin/perl -w
+
+use v5.36;
+use strict;
+use experimental 'multidimensional';
+
+my $tsc = 1;
+my $x = 1;
+my $prev_gen = 0;
+my $sum = 0;
+while (<>) {
+ my ($op, $num) = /^(\w+)(?: (-?\d+))?/;
+ # say "$tsc $x $op $num";
+ $tsc++;
+ my $gen = int(($tsc+20)/40);
+ if ($gen != $prev_gen) {
+ $prev_gen = $gen;
+ my $str = $x * ((40*$gen)-20);
+ $sum += $str;
+ # say "$tsc x $x = ", $str;
+ }
+ if ($op eq 'addx') {
+ $x += $num;
+ $tsc++;
+ }
+}
+
+say $sum;
+
--- /dev/null
+#!/usr/bin/perl -w
+
+use v5.36;
+use strict;
+use experimental 'multidimensional';
+
+my $tsc = 1;
+my $prev_tsc = 1;
+my $x = 1;
+my $prev_gen = 0;
+while (<>) {
+ my ($op, $num) = /^(\w+)(?: (-?\d+))?/;
+
+ $tsc++;
+ while ($prev_tsc <= $tsc) {
+ # say "$prev_tsc ok" if $x +2 <= $prev_tsc;
+ my $off = $prev_tsc % 40;
+ print(($x <= $off && $x + 2 >= $off) ? '#' : '.');
+ print "\n" if $prev_tsc % 40 == 0;
+ $prev_tsc++;
+ }
+ if ($op eq 'addx') {
+ $x += $num;
+ $tsc++;
+ }
+}
+print "\n";
+