Torneo de Computación y Matemática - Nivel 3

8mo Torneo de Computación y Matemática [Enlace Externo]
Nivel 3 (11er año de escolaridad en adelante)
Ronda Final

Contenido

1. Pregunta 1

Consideramos el número N = 2005!, y el número K que es la cantidad de divisores positivos de N.

a) Calcular la cantidad de cifras de N.

b) Calcular la cantidad de cifras de K.

Aclaración: m!=1·2·3·...·mes el factorial de m, por ejemplo 4! = 24, que tiene 2 cifras. Además que tiene 8 divisores: 1, 2, 3, 4, 6, 8, 12 y 24. La cantidad de cifras de 8 es 1.

1.1. Posible Solución

Tenemos la función factorial pero funciona exactamente sólo hasta 17.

porcada [muestra factorial ?] serie [1 1 20]
1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6.402373705728e+15
1.21645100408832e+17
2.43290200817664e+18

También tenemos la función lmul que permite multiplicaciones con número relativamente grandes. Con ella vamos a contar las cifras de los factoriales hasta 100!

muestra progresa "mismo "lmul serie [1 1 20]
[1 2 6 24 120 720 5040 40320 362880 3628800 39916800 479001600 6227020800
87178291200 1307674368000 20922789888000 355687428096000 6402373705728000
121645100408832000 2432902008176640000]

muestra impon "cuenta progresa "mismo "lmul serie [1 1 100]
[1 1 1 2 3 3 4 5 6 7 8 9 10 11 13 14 15 16 18 19 20 22 23 24 26 27 29 30 31 33 34
 36 37 39 41 42 44 45 47 48 50 52 53 55 57 58 60 62 63 65 67 68 70 72 74 75 77
 79 81 82 84 86 88 90 91 93 95 97 99 101 102 104 106 108 110 112 114 116 117
 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 150 152 154 156 158]

Sabemos que el logaritmo base 10 de 100 es exactamente igual a 2.

100 tiene 2 + 1 = 3 cifras. Experimentamos y vemos cuál es el resultado de sumar todos los logaritmos base 10 de los números del 1 al 100 (la suma es como la multiplicación cuando se trata de logaritmos):

muestra suma impon "log serie [1 1 100]
157.970003654716

Vemos que el suelo de esa suma, más 1 nos da el número de cifras de 100!

muestra 1 + suelo suma impon "log serie [1 1 100]
158

Experimentamos y vemos si esta fórmula para calcular cifras funciona, por lo menos, para los factoriales de los números del 1 al 100. Los resultados son idénticos a los encontrados contando las cifras de los grandes números realmente:


muestra impon [inc suelo] progresa "mismo "sum impon "log serie [1 1 100]
[1 1 1 2 3 3 4 5 6 7 8 9 10 11 13 14 15 16 18 19 20 22 23 24 26 27 29 30 31 33 34
 36 37 39 41 42 44 45 47 48 50 52 53 55 57 58 60 62 63 65 67 68 70 72 74 75 77
 79 81 82 84 86 88 90 91 93 95 97 99 101 102 104 106 108 110 112 114 116 117
 119 121 123 125 127 129 131 133 135 137 139 141 143 145 147 149 150 152 154 156 158]

Aplicamos la fórmula encontrada a 2005:

muestra 1 + suelo suma impon "log serie [1 1 2005]
5753

Para la segunda pregunta nos vemos obligados a usar lo siguiente.

Si la descomposición prima de un natural es:

n = (p1n1) · ... · (prnr), con p1, ..., pr primos, y n1, ..., nr naturales, entonces la cantidad de divisores de n es (n1 + 1) · ... · (nr + 1)

El número 2005! debe estar compuesto por los factores primos de todos los números enteros menores que 2005. Empecemos con un número más manejable, 10!

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

muestra impon [factora] serie frase [2 1] dec 10
[[2] [3] [2 2] [5] [2 3] [7] [2 2 2] [3 3] [2 5]]

muestra ordena junta impon [factora] serie frase [2 1] dec 10
[2 2 2 2 2 2 2 2 3 3 3 3 5 5 7]

