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"; }