#!/usr/local/bin/perl -W

$a = "123456789";

while (1) {
    $l = 1+ int rand(9);
    $num="";
    $r=0;
    for (1..$l){
	$r += 1+int rand(9-$r);
	last if ($r>9);
	$num .= substr $a, $r-1, 1; 
    }
    $h{$num}++;
    if ($h{$num}==1){
	push @n, $num;
	$c++;
	print "$c - $num\n";
    }
    last if ($c==511);
}
# @n= sort @n;
# for (@n){
#     print "$_\n";
# }

$a = "987654321";
$c=0;
%h=();
while (1) {
    $l = 1+ int rand(9);
    $num="";
    $r=0;
    for (1..$l){
	$r += 1+int rand(9-$r);
	last if ($r>9);
	$num .= substr $a, $r-1, 1; 
    }
    $h{$num}++;
    if ($h{$num}==1){
	push @nd, $num;
	$c++;
	print "$c - $num\n";
    }
    last if ($c==511);
}

for $i (@n){
    for $j (@nd){
	if ((substr($i,length($i)-1,1)>substr($j, 0, 1) && length($i)>1)
	|| (substr($i,length($i)-1,1)<substr($j,0,1) && length($j)>1) ){
		$num = $i.$j;
		$hash{$num}++;
		if ($hash{$num}==1 && length($num)>2){
		    $kount++;
		    push @FIN, $num;
		}
	    }
    }
}
print "Hay $kount números montaña\n";
@FIN = sort { $a <=> $b } @FIN;
open OUT, ">","hillnum.out" or die "Cannot open: $!";
for $i (@FIN){
    print OUT "$i\n";
}
close OUT;

__END__

Esta es una heurística para calcular y grabar la totalidad de números montaña,
  esto es, en los que los dígitos van ascendiendo y después descendiendo. La
  estragia consiste en tratar la fase ascendente y descendente por separado y 
  después combinarlas. Como existe un número limitado de estos números, pode-
  mos saber cuándo hemos acabado.

