Cumpleaños

No, no es mi cumpleaños. Es simplemente que el Riddler express de este viernes va de cumpleaños. Dice así:

It’s your 30th birthday (congrats, by the way), and your friends bought you a cake with 30 candles on it. You make a wish and try to blow them out. Every time you blow, you blow out a random number of candles between one and the number that remain, including one and that other number. How many times do you blow before all the candles are extinguished, on average?

La verdad es que no le he dedicado mucho tiempo. Sólo he escrito un sencillo código en python que creo que da la respuesta correcta: 4.

Aquí esta el programa, por si a alguien le interesa: https://repl.it/FJR0/4

 

 

Coins revisited

En una entrada anterior utilicé un sencillo código en python para resolver un puzzle de riddler. Esta entrada es una copia de la anterior, con la única diferencia  de que en esta voy a incrustar el código en el propio blog. Para ello voy a recurrir a repl.it, tal y como hice en la entrada anterior.

Sólo hay que pulsar en el botón que dice RUN y ya está.

Monedas

Seguimos con la serie de los riddler. El de este viernes propone el siguiente problema:

You place 100 coins heads up in a row and number them by position, with the coin all the way on the left No. 1 and the one on the rightmost edge No. 100. Next, for every number N, from 1 to 100, you flip over every coin whose position is a multiple of N. For example, first you’ll flip over all the coins, because every number is a multiple of 1. Then you’ll flip over all the even-numbered coins, because they’re multiples of 2. Then you’ll flip coins No. 3, 6, 9, 12 … And so on.

What do the coins look like when you’re done? Specifically, which coins are heads down?

Como se entiende fácimente lo que quiere decir, vamos dierctamente al grano.

Para resolver este problema he decidido utilizar la ayuda de la programación. Ha sido bastante fácil. Utilizando este sencillo código en Python:

coins = [1 for i in range(1,101)]
indices = [i for i in range(1,101)]

for num in range(1,101):

for ind in indices:
if ind % num == 0:
coins[ind-1] *= -1

print coins

Se obtiene el siguiente resultado:

monedas

Que es una lista de 1’s y -1’s que reperesentan caras y cruces, respectivamente. Para que quede un poco más claro cuál es la situación final uso el siguiente programilla:

for i in range(1,101):
if coins[i-1] == -1:
print i

Que da como resultado:

1,4,9,16,25,36,49,64,81,100

Y ahora la conclusión es evidente: las monedas que ocupan posiciones que son cuadrados perfectos muestarn cruz y el resto cara.

 


Reina por un día II

En la entrada anterior me planteaba el problema de calcular el número de caminos diferentes que puede seguir un peón para llegar a ser reina:

king_chess

Lo resolví calculando los caminos posibles empezando por el final y el resultado fue 141, pero me quedó la duda de si se podría resolver este problema utilizando funciones geneatrices. La respuesta es que sí. Veamos cómo se podría hacer.

El peón tiene sus movimientos restringidos a tres direcciones: izquierda, recto y derecha. Si codificamos estas direcciones con los números -1,0 y 1 respectivamente, el problema se podría replantear como el cálculo del número de soluciones de la ecuación: { x }_{ 1 }+{ x }_{ 2 }+{ x }_{ 3 }+{ x }_{ 4 }+{ x }_{ 5 }+{ x }_{ 6 }=0 donde las { x }_{ i } son, claro está, 1,-1 o 0. Pero para utilizar funciones generatrices es conveniente que las “variables” de la ecuación sean mayores o iguales que cero. Así que voy a hacer el cambio de “variable” { y }_{ i }={ x }_{ i }+1 con lo cual la ecuación se convierte en { y }_{ 1 }+{ y }_{ 2 }+{ y }_{ 3 }+{ y }_{ 4 }+{ y }_{ 5 }+{ y }_{ 6 }=6 donde ahora las “variables” toman los valores 0,1 y 2. La función generatriz asociada a esta ecuación es { \left( 1+{ x+x }^{ 2 } \right)  }^{ 6 }.

El problema ahora se reduce a encontrar el coeficiente del término de grado 6 en el polinomio anterior.

Echando mano de wolfram es muy fácil:

wolf2

Como puede verse, el coeficiente del término de grado 6 es 141 que es el resultado que ya se obtuvo en la entrada anterior.

Actualización: la solución es correcta!!!!!.

 

Reina por un día.

En Riddler han estrenado una subsección: Riddler Express. Se supone que son acertijos más asequibles que los “clásicos”. En todo caso, el de este pasado viernes me ha resultado interesante.

king_chess

Se trata de calcular de cuántas maneras puede el peón trasladarse hasta el círculo de la fila 8 para así convertirse en reina, teniendo en cuenta, claro, que los movimientos están restringidos a los representados por las flechas.

Al principio pensé que un enfoque combinatorio podría dar algún resultado, incluso se me pasó por la cabeza utilizar funciones generatrices y no descarto, desde luego, que se pueda sacar algo en limpio con estos planteamientos, pero el caso es que no llegaba a nada útil. Luego se me ocurrió una idea muy sencilla y funcionó.

20161009_232651

