the little half (another Le Monde puzzle)
I found this Le Monde puzzle of June 16 I had stored and then somehow forgotten with my trips to Japan and Australia: There are n beans in a box, with 98≤n≤102). Two players take at each round either one bean from the box or “the little half” (i.e. the integral part of the half) of the remaining beans. The player remaining with a single bean to pick has lost. What is the value of n for which there exists no winning strategy for the second player? Now the R resolution is rather easy: Player 1 wins with n beans whatever his strategy if Player 2 loses with either (n-1) or [n/2] beans. This leads to a straightforward recursive function
solve=function(n){
if (n<4){
solve=(n>1)}else{
solve=(!(solve(n-1)))&&(!solve(trunc(n/2)))}
solve}
as it is possible to win with 2 or 3 beans, providing the answer to the puzzle:
> solve(98) [1] TRUE > solve(99) [1] FALSE > solve(100) [1] FALSE > solve(101) [1] FALSE > solve(102) [1] TRUE
if not an explanation!
Update (5:40, Central Time Zone): Robin’s question made me realise I had changed the wording of the problem when trying to solve it, moving from the little half to the large half in the above code! This means I should have used ceiling instead of trunc. The corrected R code stands as follows:
solve=function(n){
if (n<3){
solve=(n==2)}else{
solve=(!(solve(n-1)))&&(!solve(ceiling(n/2)))}
solve}
and leads to the answer
> solve(98) [1] FALSE > solve(99) [1] TRUE > solve(100) [1] FALSE > solve(101) [1] FALSE > solve(102) [1] FALSE
October 29, 2012 at 12:50 pm
I think I have a non-recursive solution.
Consider the even numbers first. The winning set of even numbers is characterized as follows: If n factorizes as n = 2^m * R then there are two cases:
a) If R == 3, then you win if m is even
b) If R != 3, then you win if m is odd
If n is even and in the winning set then you should always take half.
Now for the odd numbers: n is in the winning set if you can force your opponent into the losing set of even numbers by subtracting 1, except for the case n==5 when you take the smaller half to leave n=3 for your opponent.
I have not proved this, but it works for numbers up to 300 so looks promising for a more formal attempt.
October 29, 2012 at 3:26 pm
Thanks, Martyn. I was not in France when the solution got published and so did not see the way Buser and Cohen solved their puzzle. As you may have noticed, my solutions are always rather pedestrians; for at least two reasons, (1) I want to propose an R based solution, often used in class later, and (2) I do not want to spend too much brain-time on the puzzle, having already a high enough dissipation factor!
October 29, 2012 at 5:39 pm
Fair enough. I just wanted to show how your “pedestrian” solution can be used as a basis for further investigation. I took the subset of 1:100 for which your solve function returned TRUE and inspected these numbers with the factorize function from the conf.design package, looking for a more general pattern. This kind of problem is definitely out of my reach without considerable computational help.
October 28, 2012 at 10:50 am
How do you win with 3 beans?
October 28, 2012 at 11:40 am
Easy, you take two beans from the box.. oh wait.. you cannot… darn!