my %present = (); # numbers already present my $binary_repr = ""; # binary representation so far my $zeroone_repr = ""; # 0 and 1 from decimal representation so far sub compute_next_term { my $try = 1; while (1) { if (exists $present{$try}) { # already seen } else { my $binary = sprintf("%b", $try); my $zeroone = "$try"; $zeroone =~ s,[^01]+,,g; if (substr($binary_repr . $binary, 0, length($zeroone_repr) + length($zeroone)) ne ($zeroone_repr . $zeroone)) { # contradiction } else { $present{$try} = 1; $binary_repr .= $binary; $zeroone_repr .= $zeroone; return $try; } } $try++; } } foreach my $n (1..10_000) { print $n, " ", compute_next_term(), "\n"; }