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

Good suggestion but I still need to make my own algorithm for this task.

Replies are listed 'Best First'.
Re^3: Checking for a special matching
by Marshall (Canon) on Apr 02, 2012 at 14:44 UTC
    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.

      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.

Re^3: Checking for a special matching
by ww (Archbishop) on Apr 03, 2012 at 15:28 UTC
    Before you write code you need to understand the specs. IOW, before you develop an algorithm and turn it into code, you need to get your facts straight.

    Becoming a good Perl programmer is possible without being an analyst... but when you're acting as your own analyst, step one is knowing the relevant facts. JavaFan mentioned a good many of them, but your subsequent posts show little sign that you recognized them as important to your progress.

    For example

    • most poker games (not blackjack, acey-ducey or the like) use either 5 card or 7 card hands -- sometimes with some of those shared ("in the middle"). But you've posted code with 4 cards in play and with 8.
    • "5 cards of the same color" wins nothing. Five cards in the same suit ("kind" is what you said at one point) in a different matter; that's a flush, and ranks higher than a straight, which is 5 cards (regardless) of suit, in numeric order, A..10 or 3..7, etc.
              and then we come to the code:
    • Have you found a use for << in a comparison? Generally, it's documented with heredocs

    And BTW, a script (code) is an expression of an algorithm; not an algorithm itself.

    Clearly, you deserve (and are receiving) credit for effort, but ignoring most of the suggestions and making up operators and syntax won't be an efficient way to learn.

    A reply falls below the community's threshold of quality. You may see it by logging in.