muestra disgrega duplica ordena junta impon [factora] serie frase [2 1] dec 10
[[2 2 2 2 2 2 2 2] [3 3 3 3] [5 5] [7]]

muestra impon "cuenta disgrega duplica ordena junta impon [factora] ~
 serie frase [2 1] dec 10

[8 4 2 1]

Los de arriba son los n1, n2, n3 mencionados más arriba así que el número de divisores de 10! será 270:

muestra impon [1 + cuenta] disgrega duplica ~
 ordena junta impon [factora] serie frase [2 1] dec 10
[9 5 3 2]

muestra multi impon [1 + cuenta] disgrega duplica ~
 ordena junta impon [factora] serie frase [2 1] dec 10

270

Que tiene 3 cifras. Pero intentemos números más cercanos a 2005!

muestra multi impon [1 + cuenta] disgrega duplica ~
 ordena junta impon [factora] serie frase [2 1] dec 100

3.900125085696e+016

muestra multi impon [1 + cuenta] disgrega duplica ~
 ordena junta impon [factora] serie frase [2 1] dec 1000

2.99998358071594e+106

muestra multi impon [1 + cuenta] disgrega duplica ~
 ordena junta impon [factora] serie frase [2 1] dec 2005

7.43959651112089e+189

Es decir que, el número de cifras de la cantidad de divisores de 2005! es 190. Utilzando lmul también nos dá:

muestra interpon "mismo "lmul impon [1 + cuenta] disgrega duplica ~
 ordena junta impon [factora] serie frase [2 1] dec 2005

743959651112089510920851401948554390989026457525355969270737229735643599026987344
242925420980565972127747962215860774225023955537506212786603513232403451642642432
0000000000000000000000000000

muestra cuenta interpon "mismo "lmul impon [1 + cuenta] disgrega duplica ~
 ordena junta impon [factora] serie frase [2 1] dec 2005

190

2. Pregunta 2

Para reactivar la economía, el ministerio de economía decide emitir monedas de 1 centavo, 2 centavos, 3 centavos,..., 99 centavos.

a) ¿Cuál es la menor cantidad de monedas que hay que llevar en el bolsillo, sin repetir valores, para estar seguro de poder pagar exactamente todos los precios de 1 a 99 centavos?

Hay muchas formas distintas de elegir esta cantidad mínima de monedas.

b) ¿De cuántas maneras distintas se pueden elegir esas monedas?

2.1. Posible Solución

El siguiente programa nos ayudará a determinar qué otras monedas son necesarias para poder un precio dado (llamado num):

para construye :lista :num [:aux construye.aux :lista :num]
si "X = ultimo :aux [devuelve ponprimero :num :lista]
devuelve :lista
fin

para construye.aux :lista :num [:resto 0]
si vacio? :lista [devuelve [X]]
haz "resto :num - primero :lista
si :resto < 0 [devuelve construye.aux menosprimero :lista :num]
si :resto = 0 [devuelve ponprimero primero :lista []]
devuelve ponprimero primero :lista (construye.aux menosprimero :lista :resto)
fin

Así, para construir el número 3 a partir de las monedas 1 y 2 no necesitamos otras monedas, pero para construir el 4, sí necesitaríamos una moneda de 4.

muestra construye [2 1] 3
[2 1]

muestra construye [2 1] 4
[4 2 1]

muestra construye [3 2 1] 4
[3 2 1]

muestra construye [3 2 1] 5
[3 2 1]

muestra construye [3 2 1] 6
[3 2 1]

muestra construye [3 2 1] 7
[7 3 2 1]

Si empezamos con bolsillo vacío y nos van pidiendo que paguemos los precios de 1 a 99, podemos ir viendo que monedas necesitaríamos tener en el bolsillo para poder pagarlos.

Necesitamos la moneda 1 para pagar 1, y necesitamos la moneda 2 para pagar 2. No necesitamos una moneda de 3 para pagar algo de 3 porque ya tenemos las monedas de 1 y de 2. Si seguimos hasta 99 obtenemos:

muestra interpon 0 "construye ponprimero [] serie [1 1 99]
[64 32 16 8 4 2 1]

muestra cuenta [64 32 16 8 4 2 1]
7

