#!/usr/bin/perl
use integer;
use strict;
# k = 96666, za okolo 1 min s -O2, 2 min plain na C
my $k = $ARGV[0] or die "usage: $0 number\n";
my @sig = qw( * + - );
my $i = 2;
while( $i++ )
{
my @op = ( 0 );
my $t = 0;
while(4)
{
$t++;
inc_ops( \@op, $i - 1 );
last if $op[ $i - 1 ] > 0;
my $ev = '1';
$ev .= $sig[ $op[ $_ - 2 ] ] . $_ for( 2 .. $i );
my $res;
eval "\$res=$ev";
#print "ev: $ev=$res\n";
die "FOUND($t): $ev==$k\n" if $res == $k;
}
}
sub inc_ops
{
my $ar = $_[0];
my $c = 1;
for my $i ( 0 .. $_[1] )
{
$ar->[$i] = $ar->[$i] + $c;
if( $ar->[$i] > 2 )
{
$c = 1;
$ar->[$i] = 0;
}
else
{
$c = 0;
}
}
}
Comments
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