Close
#! /usr/bin/perl

#use warnings;
#use diagnostics;
use Math::BigInt;

$SIG{'INT'} = 'END_WITH_STATS';

if(! $ARGV[0]) { $initial_number = 87 }
else { $initial_number = $ARGV[0] }

print '>>> Initial number: ', $initial_number, "\n--- Now computing...\n";

while(! is_palindrome($initial_number)) {
    $initial_number = Math::BigInt->new($result);
    $iteration_count++;
#    exit 1 if ($iteration_count == 200);
}

print "---\n>>> The palindrome was found in ", $iteration_count+1, " iterations\n";
exit 0;

sub is_palindrome {

    my ($current_number) = @_;
    my $reversed_number = reverse($current_number);
    $result = $current_number + $reversed_number;

#    print $current_number, " + ", $reversed_number, " = ", $result;

    if($result eq reverse($result)) {
#        print "\t  -- The result is a palindrome!\n";
        return 1;
    }
    else {
#        print "\t -- :(\n";
        return 0;
    }

    exit 1;

}

sub END_WITH_STATS {

    print "\nNumber of iterations: ", $iteration_count;
    print " --- Length of last result computed: ", length($initial_number);
    print " --- Number recorded in `/tmp/196palindrome.test`\n";

    open(FILE,">:utf8","/tmp/196palindrome.test") or die "$!\n";
    print {FILE} $initial_number;
    close FILE;

    exit 1;

}