La función nuevo nos dice cuáles serían las monedas necesarias si decidimos llevar una moneda nueva a parte de las que ya estaban en el bolsillo. Por ejemplo, si a más de las monedas 1 y 2 decidimos llevar la moneda 3, o si, a más de las monedas 1 y 2 decidimos llevar la moneda 5. En este último caso vemos que nuevo nos dice que de todas maneras tendríamos que llevar la moneda 4.

haz "nuevo [[hasta.ahora x] interpon 0 "construye ppr ppr :x :hasta.ahora serie [1 1 99]]

muestra aplica :nuevo lista [2 1] 3
[56 28 14 7 3 2 1]

muestra aplica :nuevo lista [2 1] 5
[64 32 16 8 4 5 2 1]

Lo siguiente significa: Si ya sabemos que debemos llevar las monedas 1 y 2 ¿qué moneda nueva debemos llevar para seguir finalmente teniendo un bolsillo con 7 monedas?

muestra escoge [esigual lista 7 cuenta aplica :nuevo lista [2 1]] serie [1 1 99]
[3 4]

Ya que sabemos que como tercera moneda únicamente la de valor 3 y la de valor 4 nos garantizan que finalmente tendremos un bolsillo con 7 monedas, vamos cuales podrían ir en 4to lugar, si llevamos la moneda de valor 3, y cuales podrían ir si llevamos la moneda 4.

muestra escoge [esigual lista 7 cuenta aplica :nuevo lista [3 2 1]] serie [1 1 99]
[6 7]
muestra escoge [esigual lista 7 cuenta aplica :nuevo lista [4 2 1]] serie [1 1 99]
[5 6 7 8]

Podríamos seguir así manualmente, pero sospechamos que sería mucho trabajo:

muestra escoge [esigual lista 7 cuenta aplica :nuevo lista [6 3 2 1]] serie [1 1 99]
[12 13]
muestra escoge [esigual lista 7 cuenta aplica :nuevo lista [7 3 2 1]] serie [1 1 99]
[11 12 13 14]

muestra escoge [esigual lista 7 cuenta aplica :nuevo lista [5 4 2 1]] serie [1 1 99]
[12 13]
muestra escoge [esigual lista 7 cuenta aplica :nuevo lista [6 4 2 1]] serie [1 1 99]
[11 12 13 14]

Así que creamos un procedimiento que muestre todas las posibilidades

para busca :hasta.ahora
si 7 = cuenta :hasta.ahora [
 muestra :hasta.ahora
 alto
]

porcada [
 busca ponprimero ? :hasta.ahora
] escoge [esigual lista 7 cuenta aplica :nuevo lista :hasta.ahora] serie [1 1 99]
fin
busca [2 1]
[50 25 12 6 3 2 1]
[50 24 13 6 3 2 1]
[49 25 13 6 3 2 1]
[50 25 13 6 3 2 1]
[51 25 13 6 3 2 1]
[48 26 13 6 3 2 1]
[49 26 13 6 3 2 1]
[50 26 13 6 3 2 1]
[51 26 13 6 3 2 1]
[52 26 13 6 3 2 1]
[50 25 11 7 3 2 1]
[50 24 12 7 3 2 1]
...
[63 32 16 8 4 2 1]
[64 32 16 8 4 2 1]

Contando todas las posibilidades, resultan ser 1154.

3. Pregunta 3

Federico compró 9 maderitas de largo 18, 19, ... ,25 y 26. Con estas maderitas armó un abanico uniendo las maderitas por las puntas, de manera que las maderitas eran los lados de un polígono y todas las diagonales correspondientes a un punto. Determinar la disposición en que deben colocarase las maderitas para que la superficie del abanico sea máxima.

Imagen: cym05r2 abanico

3.1. Posible Solución

Primero programamos una función que devuelve el área de un triángulo dados sus lados:

para area :a :b :c [:p (:a + :b + :c) / 2]
devuelve raizcuadrada :p * (:p - :a) * (:p - :b) * (:p - :c)
fin

muestra aplica "area [18 19 20]
155.449147633559

