Acertijo matemático vietnamita

LogoFE es Logo Functional Extensions, una librería de procedimientos para ser usados con FMSLogo. El objetivo de LogoFE es proporcionar un gran "caja de herramientas" para la construcción de pequeños programas útiles o para explorar temáticas de Matemáticas, Física, Química, Estadística y otras materias de escuela, colegio y universidad.

1. El problema

El acertijo matemático de la niña vietnamita Huynh Van Dong dice:

Este es un problema matemático que nos dieron en clase. Se supone que hay que llenar todas las casillas vacías con los números del 1 al 9 (solamente puedes usar cada número una vez). ¿Puedes resolverlo? Nadie aquí pudo. Nos dijeron que era para niños de 8 años, pero fue demasiado difícil hasta para nosotros de 5to grado!

Acertijo matemático vietnamita

2. Una Solución

Estos son los números del 1 al 3

logofe
LogoFE Cargado para FMSLogo!

muestra serie [1 1 3] 
[1 2 3]

Y estas las permutaciones de 3 elementos

muestra permuconj lista 3 serie [1 1 3] 
[[1 2 3] [1 3 2] [2 1 3] [2 3 1] [3 1 2] [3 2 1]]

Estos son los números del 1 al 10 y las permutaciones son bastantes. Las pondré todas en la variable c

muestra serie [1 1 9] 
[1 2 3 4 5 6 7 8 9]

haz "c permuconj lista 9 serie [1 1 9] 

muestra primero :c
[1 2 3 4 5 6 7 8 9]

muestra cuenta :c
362880

En Logo es posible tomar una lista de números y hacer operaciones con ellos así

muestra aplica [?1 + ?2] [10 3] 
13

muestra aplica [?1 + ?2] [2 3] 
5

Si las operaciones del acertijo deben hacerse en orden según la precedencia de las operaciones (multiplicaciones primero, sumas después) entonces se puede hacer esto

muestra aplica [?1 + 13 * ?2 / ?3 + ?4 + 12 * ?5 - ?6 - 11 + ?7 * ?8 / ?9 - 10] [1 2 3 4 5 6 7 8 9]
52.8888888888889

muestra aplica [?1 + 13 * ?2 / ?3 + ?4 + 12 * ?5 - ?6 - 11 + ?7 * ?8 / ?9 - 10 = 66] [1 2 3 4 5 6 7 8 9]
falso

Pero creo que las operaciones del acertijo deben hacerse en el orden en que van apareciendo, y entonces sería así

muestra aplica [(((?1 + 13) * ?2 / ?3 + ?4 + 12) * ?5 - ?6 - 11 + ?7) * ?8 / ?9 - 10] [1 2 3 4 5 6 7 8 9]
93.7037037037037

muestra aplica [(((?1 + 13) * ?2 / ?3 + ?4 + 12) * ?5 - ?6 - 11 + ?7) * ?8 / ?9 - 10 = 66] [1 2 3 4 5 6 7 8 9]
falso

Del conjunto de permutaciones c queremos solamente las permutaciones tales que, al hacerles lo anterior, dé cierto

haz "respuestas escoge [esigual lista "cierto aplica [(((?1 + 13) * ?2 / ?3 + ?4 + 12) * ?5 - ?6 - 11 + ?7) * ?8 / ?9 - 10 = 66]] :c

muestra cuenta :respuestas
144

