lunes, 6 de mayo de 2019

1521 - Un lindo problema

Un interesante problema leído en Internet
Estás en una fiesta y escuchas una conversación entre Marta y su amiga.
En la conversación, Marta menciona que tiene un número secreto que es menor a 100.También da la siguiente información:

"El número se puede describir exactamente conociendo únicamente  las respuestas a las siguientes cuatro preguntas:"

   1) ¿Es el número divisible por dos?
   2) ¿Es el número divisible por tres?
   3) ¿Es el número divisible por cinco?
   4) ¿Es el número divisible por siete?

Luego procede a susurrar las respuestas a estas preguntas a su amiga.

Desafortunadamente, debido al ruido ambiental en la fiesta, solo escuchas la respuesta a una de las preguntas. 
Sin embargo, saber solo esta respuesta te permite determinar el número secreto de Marta.

A) ¿Qué pregunta y respuesta escuchaste?
B) Si la respuesta a esta pregunta es "Sí", ¿Cuál es el número secreto de Marta?




Si lo quieres compartir o guardar
Share/Bookmark

6 comentarios:

  1. La primera y sería 70.

    ResponderEliminar
  2. Hola. ¿Me podrían explicar la respuesta?

    ResponderEliminar
  3. Hola, Caminante,

    Toma los números del 1 al 99 y divídelos entre 2, 3, 5 y 7. Si sale que es divisible escribe una S y si no, una N. Por ejemplo, para el 15 obtendrías NSSN (no es divisible entre 2, sí entre 3, sí entre 5, no entre 7).

    Observa los resultados que se repiten y elimínalos. Verás que solo te quedan dos números, 35 (NNSS) y 70 (SNSS). Son los únicos números que cumplen "El número se puede describir exactamente conociendo únicamente las respuestas a las siguientes cuatro preguntas".

    Lo que diferencia a ambos números es si son o no divisibles entre 2, es decir la respuesta a la primera pregunta. Por tanto escuchó la respuesta a la primera pregunta.

    Si la respuesta es SÍ, se trata del 70 (SNSS).

    ResponderEliminar
    Respuestas
    1. Muchas gracias Mmonchi por la explicación. Me ha quedado totalmente claro.

      Como un aporte, me di a la tarea de construir un código en Python para poder resolver el caso. No es el más "puro" que digamos (apenas estoy aprendiendo), y la última parte todavía no está totalmente programada, pero creo que podrá ser de utilidad para explorar otras posibilidades.

      Saludos desde Colombia.

      # Creamos un array con numpy con los números del 1 a 99

      import numpy as np

      col0=[]
      col2=[]
      col3=[]
      col5=[]
      col7=[]
      colt=[]
      # Obtenemos la matriz con los valores de 1 a 99 y los residuos al ser divididos entre 2,3,5 y 7
      # Si el residuo es distinto de cero, asignamos la letra N, de lo contrario la letra S
      for i in range (1,100):
      col0.append(i)
      if (i)%2==0:
      col2.append("S")
      else:
      col2.append("N")
      if (i)%3==0:
      col3.append("S")
      else:
      col3.append("N")
      if (i)%5==0:
      col5.append("S")
      else:
      col5.append("N")
      if (i)%7==0:
      col7.append("S")
      else:
      col7.append("N")
      # Creamos en el vector colt un código que indica si hay o no divisiones enteras
      # Los números que tengan combinaciones iguales no pueden ser reconocidos según las reglas del problema
      # Deben ser números que no tengan combinaciones iguales
      for j in range (len(col0)):
      x=col2[j]+col3[j]+col5[j]+col7[j]
      colt.append(x)

      # Construimos un array con los vectores y buscamos los valores que se repite en la última columna (colt)

      data=np.array([col0,col2,col3,col5,col7,colt])
      datat=np.array([colt])


      # Utilizando np.unique identificamos aquellas combinaciones que tengan frecuencias iguales a 1.
      # Estas serían aquellos casos en que solo se cumpla una de las cuatro condiciones fijadas en el problema.
      unique_elements= np.unique(datat, return_index=True, return_counts=True, axis=None)
      print ("Esta matriz contiene:")
      print ("Fila 1: Combinación de divisibilidad de cada número por 2, 3, 5 y 7.")
      print (" Por ejemplo: NNNS significa que un número no fue divisible por 2, 3 ni 5, pero sí por 7.")
      print ("Fila 3: Números que aplican para cada combinación. Por ejemplo, el número '34' (+1) fue encontrado una sola vez.")

      print (np.asarray(unique_elements))

      # Ahora buscamos los índices de esas frecuencias

      respuestas=[]
      for i in range(len(unique_elements[1])):
      if unique_elements[2][i]==1:
      resp=unique_elements[1][i]
      respuestas.append(resp+1)

      print ("Los siguientes números solo se presentan una vez:")
      print (respuestas)

      print ("Los dos números son divisibles por 3, 5 y 7, pero solo uno de ellos por 2.")
      print ("Esto quiere decir que la respuesta es:")
      print ("El número es divisible por 2.")
      print ("El número es 70.")

      Eliminar
  4. Hola soy Solange, quiero decir que me pareció genial el problema, aunque me gustaría saber de qué página de internet tomaste la idea.
    saludos

    ResponderEliminar
    Respuestas
    1. Hola Solange,el problema lo vi en el blog data genetics:

      http://datagenetics.com/blog/june12018/index.html

      Eliminar

Si quieres deja un comentario, si la entrada tiene mas de 15 dias deberás esperar a que la autorice y por favor si no tienes gmail deja tu nombre si no quedas como anónimo. Gracias!