Luego nos enfocamos en convertir una permutación de las maderitas en tríadas (triángulos) como las que acepta la función área. Definimos que las primeras 5 maderitas serán los palitos del abanico, las otras cuatro serán las que cierren los triángulos:

muestra serie [18 1 9]
[18 19 20 21 22 23 24 25 26]

muestra secciona lista 5 [18 19 20 21 22 23 24 25 26]
[[18 19 20 21 22] [23 24 25 26]]

muestra dispon [[ingresa "mismo lista 2] mismo] secciona lista 5 serie [18 1 9]
[[[18 19] [19 20] [20 21] [21 22]] [23 24 25 26]]

muestra transpon "frase dispon [[ingresa "mismo lista 2] mismo] ~
 secciona lista 5 serie [18 1 9]

[[18 19 23] [19 20 24] [20 21 25] [21 22 26]]

Imagen: cym05r2 abanico 2

Luego pudimos calcular el área de cada triángulo, y sumarlas todas:

muestra transpon [aplica "area frase] dispon [[ingresa "mismo lista 2] mismo] ~
 secciona lista 5 serie [18 1 9]

[166.493243106139 184.284935629584 202.938414303453 222.454349249458]

muestra suma transpon [aplica "area frase] dispon [[ingresa "mismo lista 2] mismo] ~
 secciona lista 5 serie [18 1 9]

776.170942288635

Definimos una función que dado un abanico devuelve un área del abanico:

funciona "area.abanico [suma transpon [aplica "area frase] ~
 dispon [[ingresa "mismo lista 2] mismo]]

muestra area.abanico [[18 19 20 21 22] [23 24 25 26]]
776.170942288635

muestra expon [area.abanico mismo] secciona lista 5 serie [18 1 9]
[776.170942288635 [[18 19 20 21 22] [23 24 25 26]]]

Las posibles permutaciones de 9 elementos son solamente 362880.

muestra permu [9 9]
362880

Calculamos el área de los abanicos que cada una representa. Luego calculamos la máxima de las áreas:

haz "pares impon [expon [area.abanico mismo] secciona lista 5] ~
 permuconj lista 9 serie [18 1 9]

haz "max max primeros :pares

muestra :max
879.16808449891

Escogemos todos los abanicos que tienen dicha área máxima:

muestra escoge [esigual lista :max primero] :pares
[[879.16808449891 [[18 24 26 25 20] [19 22 23 21]]]
 [879.16808449891 [[18 24 26 25 21] [19 22 23 20]]]
 [879.16808449891 [[19 24 26 25 20] [18 22 23 21]]]
 [879.16808449891 [[19 24 26 25 21] [18 22 23 20]]]]

4. Pregunta 4

Analizamos las siguientes cuatro ecuaciones:

Imagen: cym05r2 cuatroecuaciones

Solamente nos interesa considerar la solución que cada una de ellas tiene entre 1 y 3.

a) Calcular la solución exacta de las dos primeras

b) Aproximar la solución de cada una con un error menor que 10-5

Aclaración: m!=1·2·3·...·m es el factorial de m, por ejemplo 4! = 24.

4.1. Posible Solución

muestra resuelve [invoca [[x] 1 - (potencia :x 2) / 2]] [1 3]
1.41421356237309

muestra potencia resuelve [invoca [[x] 1 - (potencia :x 2) / 2]] [1 3] 2
2

Así que la solución de la primera es RaízCuadrada(2)

Para la segunda ecuación hacemos un cambio de variable:

Imagen: cym05r2 n3p4 1

Sabemos que la aproximación de la raíz de la segunda ecuación es muy cercana a:

haz "expr2 [[x] 1 - (potencia :x 2) / 2 + (potencia :x 4) / factorial 4]

muestra resuelve [invoca :expr2] [1 3]
1.59245043403625
muestra rc 6 - rc 12
1.59245043403625

Así que la solución de la segunda es RaízCuadrada(6 - RaízCuadrada(12))

La solución aproximada de las otras dos es:

haz "expr3 [[x] 1 - (potencia :x 2) / 2 ~
 + ((potencia :x 4) / factorial 4) ~
 - ((potencia :x 6) / factorial 6) ~
]

