in reply to Re^2: Checking for a special matching
in thread Checking for a special matching

Look at the code as a reference point and also Javafan's suggestions, which I think are good (I like the 2 hash idea, but haven't coded it). Let us know how you get on with the next step.

Replies are listed 'Best First'.
Re^4: Checking for a special matching
by heatblazer (Scribe) on Apr 03, 2012 at 11:39 UTC

    Thanks for encouragement... somehow I did a simple algorithm for matching elements of array... It`s a bit awkward pattern and it`s not 100% matching since it matches only numbers from the string :(

    #!/usr/bin/perl -wT use strict; use utf8; my @hand = ('k of hearts', '2 of hearts', '2 of diamonds', '10 of spa +des', 'Q of clubs', 'j of clubs', '10 of diamonds', '3 of hearts'); for ( my $i=0; $i<$#hand+1; $i++) { for ( my $j=$i+1; $j<$#hand+1; $j++) { if ( ($hand[$i] << 1) == ($hand[$j] <<1 ) ) { print $hand[$i], $hand[$j], "\n"; } } }

    This matched the pair of 2s and thee pair of 10s but matches and pair of Q and J which is wrong :(, well for now I can`t come with a better solution but I`ll keep improving.

      I'm not sure what you think the left bitshift operator << will do when used on a string like this, but if you add this line inside your loops:

      print join(' ;; ', $hand[$i], ($hand[$i] << 1), $hand[$j], ( $hand[$j] << 1 )), "\n";
      You'll see results like this:
      Values: 10 of spades ;; 20 ;; 3 of hearts ;; 6 Values: Q of clubs ;; 0 ;; j of clubs ;; 0 Q of clubsj of clubs

      What's happening is: the bitshift operator expects to work on an integer. So it tries to turn your string into a integer. In the cases where the string does start with an integer, it uses that integer, so '10 of spades' becomes '20', '3 of hearts' becomes '6', and so on. But in the cases where the string does not contain an integer, like 'j of clubs', it uses the value 0, which shifted left is still 0, so those strings all match as 'equal' to each other.

      Aaron B.
      My Woefully Neglected Blog, where I occasionally mention Perl.