porcada [muestra ?] :respuestas
[1 2 4 7 5 8 3 6 9]
[1 2 7 5 3 4 9 8 6]
[1 2 7 5 8 9 4 3 6]
[1 3 7 5 2 6 9 8 4]
[1 4 2 8 5 7 6 3 9]
[1 4 7 5 2 9 8 6 3]
[1 4 7 5 3 9 2 8 6]
[1 5 7 4 9 3 8 2 6]
[1 6 7 8 2 5 9 4 3]
[1 7 8 6 4 5 9 2 3]
[1 8 4 7 5 2 6 3 9]
[1 8 7 2 6 3 5 4 9]
[1 9 3 7 2 5 8 4 6]
[1 9 6 2 3 7 8 4 5]
[1 9 7 2 5 3 6 4 8]
[1 9 7 3 5 8 6 2 4]
[1 9 7 5 2 8 6 4 3]
[2 1 3 6 8 7 5 4 9]
[2 1 5 3 7 9 8 4 6]
[2 1 5 3 9 6 7 4 8]
[2 1 5 8 6 3 9 4 7]
[2 1 6 3 8 5 9 4 7]
[2 1 6 4 5 3 7 8 9]
[2 3 5 6 7 8 1 4 9]
[2 5 6 4 3 9 1 8 7]
[2 6 3 5 1 7 9 8 4]
[2 6 3 9 1 7 5 8 4]
[2 6 5 4 7 8 9 1 3]
[2 6 9 1 7 3 5 4 8]
[2 7 3 5 1 9 6 8 4]
[2 7 3 6 1 9 5 8 4]
[2 7 6 4 3 5 1 8 9]
[2 7 6 5 1 4 9 8 3]
[2 7 6 9 1 4 5 8 3]
[2 8 4 5 1 7 9 6 3]
[2 8 4 9 1 7 5 6 3]
[2 9 4 3 8 6 7 1 5]
[2 9 5 6 1 3 7 8 4]
[2 9 5 7 1 3 6 8 4]
[3 1 4 8 5 2 7 6 9]
[3 1 4 9 8 6 7 2 5]
[3 2 6 1 9 7 5 4 8]
[3 4 8 7 9 5 1 2 6]
[3 5 2 7 8 9 4 1 6]
[3 5 4 1 2 7 9 8 6]
[3 6 4 8 9 7 2 1 5]
[3 6 8 7 5 1 9 2 4]
[3 7 2 4 1 9 5 8 6]
[3 7 2 5 1 9 4 8 6]
[3 7 8 5 4 1 2 6 9]
[3 9 4 6 5 1 8 2 7]
[3 9 6 5 4 8 7 1 2]
[4 1 6 7 3 9 2 8 5]
[4 5 1 7 3 6 9 2 8]
[4 6 1 5 2 7 8 3 9]
[4 6 1 7 2 8 5 3 9]
[4 6 3 9 7 2 8 1 5]
[4 9 3 2 6 7 8 1 5]
[5 1 3 9 6 7 8 2 4]
[5 1 6 2 3 9 7 8 4]
[5 1 6 3 9 7 8 2 4]
[5 1 6 9 7 8 3 2 4]
[5 1 9 2 3 6 7 8 4]
[5 1 9 2 4 3 7 8 6]
[5 1 9 3 7 2 8 4 6]
[5 2 4 1 3 7 9 8 6]
[5 2 4 9 8 7 6 1 3]
[5 3 2 7 1 6 9 8 4]
[5 3 2 9 1 6 7 8 4]
[5 4 1 9 3 8 6 2 7]
[5 4 3 9 6 1 8 2 7]
[5 4 9 1 3 2 7 8 6]
[5 4 9 1 6 8 7 2 3]
[5 4 9 1 8 7 2 3 6]
[5 4 9 3 7 6 8 1 2]
[5 4 9 6 1 3 7 8 2]
[5 4 9 7 1 3 6 8 2]
[5 6 9 3 1 4 7 8 2]
[5 6 9 7 1 4 3 8 2]
[5 7 4 1 8 6 3 2 9]
[5 7 6 9 4 8 3 1 2]
[5 7 9 1 6 2 3 4 8]
[5 8 3 1 2 4 7 6 9]
[5 8 6 7 1 3 9 4 2]
[5 8 6 9 1 3 7 4 2]
[6 2 1 5 3 9 7 4 8]
[6 3 4 7 2 9 1 8 5]
[6 8 4 5 3 9 7 1 2]
[6 9 3 1 4 8 5 2 7]
[7 1 2 4 5 8 3 6 9]
[7 1 2 8 6 3 5 4 9]
[7 1 3 8 9 5 4 2 6]
[7 1 3 9 6 5 2 4 8]
[7 1 3 9 6 8 5 2 4]
[7 1 4 9 2 8 5 6 3]
[7 2 1 8 4 6 5 3 9]
[7 2 5 1 3 4 9 8 6]
[7 2 5 1 8 9 4 3 6]
[7 2 6 8 9 5 4 1 3]
[7 2 8 1 9 4 5 3 6]
[7 3 1 9 2 5 6 4 8]
[7 3 4 9 2 5 1 8 6]
[7 3 6 4 1 5 9 8 2]
[7 3 6 9 1 5 4 8 2]
[7 3 9 4 5 2 1 6 8]
[7 4 8 5 9 6 2 1 3]
[7 5 8 4 2 9 1 6 3]
[7 6 4 2 9 8 3 1 5]
[7 6 8 9 2 5 1 4 3]
[7 9 4 8 6 2 3 1 5]
[7 9 5 3 1 8 6 4 2]
[7 9 5 6 1 8 3 4 2]
[7 9 5 6 3 1 2 4 8]
[7 9 5 8 3 6 1 2 4]
[7 9 8 5 6 2 4 1 3]
[8 1 3 9 5 2 6 4 7]
[8 1 7 3 9 5 6 2 4]
[8 1 7 5 6 4 9 2 3]
[8 1 7 9 2 4 5 6 3]
[8 2 1 6 3 5 7 4 9]
[8 2 1 7 3 6 5 4 9]
[8 3 9 5 7 6 1 2 4]
[8 4 3 9 5 7 1 2 6]
[8 4 6 5 9 3 1 2 7]
[8 4 7 3 9 5 1 2 6]
[8 5 9 1 4 2 3 6 7]
[8 5 9 3 6 4 7 1 2]
[8 6 9 3 5 2 1 4 7]
[8 6 9 5 2 1 7 4 3]
[8 6 9 7 5 3 1 2 4]
[8 7 3 1 2 4 5 6 9]
[8 9 7 1 4 2 5 3 6]
[9 1 4 8 2 7 5 6 3]
[9 2 4 7 8 6 5 1 3]
[9 3 2 4 8 7 6 1 5]
[9 3 2 5 1 7 6 8 4]
[9 3 2 6 1 7 5 8 4]
[9 3 2 7 6 5 8 1 4]
[9 4 3 5 2 1 8 6 7]
[9 4 8 6 7 3 1 2 5]
[9 5 3 7 1 2 8 6 4]
[9 5 3 8 1 2 7 6 4]
[9 6 3 8 5 7 2 1 4]
[9 7 2 8 4 3 6 1 5]