muestra resuelve [invoca :expr3] [1 3]
1.56990582516119
haz "expr4 [[x] 1 - (potencia :x 2) / 2 ~
 + ((potencia :x 4) / factorial 4) ~
 - ((potencia :x 6) / factorial 6) ~
 + ((potencia :x 8) / factorial 8) ~
]

muestra resuelve [invoca :expr4] [1 3]
1.57082106795339

Los errores son menos que lo pedido:

muestra invoca :expr3 1.56990582516119
1.47451495458029e-015

muestra invoca :expr4 1.56899902382006
-1.39872922272355e-015

5. Pregunta 5

a) Sea N = 200520052005 ¿Cuántas veces aparece el dígito 1 en su escritura en base 3?

b) Sea M = 200520052005…20052005, el número (escrito en base 10) que se obtiene al escribir 708 veces el 2005. ¿Cuántas veces aparece el dígito 1 en su escritura en base 3?

Ejemplo 1: 9876543210 (en base 10) = 221111022110101020200 (en base 3).

Ejemplo 2: el número que se obtiene al escribir dos veces el 2005 es 20052005 (en base 10) = 1101201202011212 (en base 3).

5.1. Posible Solución

muestra decodifica lista clona [30 3] 9876543210
[0 0 0 0 0 0 0 0 0 2 2 1 1 1 1 0 2 2 1 1 0 1 0 1 0 2 0 2 0 0]

muestra decodifica lista clona [30 3] 20052005
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 2 0 1 2 0 2 0 1 1 2 1 2]

La respuesta de la primera es 9:

muestra decodifica lista clona [30 3] 200520052005
[0 0 0 0 0 0 2 0 1 0 1 1 1 2 0 1 2 0 2 1 2 0 0 1 2 0 1 2 1 0]

muestra escoge [esigual lista 1] decodifica lista clona [30 3] 200520052005
[1 1 1 1 1 1 1 1 1]

muestra cuenta escoge [esigual lista 1] ~
 decodifica lista clona [30 3] 200520052005

9

Para la pregunta b, creamos un conversor a base 3 personalizado, utilizando ldiv que divide números enteros largos

muestra ldiv "200520052005200520052005200520052005 "1111
[180486095414221890235828263294376 269]

muestra lmul "1111 "180486095414221890235828263294376
200520052005200520052005200520051736

muestra lsum "200520052005200520052005200520051736 "269
200520052005200520052005200520052005

para base3 :n [:resp []] [:div ldiv :n 3]
si 1 = cuenta :n [si :n < 3 [devuelve ponprimero :n :resp]]
devuelve (base3 primero :div ponprimero ultimo :div :resp)
fin

muestra base3 20052005
[1 1 0 1 2 0 1 2 0 2 0 1 1 2 1 2]

muestra base3 200520052005
[2 0 1 0 1 1 1 2 0 1 2 0 2 1 2 0 0 1 2 0 1 2 1 0]

Usamos clona para producir el número M y obtenemos su representación en base 3:

muestra junta clona [3 2005]
200520052005

muestra junta clona [4 2005]
2005200520052005

haz "m base3 junta clona [708 2005]