La matriz de la foto de arriba se empieza con los tres unos que hay en la fila siete. Lo que indican es simplemente la cantidad de caminos que hay desde cada una de las posiciones hasta el puntazo rojo, que es el objetivo de nuestro peón. Es claro que desde cada una de esas posiciones sólo hay un camino posible. De ahí los tres unos. A partir de ahí, para calcular el número asociado a cada casilla, es cuestión de sumar los tres números simétricamente situados en la fila directamente superior a la casilla correspondiente.

Para que la anterior parrafada cuasi-críptica se entienda un poco mejor, un ejemplo: el 19 que aparece en la fila 4 es el resultado de sumar el 6 con el 7 y el 6 de la fila 3.

Si ahora nos fijamos en que los números directamente encima del puntazo (el peón) son 45,51 y 45, se deduce que el número de caminos disponibles para que nuestro peón cupla su sueño son 45+51+45, es decir, 141.

Cálculo sencillo

Me acabo de encontrar, en el blog, Sobre todo matemáticas, con el siguiente problema:

Sabiendo que 3-y = 2 y que 2x+1 = 18, halla el valor exacto de la expresión

calcnum

Me pareció lo suficientemente interesante como para intentar resolverlo. Esto es lo que hice:

Primero hay que darse cuenta de que si  2x+1 = 18 entonces { 2 }^{ x }=9 y como sabemos que 3-y = 2, entonces podemos poner { \left( { 3 }^{ -y } \right)  }^{ x }=9={ 3 }^{ 2 }. Lo cual significa que -xy=2 y ahora es fácil deducir que el valor de la expresión es 3/2.

 

 

Una suma complicadilla

Vuelvo a encontrar un problema interesante en el blog Sobre todo MatemáticasEl problema consiste en encontrar S(2016) para la serie:

expr

Primero se me ocurrió atacar el problema con un sencillo código en Python (en sagemath):

def suma(n):

s = 0
for i in range(1,n+1):
s += 1/(i*(i+1)*(i+2))

return s

El resultado es:  suma(2016)= 508788/2035153.

Con lo cual el asunto estaría resuelto. Pero para hacerlo de una manera más artesanal habría que descomponer en fracciones  \frac { 1 }{ n(n+1)(n+2) } obteniéndose: \frac { 1 }{ n(n+1)(n+2) } =\frac { 1 }{ 2n } -\frac { 1 }{ n+1 } +\frac { 1 }{ 2(n+2) } 

Al hacer la suma en estas condiciones se obtiene, al cancelarse convenientemente muchos términos:

\sum _{ k=1 }^{ n }{ \frac { 1 }{ k(k+1)(k+2) } =\frac { 1 }{ 4 } -\frac { 1 }{ 2(n+1) } +\frac { 1 }{ 2(n+2) }  }

Ahora sólo hay que sustituir en la expresión anterior y ya está:

s(2016)= 1/4-1/2(2017)+1/2(2018) = 508788/2035153.

Hasta otra!!!!

 

Dados

En el blog Sobre todo, Matemáticas me encuentro con otro interesante problema. En este caso se trata de probabilidad, lo cual me resulta especialmente motivador. Siempre me ha gustado la probabilidad. Esto es lo que dice:

Se tiran consecutivamente tres dados y se forman, con ellos, un número A  de tres cifras: la primera tirada nos da las centenas de A, la segunda las decenas y la tercera las unidades.

Repetimos el proceso obteniendo otro número B  de tres cifras.

Calcula la probabilidad de que A  > B.

Voy a resolverlo de dos maneras, una es innecesariamente complicada aunque ilustrativa mientras que la otra es bastante más directa.

Empecemos por la primera de ellas. Tanto el número A como el B son el resultado del lanzamiento de tres dados. Voy a denotar los números de la siguiente manera A=abc y B=def, donde las letras a,b,c,d,e,f representan las cifras de dichos números obtenidas en los lanzamientos de los dados.

Se pide calcular P(B<A). Para que se dé el suceso A<B tiene que ocurrir lo siguiente:

d<a ó (d=a y e<b) ó (a=d y b=e y f<c)

Los sucesos anteriores son mútuamente excluyentes, por lo tanto su probabilidad se puede calcular de la siguiente manera:

P(d<a)+P(d=a y e<b)+P(a=d y b=e y f<c)

Cada una de las probabilidades anteriores se calcula de la siguiente manera:

 

dados

En la penúltima fórmula, donde pone c<f, debería poner f<c. Pequeña errata sin más importancia.

Como dije antes esta sería la forma “complicada” de resolverlo. Vamos a ver ahora la otra forma, la sencilla:

Por la simetría del problema se puede asegurar que la probabilidad de A<b y la de B<A son iguales. Por otra parte, la probabilidad de que A=B es (1/6)^3 que viene siendo 1/216, con lo que resulta que la probabilidad de que los números sean distintos es 215/216 y de esto se deduce que P(B<A) es la mitad del número anterior, es decir 215/432, que es 0.4978….

Como veis, esta última forma es más sencilla y directa que la anterior. Como yo tengo cierta tendencia a liarme, a mí se me ocurrio primero la solución complicada. Lo cual me hace pensar que antes de ponerse a resolver un problema utilizando mucha “artillería matemática” lo mejor es pararse un poco y pensar si se puede optar por una alternativa más simple.