--- /dev/null
+#!/usr/bin/perl -w
+
+use v5.40;
+
+my $safe;
+
+LEVEL:
+while (<>) {
+ my $inc;
+ my $prev;
+ for (/\d+/g) {
+ if (defined $prev) {
+ next LEVEL if abs($prev - $_) > 3;
+ next LEVEL if abs($prev - $_) < 1;
+ if (defined $inc) {
+ next LEVEL if $inc && $_ < $prev;
+ next LEVEL if !$inc && $_ > $prev;
+ }
+ $inc = $_ > $prev;
+ }
+ $prev = $_;
+ }
+ $safe++;
+}
+
+say $safe;
--- /dev/null
+#!/usr/bin/perl -w
+
+use v5.40;
+
+my $safe;
+
+LEVEL:
+while (<>) {
+ my @l = /\d+/g;
+ if (is_safe(@l)) {
+ $safe++;
+ next LEVEL;
+ }
+ for my $i (0 .. $#l) {
+ my @l1 = @l;
+ splice (@l1, $i, 1);
+ if (is_safe(@l1)) {
+ $safe++;
+ next LEVEL;
+ }
+ }
+}
+
+say $safe;
+
+sub is_safe {
+ my $inc;
+ my $prev;
+ for (@_) {
+ if (defined $prev) {
+ return 0 if abs($prev - $_) > 3;
+ return 0 if abs($prev - $_) < 1;
+ if (defined $inc) {
+ return 0 if $inc && $_ < $prev;
+ return 0 if !$inc && $_ > $prev;
+ }
+ $inc = $_ > $prev;
+ }
+ $prev = $_;
+ }
+ return 1;
+}