## Le Monde puzzle [#1650]

Posted in Books, Kids, R with tags , , , , , , , , , on September 5, 2018 by xi'an A penultimate Le Monde mathematical puzzle  before the new competition starts [again!]

For a game opposing 40 players over 12 questions, anyone answering correctly a question gets as reward the number of people who failed to answer. Alice is the single winner: what is her minimal score? In another round, Bob is the only lowest grade: what is his maximum score?

For each player, the score S is the sum δ¹s¹+…+δ⁸s⁸, where the first term is an indicator for a correct answer and the second term is the sum over all other players of their complementary indicator, which can be replaced with the sum over all players since δ¹(1-δ¹)=0. Leading to the vector of scores

```worz <- function(ansz){
scor=apply(1-ansz,2,sum)
return(apply(t(ansz)*scor,2,sum))}
```

Now, running by brute-force a massive number of simulations confirmed my intuition that the minimal winning score is 39, the number of players minus one [achieved by Alice giving a single good answer and the others none at all], while the maximum loosing score appeared to be 34, for which I had much less of an intuition!  I would have rather guessed something in the vicinity of 80 (being half of the answers replied correctly by half of the players)… Indeed, while in SIngapore, I however ran in the wee hours a quick simulated annealing code from this solution and moved to 77. And the 2018 version of Le Monde maths puzzle competition starts today!, for a total of eight double questions, starting with an optimisation problem where the adjacent X table is filled with zeros and ones, trying to optimise (max and min) the number of positive entries [out of 45] for which an even number of neighbours is equal to one. On the represented configuration, green stands for one (16 ones) and P for the positive entries (31 of them). This should be amenable to a R resolution [R solution], by, once again!, simulated annealing. Deadline for the reply on the competition website is next Tuesday, midnight [UTC+1]

## Le Monde puzzle [#1045]

Posted in Books, Kids with tags , , , , , , on May 13, 2018 by xi'an

Take a sequence of 16  integers with 4 digits each, separated by 2,  such that it contains a perfect square and its sum is a perfect cube. What are the possible squares and cubes?

The question is dead easy to code in R

```for (x in as.integer(1e3:(1e4-16))){
if (max(round(sqrt(x+2*(0:15)))^2==x+2*(0:15))==1) {
b=sqrt((x+2*(0:15))[round(sqrt(x+2*(0:15)))^2==x+2*(0:15)])
if ((round((2*x+30)^(1/3)))^3==(2*x+30))
print(c(x,b,(16*(x+15))^(1/3)))}}
```

and return the following solutions:

``` 1357   37   28
 5309   73   44
```

Nothing that exciting…!

## Le Monde puzzle [#1044]

Posted in Books, Kids with tags , , , , , , on March 12, 2018 by xi'an

Bob and Alice are playing a game where Alice fills a one-litre bottle from a water fountain, and empties it between four buckets. Bob then empties two of the four buckets. Alice then fills again her bottle and empties it again in the buckets. Alice wins if she manages to fill one bucket after a finite number of steps. What is the maximum capacity of a bucket for Alice to find a winning strategy?

The question sounded too complex to solve by an R code so I somewhat simplified it by deciding that Alice could not allocate any portion of the litre to a bucket but instead only 0,¼,⅓,½,⅔,¾,1. And then looked at a finite horizon to see how much she could fill a bucket when Bob was trying to minimise this amount: a crude R code just took too long for an horizon of 6 steps and hence I tried to reduce the number of calls to my recursive function

```solfrak=c(0,.25,.333,.5,.667,.75,1)
petifil=function(buck=rep(0,4),hor=3){
#eliminate duplicates
albukz=NULL
for (a in solfrak)
for (b in solfrak[!(solfrak+a>1)])
for (c in solfrak[!(solfrak+a+b>1)]){
if (a+b+c<=1){ albukz=rbind(albukz,
c(a,b,c,1-a-b-c))}}
albukz=t(apply(buck+albukz,1,sort))
albukz=albukz[!duplicated(albukz),]
if (is.matrix(albukz)){
bezt=max(apply(albukz,1,petimpty,hor=hor-1))
}else{
bezt=petimpty(albukz,hor-1)}
return(bezt)}

petimpty=function(buck,hor){
if (hor>1){
albukz=NULL
for (i in 1:3)
for (j in (i+1):4)
albukz=rbind(albukz,c(buck[-c(i,j)],0,0))
albukz=t(apply(albukz,1,sort))
albukz=albukz[!duplicated(albukz),]
if (is.matrix(albukz)){
bezt=min(apply(albukz,1,petifil,hor))}else{
bezt=petifil(albukz,hor)}
}else{
bezt=sort(buck)+1}
return(bezt)}
```

