# solving math puzzles with regexes is FUN! ("." x 10_000) =~ m{ ^ # camille (.{0,3960}) (?(?{ length($1) >= 3960 })(?!)) # june (.{100} \1) (?(?{ length($1.$2) >= 3960 })(?!)) # martha (.{100} \2) (?(?{ length($1.$2.$3) != 3960 })(?!)) (?{ print join(" ", map length, $1, $2, $3), "\n" }) (?: \1 (?: \2 \2 (??{ ".{" . 1.5*length($3) . "}" }) $ (?{ print join(" ", map .5 * length, $1 x 2, $3 x 4, $2 x 3), "\n" }) | \3 \3 (??{ ".{" . 1.5*length($2) . "}" }) $ (?{ print join(" ", map .5 * length, $1 x 2, $2 x 4, $3 x 3), "\n" }) ) | \2 (?: \1 \1 (??{ ".{" . 1.5*length($3) . "}" }) $ (?{ print join(" ", map .5 * length, $2 x 2, $3 x 4, $1 x 3), "\n" }) | \3 \3 (??{ ".{" . 1.5*length($1) . "}" }) $ (?{ print join(" ", map .5 * length, $2 x 2, $1 x 4, $3 x 3), "\n" }) ) | \3 (?: \1 \1 (??{ ".{" . 1.5*length($2) . "}" }) $ (?{ print join(" ", map .5 * length, $3 x 2, $2 x 4, $1 x 3), "\n" }) | \2 \2 (??{ ".{" . 1.5*length($1) . "}" }) $ (?{ print join(" ", map .5 * length, $3 x 2, $1 x 4, $2 x 3), "\n" }) ) ) }x;