#!/usr/bin/perl use strict; use warnings; my @Eq = ( " ABC + DDE = FCF", " CB + BGE = BCA", " AEE + CBG = DGAE", " ABC + CB = AEE", " DDE + BGE = CBG", " FCF + BCA = DGAE", ); &Sol(@Eq); sub Sol { my (@e) = @_; my %pairs = (); for (@e) { s!=!==!; $pairs{$_} = 0 foreach (m!(\w)!g); } my @vars = keys %pairs; my $count = scalar @vars; while(1) { my $true = 0; my @out = (); foreach (@e) { my $e = $_; while(my($k, $v) = each %pairs) { $e =~ s!$k!$v!g; } $true = eval $e; last unless $true; push @out, $e; } print join("\n", @out,"\n") if $true; my $i = 0; while($i < $count) { last if ++$pairs{$vars[$i]} < 10; $pairs{$vars[$i]} = 0; $i++; } last if $i == $count; } }