Category: Misc.
Author/Contact Info Chris Sparks sparkyichi@yahoo.com /msg sparkyichi
Description: This is like the sample code for the VoiceXML module documentation (sorry I don’t have the link). The program will take the first 25 primes and multiplies two random primes together to make the goal number. You then try and guess what the two primes are. I do not know if this has been done before, if so, sorry for ripping off your idea.

Update: Removed $i++ from sub Get_Target. Kudo's to japhy for setting me straight.

#!c:/perl/bin/perl -w
use strict;

####List of Primes. If I made a mistake please let me know!
my @primes = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 
+53, 59, 61, 67, 71, 73, 79, 83, 89, 97);
my $goal;


Get_Target();
Guess_and_Compare();

sub Get_Target{
   ###Gets two random primes a creates the goal.
   my $i = @primes;
   my $value1 = int(rand($i));
   my $value2 = int(rand($i));
   $goal = $primes[$value1] * $primes[$value2];   
}

sub Guess_and_Compare{
   ###Gets user input, and figures if you are right or not.
   my $try = 1;
   my $total = 0;
   while ( $goal != $total ){
      print "LIST OF PRIMES:\n@primes\n";
      print "Your goal is: $goal\n";
      print "Enter you first prime: ";my $guess1=<STDIN>;
      print "Enter you Second prime: ";my $guess2=<STDIN>;
      chomp($guess1, $guess2);
      $total = $guess1 * $guess2;
      if ( $total == $goal ){
         print "You got it in $try tries.\nThe Answer was, $guess1 and
+ $guess2 is $total\n";
      }
      else{
         print "The answer $guess1 and $guess2 is $total, is incorrect
+.\n\n";
      }
      $try++;
   } 
}
Replies are listed 'Best First'.
Re: 2 bit Math puzzle
by japhy (Canon) on Dec 13, 2001 at 23:50 UTC
    You don't want to add 1 here:
    sub Get_Target{ ###Gets two random primes a creates the goal. my $i = @primes; $i++; my $value1 = int(rand($i)); my $value2 = int(rand($i)); $goal = $primes[$value1] * $primes[$value2]; }
    Remove the $i++ line. With it in there, you can end up attempt to fetch $primes[@primes], which returns undef.

    _____________________________________________________
    Jeff[japhy]Pinyan: Perl, regex, and perl hacker.
    s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;

      I do because I want to include the last prime number in the randomization. If I don't it will go from 0 to lest numb but not including last numb.

      Sparky
        No, that's not true.
        @a = qw( a e i o u ); # indices are 0, 1, 2, 3, 4 $x = int rand @a; # $x is a random integer # st 0 <= $x < @a # where @a is 5 # thus, 0 <= $x < 5 # thus, $x is from 0 to 4
        If you add one, you run the risk of accessing an element that doesn't exist. Trust me.

        _____________________________________________________
        Jeff[japhy]Pinyan: Perl, regex, and perl hacker.
        s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;