use strict;
use Algorithm::Loops qw( NextPermute );
$|= 1;
my %map;
@map{1..9,'a'..'f'}= reverse 1..9,'a'..'f';
my @digs= reverse 1..9,'a'..'f';
sub Biggest {
my( $len, @toks )= @_;
do {
my $hex= join '', @map{ @toks[0..$len-1] };
my $num;
if( $len <= 8 ) {
$num= hex $hex;
} else {
$num= hex substr( $hex, 0, 7 );
$num *= 16 for 9..$len;
$num += hex substr( $hex, 8, -1 );
}
for( $hex =~ /./g, 0 ) {
if( ! $_ ) {
print "$hex\n";
return;
}
last if 0 != $num % hex($_);
}
@toks[ $len .. $#toks ]= reverse @toks[ $len .. $#toks ]
if $len < $#toks;
} while( NextPermute(@toks) );
@toks= @map{ @toks };
print "No solution for $len of hexits: @toks\n";
}
for my $len ( 1..@digs ) {
Biggest( $len, @map{ @digs } );
}
####
f
7e
f5a
fe4c
fe736
feca54
fed3672
fedc9138
fed7bc3a8
fed45b1ac7
fedc641a287
fedc7a361b45
fedcba1932547
fedcb97a645183
fedcba384952716
##
##
use strict;
use Algorithm::Loops qw( NextPermute );
$|= 1;
my %map;
@map{1..9,'a'..'f'}= reverse 1..9,'a'..'f';
my @even= reverse 1..4,6..9,'b'..'e';
my @five= ( 'f','d','b',9,7,5,3,1 );
sub Biggest {
my( $len, @toks )= @_;
do {
my $hex= join '', @map{ @toks[0..$len-1] };
my $num;
if( $len <= 8 ) {
$num= hex $hex;
} else {
$num= hex substr( $hex, 0, 7 );
$num *= 16 for 9..$len;
$num += hex substr( $hex, 8, -1 );
}
for( $hex =~ /./g, 0 ) {
if( ! $_ ) {
print "$hex\n";
return;
}
last if 0 != $num % hex($_);
}
@toks[ $len .. $#toks ]= reverse @toks[ $len .. $#toks ]
if $len < $#toks;
} while( NextPermute(@toks) );
@toks= @map{ @toks };
print "No solution for $len of hexits: @toks\n";
}
for my $len ( 1..@even ) {
Biggest( $len, @map{ @even } );
Biggest( $len, @map{ @five } ) if $len <= @five;
print "\n";
}