porcada [muestra ?] impon "junta segmenta lista 69 :m
101102222211000101110001101121101011102000101121221110011022002110120
010101122020120012121121222002110212210121012011120211021000001111110
002120101112121011120101120122112002220021102202011211001011121010222
000111021021012111220112200012021110211221222101011200211110012211112
210010101221111222111011220200211110002120000022211011112222222220000
202110000011211001012200212111012100102201112002212221100221222202112
222221012212220212201010012021020021120021102120022211110112021000001
012222212002002222111000222011201101012012012210210022001000112211110
021121121121010210220220101200202101200010000211102101111010112002011
110000011012012120012102112110211201102202102121221220100022120022220
101210222110001102121201010211110001102201011112211112121020120102011
222101222011001200111121021102010101001221110020001001000220201101100
211102022012020111002020122200022112201211200102221010122201220202210
220210221121201111211110220000002110020102200000121222002022001011001
120020010002112012222112121012221111210100021121221022010222121122120
100221220000020202100000012101220220112020111212200212110111121021001
110000201202012110221222011001222122212102202002121102201222201000100
111111122002021221011111112202112001010020201112010122121011102120000
001202021001122210212102022111112012122012220222111010012220201022210
221220020220120120012011012101211012102102221011212200120222102222121
212200211221122210120220101110210222211000202200120222000210201220111
222000102221211111102021101120222002011110021000020020200212001120021
000022121001020120021022110200200202120220100201110010002000110011001
112001212122211010111221021020022111110212221211122121021010121121010
222022020002022102122102110111002010221000210011212020000011101211211
122201110020102021102200022002022110001202000021220211111221001102001
022122121202101110011102000110221121212111200100201200110000200201102
110222220021201022101011202120002111111012021220222120002011220220020
111011111111210012002011000212122221112002102101001100010100021010102
222222222112000120221001220002020120212022022222201121202000211001122
000102102221101010020221202221222202121100111210122000210200202202012
211021121021000021100112211201220221002121221012112021200222220111221
201100222212101022010122110020022021220201010001122022120000222122021
022112022001011110120201102202012120002112200120002110111112002201111
211010220222222121210112210010210110011200210011222020022222211012220
121121200202101021110101121112012122200012202220120212202121211200011
120020220202220111222121010010222012122020122200022201011010202001010
001010212120120212202100020122120100022010020000002021210202221200100
011122102011010112212010112001200202002212022000101202102202022202211
112101122210211210122021122211121201010100101102011020202121221100110
111120211221221202021212110111211210000111200102210100222010211121021
202221012201022102210100121202012010001121210020220120010202020010011
000000200022000201122111220100110221121001122010120020221002102002122
000021211110200012202110122212222210111111101112022212010120110010002
120001202110002211001121111202000111011222021001021101201022200021100
122122011210100221121020221011121210100020210122011002222110122200121
200121000022102112120020212120021202111021012122211112212111111122210
012221002122122221110122212220120020011211110122020010001212012221112
111010022020220101210221202022001102210112220221201020120212122220001
011210210001111120021100001122020022200211201222101221220000102000222
210121012021201022221220101202011022120211110222202120222221010002021
110001120021210012201021120222110001112220220021010110220002100211020
001112011100102000002200101001210120121222001012212010011021121101020
201022112210122121200222011112212000111011021120021220122122122200002
010101201201211121002010020011010100022110102121000010001100120110211
122200101120020220211012121022120210021021020202122202222222100122200
211220022001002202022012121010210201110201121000122201002212001212011
112100012202101011211201020200001112012101002120021112011002112101011
111010011000022120200022102202101120000012111012121110100222100100021
120222100010210000101201202100202221100211122201020222212211021100202
122201111101222210110120111201201121022222221002112200202020012002222
202011101212102102210100121122202000110210202121201021121020212001210
122121021210110200211111221102200012202101220201202100100220101212220
012012010121121222122020111202222210201121102202112211200221202102102
212001222012220120201011010102220010001022110022200210200110012101220
212100202222210222102021211211100122221212210122022021111002122201101
212111010100110111211010110212222201120100111222210220112020112120002
021202001111222210001211002021012100100012022021202111100102020022222
102021111220020101100211110010101022222201011100010100001222121111000
121122121101000221100200020021221210220112202212101100000012002120001
200102112222020222222200200100220201202120121122220002120210202210201
202111201000001012100121210112010210022200001201122110111121200010202
210020122221010200102110021222102202210201002100012001220112001120212
100200101202111111212212210200011221200211212102000210012121210112110
221122100000121011210212110001121221101102112120211020000212110000111
111210212111002100202102010002122200100020022212200121002020121100111
211012012011211101122211010121220011112121202000001022202110012012001
100211000022102111011211200021102010122210121000121121100200200010202
120120110200021120000021210100012210201212122211012120220012120211022
012120012110211221120202110210002010122211201021100222101012102212010
011012200112211120011120100010100121122210012212111112121022001122100
202102200211201212011121102102001021221222220121011010120110210122102
222010211222110000202210221201002100112022012022022210200211122220202
220122212000112010220111120001112202111110010011221222120211001221021
001012100002102020202011220210011010221012111200001201212012100001000
210121011222010220100002211220210012110110000112122011101222122222212
0

