package Day08; use strict; use warnings; use v5.32; use Exporter qw( import ); our @EXPORT = qw( part1 part2 ); sub part1 { my $string = shift; $string =~ s/^"//; # remove beginning quote $string =~ s/"$//; # remove trailing quote my $backslash = qr/\\\\/; my $double_quote = qr/\\\"/; my $ascii = qr/\\x[0-9a-f]{2}/; my $backslash_count = () = $string =~ m/$backslash/g; my $double_quote_count = () = $string =~ m/$double_quote/g; my $ascii_count = () = $string =~ m/$ascii/gi; my $string_characters = 2 + length $string; my $memory_characters = $string_characters - 2 - $backslash_count - $double_quote_count - (3 * $ascii_count); return $string_characters - $memory_characters; } sub part2 { my $string = shift; my $length = length $string; $string =~ s|\\|\\\\|g; $string =~ s|"|\\"|g; return ( length $string ) + 2 - $length; } 1;