Para ayudarme a revisar si estaba haciendo bien las cosas creé estos procedimientos de ayuda

para probar :numeros
haz "resp s (desapila "numeros) 13
haz "resp m :resp (desapila "numeros)
haz "resp d :resp (desapila "numeros)
haz "resp s :resp (desapila "numeros)
haz "resp s :resp 12
haz "resp m :resp (desapila "numeros)
haz "resp r :resp (desapila "numeros)
haz "resp r :resp 11
haz "resp s :resp (desapila "numeros)
haz "resp m :resp (desapila "numeros)
haz "resp d :resp (desapila "numeros)
haz "resp r :resp 10
si :resp = 66 [escribe [Es correcto!]]
fin

para s :a :b
(escribe :a "+ :b "= :a + :b)
devuelve :a + :b 
fin

para m :a :b
(escribe :a "x :b "= :a * :b)
devuelve :a * :b 
fin

para d :a :b
(escribe :a ": :b "= :a / :b)
devuelve :a / :b 
fin

para r :a :b
(escribe :a "- :b "= :a - :b)
devuelve :a - :b 
fin

Así puedo revisar si la primera solución realmente funciona o no

muestra primero :respuestas
[1 2 4 7 5 8 3 6 9]

probar primero :respuestas
1 + 13 = 14
14 x 2 = 28
28 : 4 = 7
7 + 7 = 14
14 + 12 = 26
26 x 5 = 130
130 - 8 = 122
122 - 11 = 111
111 + 3 = 114
114 x 6 = 684
684 : 9 = 76
76 - 10 = 66
Es correcto!

Mientras que

probar [1 2 3 4 5 6 7 8 9]
1 + 13 = 14
14 x 2 = 28
28 : 3 = 9.33333333333333
9.33333333333333 + 4 = 13.3333333333333
13.3333333333333 + 12 = 25.3333333333333
25.3333333333333 x 5 = 126.666666666667
126.666666666667 - 6 = 120.666666666667
120.666666666667 - 11 = 109.666666666667
109.666666666667 + 7 = 116.666666666667
116.666666666667 x 8 = 933.333333333333
933.333333333333 : 9 = 103.703703703704
103.703703703704 - 10 = 93.7037037037037

3. Licencia

Este es un documento libre.

Autor: Daniel Ajoy

Licencia Creative Commons
Esta obra está bajo una Licencia Creative Commons Atribución-CompartirIgual 3.0 Unported.

4. Preguntas, Dudas, Comentarios, Peticiones

Síguenos en Facebook

5. Enlaces

Lenguaje de Programación Logo


Generado con PureJoy. Creación: 11:47 - Dec 15, 2017. Última Modificación: 17:11 - Apr 02, 2023