which led to a most surprising outcome:

```> petifil(hor=2)
 1.333
> petifil(hor=3)
 1.5
> petifil(hor=4)
 1.5
> petifil(hor=5)
 1.5
```

that is no feasible strategy to beat the value 1.5 liters. Which actually stands way below two liters, the maximum content of the bucket produced in the solution!

## Le Monde puzzle [#1033]

Posted in Books, Kids, R with tags , , , , on December 19, 2017 by xi'an A simple Le Monde mathematical puzzle after two geometric ones I did not consider:

1. Bob gets a 2×3 card with three integer entries on the first row and two integer entries on the second row such that (i) entry (1,1) is 1, (ii) summing up subsets of adjacent entries produces all integers from 1 to 21. (Adjacent means sharing an index.) Deduce Bob’s voucher.
2.  Alice gets Bob’s voucher completed into a 2×4 card with further integer entries. What is the largest value of N such that all integers from 1 to N are available through summing up all subsets of entries?

The first question only requires a few attempts but it can be solves by brute force simulation. Here is a R code that leads to the solution:

```alsumz<-function(sol){return(
c(sol,sum(sol[1:2]),sum(sol[2:3]),sum(sol[4:5]),
sum(sol[c(1,4)]), sum(sol[c(1,5)]),sum(sol[1:3]),
sum(sol[c(1,4,5)]),sum(sol[c(1,2,5)]),
sum(sol[c(2,4,5)]), sum(sol[c(1,2,3,5)]),sum(sol[2:5]),
sum(sol[c(1,2,4)]),sum(sol[c(1,2,4,5)]),sum(sol[1:4]),
sum(sol)),sum(sol[c(2,3,5)]))}
```

produces (1,8,7,3,2) as the only case for which

```(length(unique(alsum(sol)))==21)
```

The second puzzle means considering all sums and checking there exists a solution for all subsets. There is no constraint in this second question, hence on principle this could produce N=2⁸-1=255, but I have been unable to exceed 175 through brute force simulation. (Which entitled me to use the as.logical(intToBits(i) R command!)

## Le Monde puzzle [#1019]

Posted in Books, Kids with tags , , , , , , on September 7, 2017 by xi'an A gamey (and verbose) Le Monde mathematical puzzle:

A two-player game involves n+2 cards in a row, blue on one side and red on the other. Each player can pick any blue card among the n first ones and flip it plus both following ones. The game stops when no blue card is left to turn. The gain for the last player turning cards is 20-t, where t is the number of times cards were flipped, with gain t for its opponent. Both players aim at maximising their gain.

1. When n=4 and all cards are blue, can the first player win? If not, what is the best score for this player?

2. Among all 16 configurations at start, how many lead to the first player to win?

3. When n=10 and all cards are blue, how many cards are flipped an odd number of times for the winning configuration?

The first two questions can easily be processed by an R code like the following recursive function:

```liplop <- function(x,n,i){
if (max(x[1:n])==0){
return(i)
}else{
sol=NULL
for (j in (1:n)[x[1:n]==1]){
y=x;y[j:(j+2)]=1-y[j:(j+2)]
sol=c(sol,20-liplop(y,n,i+1))}
return(max(sol))}}
```

Returning

```> liplop(rep(1,6),4,0)
 6
```

Meaning the first player cannot win, by running at most six rounds. Calling the same function for all 4⁴=16 possible configurations leads to 8 winning ones:

``` 0 0 0 1
 0 0 1 1
 0 1 0 1
 0 1 1 1
 1 0 0 0
 1 0 1 0
 1 1 0 0
 1 1 1 0
```

Solving the same problem with n=10 is not feasible with this function. (Even n=6 seems out of reach!)