Keep It Simple, Stupid PerlMonks

### Re: what is for key pls

by Old_Gray_Bear (Bishop)
 on May 10, 2011 at 21:32 UTC ( #904035=note: print w/replies, xml ) Need Help??

in reply to what is for key pls

Please note: by appropriate ternary arithmetical manipulations this string of hex-digits reduces to "42". Congratulations.

----
I Go Back to Sleep, Now.

OGB

Replies are listed 'Best First'.
Re^2: what is for key pls
by FunkyMonk (Canon) on May 11, 2011 at 14:21 UTC
this string of hex-digits reduces to "42"
A few of which are:

```    7+c+9+6+9+5+c+b+2+3+a+7+1+d+8+5+1+6+8+8+c+c+0+d+7-f*8-b+1*0-7*2
7-c-9-6-9-5-c-b-2-3-a-7-1-d-8-5-1-6-8-8-c-c-0+d*7+f*8-b*1+0-7+2
7*c*9*6*9*5*c*b*2*3*a*7*1*d*8*5*1*6*8*8*c*c*0*d-7+f+8+b+1-0+7*2
7*c*9*6*9*5*c*b*2*3*a*7*1*d*8*5*1*6*8*8/c/c*0-d+7+f+8+b-1*0+7*2

```#!/usr/local/bin/perl

use 5.010;

use strict;
use warnings FATAL => 'all';

my \$hex = '7c9695cb23a71d851688cc0d7f8b1072';
my @num = map {hex} split '', \$hex;

forty_two(42 => @num);

sub forty_two {
my (\$target, \$expr, \$first, @rest) = @_;
state \$count_hit   = 0;
state \$count_total = 0;

unless (defined \$first) {
\$count_total++;
if (eval \$expr == \$target) {
\$count_hit++;
\$expr =~ s/(\d+)/sprintf "%x", \$1/eg;
say "\$count_hit/\$count_total: \$expr == 42";
}
return;
}

forty_two(\$target, "\$expr+\$first", @rest);
forty_two(\$target, "\$expr-\$first", @rest);
forty_two(\$target, "\$expr*\$first", @rest);
if (\$first) {
my (\$last_term) = \$expr =~ m{(\d+(?:[*/]\d+)*)\$};
forty_two(\$target, "\$expr/\$first", @rest)
if eval "\$last_term % \$first == 0";
}
}

Please don't wait for it to finish running ;)

Re^2: what is for key pls
by wind (Priest) on May 11, 2011 at 02:26 UTC

I made a quick and dirty script to see if some combination of + and -'s between all the digits of that string would return 42.

```my \$str = '7c9695cb23a71d851688cc0d7f8b1072';
my @nums = map {hex} split '', \$str;
my @ops = qw(+ -);
my @iter = (0) x (length(\$str) - 1);

MAIN: while (1) {
my @set = (@ops[@iter], '');
my \$newstr = join '', map {\$nums[\$_] . \$set[\$_]} (0..\$#nums);
print "\$newstr\n" if 42 == eval \$newstr;

# Increment
my \$i = \$#iter;
while (++\$iter[\$i] == @ops) {
\$iter[\$i--] = 0;
last MAIN if \$i < 0;
}
}

After running for an hour though, I decided that I needed to test this by hand:

```use List::Util qw(sum);

my \$str = '7c9695cb23a71d851688cc0d7f8b1072';

print sum map {hex} split '', \$str;
=prints
231
=cut

Unfortunately, as you can see, the string contains an odd number of odd digits. This means that no combination of + and -'s between all the digits can return an even number. So there is no simple solution that equals 42

Create A New User
Node Status?
node history
Node Type: note [id://904035]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (12)
As of 2017-05-23 13:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
My favorite model of computation is ...

Results (177 votes). Check out past polls.