RE: Pattern Matching

*To*: mathgroup at smc.vnet.net*Subject*: [mg24244] RE: [mg24241] Pattern Matching*From*: Wolf Hartmut <hwolf at debis.com>*Date*: Tue, 4 Jul 2000 15:22:07 -0400 (EDT)*Sender*: owner-wri-mathgroup at wolfram.com

> -----Original Message----- > From: Thomas Skipper [SMTP:skipper at worldnet.att.net] To: mathgroup at smc.vnet.net > Sent: Tuesday, July 04, 2000 2:39 AM > To: mathgroup at smc.vnet.net > Subject: [mg24241] Pattern Matching > > O.K., I know this will seem useless and trivial to quite a few, but > I'm just playing around here. > Basically, what I'm doing is this: > SeedRandom["a list"] > Then: > Table[Random[Integer, {1,47}], {any number}, {6}] > This produces a list of six numbers picked at random based on the list > in seed random. ( I think you can see where I'm going with this. My > friend Peter, a proffessor at Case Western whose specialty is > Pobabilty and Statistics says I'm all wet, but his dog Bucky, who also > is usaully pretty wet, thinks I'm on to something, but He's not > talking) > Anyway, what I want to find is n number of cases in {list a} that > match n numbers in {list b}. List a are the groups of six numbers > produced by Random. > List b are actual winning numbers. > I tried: > Cases[{%}, {"winning numbers"}], but this will only give me cases that > match all six (I think). What I want to do is match cases in list > a(numbers produced by Random) that have 3 of six in list b(acual > winning nubers), 4 of 6 and so on. I really want to see how many sets > of six I have to produce to get any practical results, if any. > [Wolf Hartmut] Thomas, let's assume the winning numbers were {3, 5, 11, 13, 33, 34} then the number 33 is contained ... In[8]:= Count[{3, 5, 11, 13, 33, 34}, 33] Out[8]= 1 ... once. If you have a list of 6 numbers {30, 31, 32, 33, 34, 35} played, then you can calculate this for each number by mapping In[9]:= Count[{3, 5, 11, 13, 33, 34}, #] & /@ {30, 31, 32, 33, 34, 35} Out[9]= {0, 0, 0, 1, 1, 0} having put the winning numbers into variable In[10]:= winning = {3, 5, 11, 13, 33, 34}; the number of hits is just the sum In[11]:= Plus @@ (Count[winning, #] & /@ {30, 31, 32, 33, 34, 35}) Out[11]= 2 Since you (and Bucky) want to try multiple times, make a function out of this In[12]:= Plus @@ (Count[winning, #] & /@ #) &[{30, 31, 32, 33, 34, 35}] Out[12]= 2 Now I guess your generator is wrong (here over we here draw 6 out of 49, but any number drawn can only occur once), so we must drop any number x already drawn (accumulated in r): In[13]:= draw := Nest[ Function[r, While[MemberQ[r, x = Random[Integer, {1, 49}]]]; Append[r, x]], {}, 6] Now I played a thousend times In[14]:= game = Table[draw, {1000}]; ...and this were my hits In[15]:= Count[Plus @@ (Count[winning, #] & /@ #) & /@ game, #] & /@ Range[0, 6] Out[15]= {433, 409, 140, 17, 1, 0, 0} i.e. I had 17 times 3 of 6 and once 4 of 6 (out of a thousand tries). Before you try by yourself, don't forget to replace 49 -> 47 and to (1) calculate what the bet would have cost you, and (2) the sum you would have won. Perhaps this will dry, and show _how_ to make a fortune. Kind regards, hw