Revisamos que m tenga el número de cifras correcta:

muestra cuenta :m
5935

muestra (708 * 4) / log 3
5935.59807278754

Contamos las cifras iguales a 1:

muestra cuenta escoge [esigual lista 1] :m
2005

6. Pregunta 6

Se tiene un tablero cuadrado de 4x4. Dos casillas son vecinas si tienen un lado en común, así que cada casilla tiene 2, 3 o 4 vecinas.

Imagen: cym05r2 tablerocon 000100

En tres de las esquinas se escribe el número 0 y en la otra se escribe el número 100. Se quiere completar el resto del tablero con números enteros, de manera que la diferencia entre el valor puesto en cada casilla y el valor del promedio de sus vecinas sea chica.

Encontrar una manera de completarlo tal que la diferencia en cada casilla, salvo las cuatro esquinas, sea ...

a) ... menor o igual a 10.

b) ... menor o igual a 2.

c) ... menor o igual a 1.

6.1. Posible Solución

Pensamos que necesitaríamos un procedimiento que nos ayude a explorar el problema. Un procedimiento al que podamos darle un tablero y nos diga los valores de las casillas

haz "p {
 { x x x x}
 { x x x x}
 { x x x x}
 { x x x x}}

haz "d {
 { x x x x}
 { x x x x}
 { x x x x}
 { x x x x}}

para intento :a
desde [1 4 1] [
 desde [1 4 1] [
  ponelemento :j ~
   elemento :i :p ~
   promedio :a :i :j
 ]
]

desde [1 4 1] [
 desde [1 4 1] [
  ponelemento :j ~
   elemento :i :d ~
   fix: 1 abs (elemento :j elemento :i :a) - elemento :j elemento :i :p
 ]
]

escribe "promedios:
escribemat impon [arreglo_lista] arreglo_lista :p
escribe "diferencias:
escribemat impon [arreglo_lista] arreglo_lista :d
fin

para promedio :a :i :j
 devuelve fix: 1 divid impon "suma trans ~
 ponprimero celda :a :i + 1 :j ~
 ponprimero celda :a :i - 1 :j ~
 ponprimero celda :a :i :j + 1 ~
 ponprimero celda :a :i :j - 1 ~
 []
fin

para celda :a :i :j
si :i > 4 [devuelve [0 0]]
si :i < 1 [devuelve [0 0]]
si :j > 4 [devuelve [0 0]]
si :j < 1 [devuelve [0 0]]
devuelve lista elemento :j elemento :i :a 1
fin
intento [
 [  0  1  1 100]
 [  1  1  1   1]
 [  1  1  1   1]
 [  0  1  1   0]]

promedios:
1.0 0.7 34.0  1.0
0.7 1.0  1.0 34.0
0.7 1.0  1.0  0.7
1.0 0.7  0.7  1.0

diferencias:
  1 0.3  33  99
0.3   0   0  33
0.3   0   0 0.3
  1 0.3 0.3   1

Después de varios intentos a mano nos dimos cuenta que si nombramos las celdas con letras:

0

a

b

100

c

d

e

b

f

g

d

a

0

f

c

0


el problema podría plantearse diciendo: ¿Para qué valores de a, b, c, d, e, f, g se cumplen las siguientes ecuaciones?

  1. abs(a - (b + d + 0) / 3) = 0
  2. abs(b - (a + e + 100) / 3) = 0
  3. abs(c - (d + f + 0) / 3) = 0
  4. abs(d - (a + c + e + f) / 4) = 0
  5. abs(e - (b + d) / 2) = 0
  6. abs(f - (c + g + 0) / 3) = 0
  7. abs(g - (d + f) / 2) = 0

No supimos cómo tratar el asunto de los valores absolutos, así que los ignoramos por el momento. Pusimos las ecuaciones en forma matricial:

