encontre mi carpeta de Algoritmos! :-D

Luego de estar desaparecida por más de dos años (Diciembre 2003), ayer apareció. Empecé a acomodar mi pieza (lang: dormitorio, habitación) –todavía no terminé– y entre otras cosas (polvo, casettes, disquettes, revistas, libros, comida, una talent msx) desaparecidas encontré mi ya dada por perdida carpeta de Algoritmos y Estrucuturas de Datos:

Conversación entre A y B:

A: ¿Qué edad tienen tus tres hijos?
B: El producto de sus edades es 36 y la suma es igual al número de ventanas de la casa que vemos enfrente.
A: Necesito preguntarte algo más, ¿qué color de ojos tiene tu hijo mayor?
B: Azules
A: Entonces ya se las edades de tus 3 hijos.

El enunciado fué dado por el Profesor Marina durante los primeros días de cursado, pero no se la respuesta :-( ¿Alguien la sabe? ¿alguien puede adivinar las edades? En un margen tengo anotado: RTA: 9,2,2 … pero no se por qué.. :-)

Acerca de Juanjo

Mi nombre es Juanjo Conti, vivo en Santa Fe y soy Ingeniero en Sistemas de Información. Mi lenguaje de programación de cabecera es Python; lo uso para trabajar, estudiar y jugar.
Esta entrada fue publicada en Facultad, Problemas y etiquetada . Guarda el enlace permanente.
  • Antonino
    woooww, muy buenoo!
  • Juanjo
    Hace rato largo un amigo me había pasado la respuesta, pero volví a olvidarla.. vamos a hacer un intento por volver a resolverlo.

    Los hijos son 3 y el prodcuto de sus edades es 36. Necesito todos los tripletes que cumplen esa condición, Python puee ayudarme:


    >>> for a in range(1,37):
    ... for b in range(1,37):
    ... for c in range(1,37):
    ... if a * b * c == 36:
    ... print a, b, c
    1 1 36
    1 2 18
    1 3 12
    1 4 9
    1 6 6
    1 9 4
    1 12 3
    1 18 2
    1 36 1
    2 1 18
    2 2 9
    2 3 6
    2 6 3
    2 9 2
    2 18 1
    3 1 12
    3 2 6
    3 3 4
    3 4 3
    3 6 2
    3 12 1
    4 1 9
    4 3 3
    4 9 1
    6 1 6
    6 2 3
    6 3 2
    6 6 1
    9 1 4
    9 2 2
    9 4 1
    12 1 3
    12 3 1
    18 1 2
    18 2 1
    36 1 1


    ¿Muchas posibilidades? No nos olvidemos que B tiene un dato que no sabemos nosotros. El número de ventanas, que es igual a la suma de las edades de los hijos.


    >>> for a in range(1,37):
    ... for b in range(1,37):
    ... for c in range(1,37):
    ... if a * b * c == 36:
    ... print a, b, c, "suma: ", a + b + c
    1 1 36 suma: 38
    1 2 18 suma: 21
    1 3 12 suma: 16
    1 4 9 suma: 14
    1 6 6 suma: 13
    1 9 4 suma: 14
    1 12 3 suma: 16
    1 18 2 suma: 21
    1 36 1 suma: 38
    2 1 18 suma: 21
    2 2 9 suma: 13
    2 3 6 suma: 11
    2 6 3 suma: 11
    2 9 2 suma: 13
    2 18 1 suma: 21
    3 1 12 suma: 16
    3 2 6 suma: 11
    3 3 4 suma: 10
    3 4 3 suma: 10
    3 6 2 suma: 11
    3 12 1 suma: 16
    4 1 9 suma: 14
    4 3 3 suma: 10
    4 9 1 suma: 14
    6 1 6 suma: 13
    6 2 3 suma: 11
    6 3 2 suma: 11
    6 6 1 suma: 13
    9 1 4 suma: 14
    9 2 2 suma: 13
    9 4 1 suma: 14
    12 1 3 suma: 16
    12 3 1 suma: 16
    18 1 2 suma: 21
    18 2 1 suma: 21
    36 1 1 suma: 38


    A este punto (y solo con el fin de ver mejor las cosas) ya nos tendríamos que haber dado cuenta que tener hijos con edades 6, 6, 1 es lo mismo que tenerlos con 1, 6, 6. Así que limpiemos un poco los datos:


    >>> rango = xrange(1,37)
    >>> tripletes = [(a,b,c) for a in rango for b in rango for c in rango \
    if a*b*c == 36]
    >>> tripletes
    [(1, 1, 36), (1, 2, 18), (1, 3, 12), (1, 4, 9), (1, 6, 6), (1, 9, 4), (1, 12, 3),
    (1, 18, 2), (1, 36, 1), (2, 1, 18), (2, 2, 9), (2, 3, 6), (2, 6, 3), (2, 9, 2),
    (2, 18, 1), (3, 1, 12), (3, 2, 6), (3, 3, 4), (3, 4, 3), (3, 6, 2), (3, 12, 1),
    (4, 1, 9), (4, 3, 3), (4, 9, 1), (6, 1, 6), (6, 2, 3), (6, 3, 2), (6, 6, 1),
    (9, 1, 4), (9, 2, 2), (9, 4, 1), (12, 1, 3), (12, 3, 1), (18, 1, 2), (18, 2, 1),
    (36, 1, 1)]
    >>> sin_repetir = []
    >>> def repetido(t, sin_repetir):
    ... a,b,c = t
    ... for i in sin_repetir:
    ... if a in i and b in i and c in i:
    ... return True
    ... return False
    ...
    >>> sin_repetir
    [(1, 1, 36), (1, 2, 18), (1, 3, 12), (1, 4, 9), (1, 6, 6), (2, 2, 9),
    (2, 3, 6), (3, 3, 4)]
    >>> for t in sin_repetir:
    ... print t, "suma: ", sum(t)
    ...
    (1, 1, 36) suma: 38
    (1, 2, 18) suma: 21
    (1, 3, 12) suma: 16
    (1, 4, 9) suma: 14
    (1, 6, 6) suma: 13
    (2, 2, 9) suma: 13
    (2, 3, 6) suma: 11
    (3, 3, 4) suma: 10


    Bien, notemos que solo una suma se repite: 13. Si la casa tuviese 38, 21, 16, 14, 11 o 10 ventanas, B ya sabría la respuesta. Pero no la sabe, necesita hacer otra pregunta. Al preguntar por el color de ojos del hijo mayor y obtener una respuesta se asegura de que hay un solo hijo mayor y la repsusta no puede ser 1, 6, 6 (dónde hay 2 hijos mayores) es 2, 2, 9.
  • Antonino
    Pasenme la respuesta!! Que tienen que ver lo ojos azules!! ?? jeje
  • Finalmente, encontramos la respuesta!, y más que eso: la justificación, está muy lindo el problema. Voy a ver si lo publico como un mensaje en el foro de AEDD y SYSLP, así logramos que algunos piensen un rato y después explicamos el razonamiento.
    Saludos!
  • La comida estaba comible ?
blog comments powered by Disqus