#!/usr/bin/perl -w

use Data::Dumper;
use Math::Factoring qw(factor);

foreach my $n (100..999) {
  my $solidnumberds = GetSolidNumberNotationDS(N => $n);
  print $n.' - '.PrintSolidNumberNotation(DS => $solidnumberds)."\n";
}

sub GetSolidNumberNotationDS {
  my (%args) = @_;
  my $n = $args{N};
  my @factors = factor($n);
  my @duplicatepile;
  my @solidnumberfactors;
  my $previousfactor = undef;
  foreach my $factor (sort @factors) {
    my $skip;
    if (defined $previousfactor) {
      if ($factor eq $previousfactor) {
	push @duplicatepile, $factor;
	$skip = 1;
      }
    }
    unless ($skip) {
      $previousfactor = $factor;
      push @solidnumberfactors, $factor;
    }
  }
  my @copysolidnumberfactors = @solidnumberfactors;
  my $total = shift @copysolidnumberfactors;
  foreach my $solidnumberfactor (@copysolidnumberfactors) {
    $total *= $solidnumberfactor;
  }
  return
    {
     D => \@duplicatepile,
     F => \@solidnumberfactors,
     T => $total,
    };

}

sub PrintSolidNumberNotation {
  my (%args) = @_;
  my $ds = $args{DS};
  my @duplicatepile = @{$ds->{D}};
  my $total = $ds->{T};
  return join('.',@duplicatepile).'.'.$total
}