haz "a [
 [[ 1 1] [-1 3] [ 0 1] [-1 3] [ 0 1] [ 0 1] [ 0 1] [ 0 1]]
 [[-1 3] [ 1 1] [ 0 1] [ 0 1] [-1 3] [ 0 1] [ 0 1] [100 3]]
 [[ 0 1] [ 0 1] [ 1 1] [-1 3] [ 0 1] [-1 3] [ 0 1] [ 0 1]]
 [[-1 4] [ 0 1] [-1 4] [ 1 1] [-1 4] [ 0 1] [-1 4] [ 0 1]]
 [[ 0 1] [-1 2] [ 0 1] [-1 2] [ 1 1] [ 0 1] [ 0 1] [ 0 1]]
 [[ 0 1] [ 0 1] [-1 3] [ 0 1] [ 0 1] [ 1 1] [-1 3] [ 0 1]]
 [[ 0 1] [ 0 1] [ 0 1] [-1 2] [ 0 1] [-1 2] [ 1 1] [ 0 1]]
]

haz "a impon [impon [fix lista 2 divid]] :a

escribemat :a
 1.00 -0.33  0.00 -0.33  0.00  0.00  0.00  0.00
-0.33  1.00  0.00  0.00 -0.33  0.00  0.00 33.33
 0.00  0.00  1.00 -0.33  0.00 -0.33  0.00  0.00
-0.25  0.00 -0.25  1.00 -0.25  0.00 -0.25  0.00
 0.00 -0.50  0.00 -0.50  1.00  0.00  0.00  0.00
 0.00  0.00 -0.33  0.00  0.00  1.00 -0.33  0.00
 0.00  0.00  0.00 -0.50  0.00 -0.50  1.00  0.00

tabla!htm "matriz ponprimero [[1 2 3 4 5 6 7] [a b c d e f g N]] :a

a b c d e f g N
1 1.00 -0.33 0.00 -0.33 0.00 0.00 0.00 0.00
2 -0.33 1.00 0.00 0.00 -0.33 0.00 0.00 33.33
3 0.00 0.00 1.00 -0.33 0.00 -0.33 0.00 0.00
4 -0.25 0.00 -0.25 1.00 -0.25 0.00 -0.25 0.00
5 0.00 -0.50 0.00 -0.50 1.00 0.00 0.00 0.00
6 0.00 0.00 -0.33 0.00 0.00 1.00 -0.33 0.00
7 0.00 0.00 0.00 -0.50 0.00 -0.50 1.00 0.00

Y luego redujimos la matriz:

tabla!htm "redmat ponprimero [[1 2 3 4 5 6 7] [a b c d e f g N]] redmat :a

a b c d e f g N
1 1 0 0 0 0 0 0 25.2513916636575
2 0 1 0 0 0 0 0 54.2886550808357
3 0 0 1 0 0 0 0 10.1034781531217
4 0 0 0 1 0 0 0 22.2307135969142
5 0 0 0 0 1 0 0 38.2596843388749
6 0 0 0 0 0 1 0 8.38588686709103
7 0 0 0 0 0 0 1 15.3083002320026

Redondeamos las soluciones:

muestra impon "redondea ultimos redmat :a
[25 54 10 22 38 8 15]

Luego colocamos los valores en el tablero:

haz "plantilla [
 [    0 ,[:a] ,[:b]   100]
 [,[:c] ,[:d] ,[:e] ,[:b]]
 [,[:f] ,[:g] ,[:d] ,[:a]]
 [    0 ,[:f] ,[:c]     0]]

escribemat aplica [[a b c d e f g] impon "` :plantilla] [25 54 10 22 38 8 15]
 0 25 54 100
10 22 38  54
 8 15 22  25
 0  8 10   0

Luego intentamos con este tablero:

intento aplica [[a b c d e f g] impon "` :plantilla] [25 54 10 22 38 8 15]

promedios:
17.5 25.3 54.3 54.0
10.0 22.0 38.0 54.3
 8.3 15.0 22.0 25.3
 8.0  8.3 10.0 17.5
diferencias:
17.5 0.3 0.3 46.0
 0.0 0.0 0.0  0.3
 0.3 0.0 0.0  0.3
 8.0 0.3 0.0 17.5

Así que con estos valores contestamos las preguntas a, b y c simultaneamente.

7. Preguntas, Dudas, Comentarios, Peticiones

Síguenos en Facebook

8. Enlaces

Lenguaje de Programación Logo

Soluciones de Problemas de otros niveles


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