#!/usr/bin/env perl use strict; use warnings; use feature 'say'; my @queue = '123456789'; my %seen; while (@queue) { local $_ = shift @queue; next if (exists $seen{$_}); $seen{$_}++; say if eval == 100; while (/\d+?/g) { my ($pre,$match,$post) = ($`,$&,$'); push @queue, "$pre$match+$post" unless (!$post || $post =~ /[+-]/); push @queue, "$pre-$match$post" unless ($pre =~ /[-+]$/ ); } }