project-euler / project-euler / 33.pl

#!/usr/bin/perl 

use strict;
use warnings;

use Math::BigInt;
use Math::BigRat;

my %h = ();

foreach my $numer (11 .. 99)
{
    if ($numer % 10 == 0)
    {
        next;
    }

    foreach my $denom (($numer+1)..99)
    {
        my $get_my = sub {
            my $digit = shift;
            my ($n, $d) = ($numer, $denom);
            if (
                    ($d =~ s{$digit}{})
                 && ($n =~ s{$digit}{})
                 && ($d * $numer == $n * $denom)
             )
            {
                 return ($n, $d);
            }
            else
            {
                return ();
            }
        };

        foreach my $digit ($numer%10,int($numer/10))
        {
            if (my ($n, $d) = $get_my->($digit))
            {
                my $gcd = Math::BigInt::bgcd($n, $d);
                $n /= "$gcd";
                $d /= "$gcd";

                print "$n/$d\n";
                $h{"$n/$d"}++;
            }
        }
    }
}

print keys(%h), "\n"
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.