Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

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.


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

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://904035]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (8)
As of 2017-10-23 12:24 GMT
Find Nodes?
    Voting Booth?
    My fridge is mostly full of:

    Results (279 votes). Check out past polls.