Montana Duck Hunters and Matlab
25 Feb 2008 Quan Quach 3 comments 293 views

Photo taken from Nintendo game “Duck Hunt”
Duck Hunt from Nintendo always brings back fond memories for me. This post is a semi-tribute to the popular Nintendo game, but more than anything reflects my fascination for interesting puzzles/riddles. An interesting mathematical problem that I ran across a couple of years ago when I was browsing the web involves a bunch of duck hunters. Click here for the original link.
The Problem Statement
- Montana duck hunters have 100% accuracy.
- Ten Montana hunters are in a duck blind when 10 ducks fly over.
- All 10 hunters pick a duck at random to shoot at, and all 10 hunters fire at the same time.
- Thus, it is possible for 2 hunters to shoot at the same duck. In fact, its possible for all 10 hunters to shoot at the same duck as well!
- How many ducks could be expected to escape, on average, if this experiment were repeated a large number of times?
How to Solve this Problem
You’d have to have a pretty solid understanding or probability to tackle this problem. To be honest, I don’t think I was ever able to solve it analytically as it involves the use of binomial probability and some rugged counting techniques. If you click on the link I provided above, there’s a pretty good analytical approach/solution to this problem. But since this is a website dedicated mostly to Matlab, let’s use Matlab to help us solve this problem!
Hunting Ducks with Matlab
-
Using Matlab to solve this problem might be a little easier than you would expect. My approach was to first write a functon that would simulate one single event of 10 hunters shooting at 10 ducks. I saved this function as an m-file.
function numAlive = duckHunt %create a vector with 10 entries, all entries are 1's %0 = dead, 1 = alive ducks = ones(1,10); %let's set aside a number from 1 to 10 for each duck %create a vector with 10 entries. each entry is between 1 and 10 %for example, we might get a vector [1,5,6,7,1,2,3,9,10,8], this %means that hunter 1 shoots at duck #1, hunter 2 shoots at duck #5 %hunter 3 shoots at duck #6 . . . and so on hunter = ceil(rand(1,10)*10); %each hunter shoots at a random duck %it is possible for two hunters to shoot at the same duck! %any duck that was targeted goes from a 1 (alive) to a 0 (dead) ducks(hunter) = 0; %sums up the number of ducks still alive numAlive = sum(ducks);
-
So now we have a function that will simulate one event. But we need to take many samples in order to get the average. Lets use a sample size of 10,000 events. I used the following code at the command prompt to call the function that I just wrote multiple times. After the FOR loop is done running, I took the average of the number of ducks that escaped.
total = 0; for x= 1:10000 total = total + duckHunt; end averageDucksAlive = total/10000
The Answer!
The theoretical answer for this problem is 9^10 / 10^9 = 3.4867.
How close did my simulation get? The answer I got was 3.4854. Not quite the exact answer, but pretty darn close!
How Would You Solve This Problem?
Did any of you guys have a different idea on how to solve this? I would love to hear how you guys went about solving this problem. Whether you used analytical methods or used a computer program, I’m always interested in how problems can be approached from different angles.
3 Responses to “Montana Duck Hunters and Matlab”
Leave a Reply
Include MATLAB code in your comment by doing the following:
<pre lang="MATLAB">
%insert code here
</pre>


Quan:
I enjoyed this exercise, but the theoretical approach is not that hard: each duck has a 90% chance of escaping any given hunter’s bullet (the chance that that hunter aimed at one of the other 9), so the chance of escaping all 10 bullets is .9^10 or .34867, and the expected number to survive is 10 times that (out of each 10 ducks)
This suggests a very short matlab script or dialog:
.9^10*10
ans =
3.4868
Hey Don,
Nice job! I can only tip my hat to you. I got another problem coming that should prove to be more interesting. Stay tuned!
Quan
Hi, I have the exact same math project like this one.
Can I ask several questions to you?
1. Clearly it is unlikely that each of the ten shooters will pick a unique duck to shoot. So it is likely that one or more of the ten ducks will “survive”. But how many?
2. On the average how many ducks would you expect to survive? Make a conjecture.
3. Could you show me how to use FREETHRO or FLIP50 on the calculator?
Thanks