Last active
March 25, 2019 22:48
-
-
Save bcernesto/528cf5c5ac0305da9ec56c51be058125 to your computer and use it in GitHub Desktop.
¿Cómo comprarías 100 animales con 100 pesos si: las vacas cuestan 10 pesos, los borregos cuestan 3 pesos, y los chivos cuestan 50 centavos? Solución en php
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* Reto propuesto por Whatsapp en el grupo Programando accesible. | |
Cómo comprarías 100 animales con 100 pesos si: | |
Las vacas cuestan 10 pesos, | |
Los borregos cuestan 3 pesos, | |
Y los chivos cuestan 50 centavos (o céntimos, la moneda no importa) | |
Para resolverlo se puede tener en cuenta el siguiente sistema de ecuaciones como premisas: | |
vacas + borregos + chivos = 100 animales | |
vacas a 10 pesos + borregos a 3 pesos + chivos a 50 centavos = 100 pesos | |
Debe comprarse al menos un animal de cada tipo. | |
Resolución por método de fuerza bruta, economizando recursos lo más posible. | |
Un poco de lógica para optimizar la fuerza bruta: | |
Si compramos más de 9 vacas, nos gastaremos los 100 pesos y no nos alcanzará para al menos un borrego y un chivo; | |
Si compramos más de 30 borregos, nos gastaremos 90 pesos, que mas 1 vaca y 1 chivo serían $100,50 pesos; | |
Nos alcanzaría para comprar hasta 100 chivos, pero como tenemos qué tener al menos un animal de cada tipo, solo podríamos comprar 98. | |
¡Vamos con la solución en php! */ | |
// Creamos una variable para controlar si el problema se ha resuelto | |
$resuelto=false; | |
// Y otras para contar los intentos y el tiempo de procesamiento, por fines estadísticos. | |
$intentos = 0; $ms=0; $inicio=0; $fin=0; | |
// Empezamos a contar el tiempo | |
$inicio=microtime(true); | |
// Probamos contando de 1 a 9 vacas | |
for($vacas=1;$vacas<10;$vacas++){ | |
// Probamos contando de 1 a 29 borregos | |
for($borregos=1;$borregos<30;$borregos++){ | |
// Lo mismo de 1 a 98 chivos | |
for($chivos=1;$chivos<99;$chivos++){ | |
// Sumamos un intento. | |
$intentos++; | |
// Comprobamos si las dos premisas se cumplen | |
if($vacas+$borregos+$chivos==100&&(10*$vacas)+(3*$borregos)+(0.5*$chivos)==100){ | |
// Imprimimos el resultado | |
echo "El resultado son $vacas vacas, $borregos borregos y $chivos chivos\n"; | |
// Marcamos el problema como resuelto | |
$resuelto=true; | |
} | |
// Si el problema está resuelto, dejjamos de contar chivos | |
if($resuelto==true)break; | |
} | |
// Si el problema está resuelto, dejamos de contar borregos | |
if($resuelto==true)break; | |
} | |
// Si el problema está resuelto, dejamos de contar vacas | |
if($resuelto==true)break; | |
} | |
// Tomamos el tiempo final | |
$fin=microtime(true); | |
// Calculamos el tiempo | |
$ms=round($fin-$inicio,4); | |
// Imprimimos la estadística | |
echo "$intentos intentos realizados en $ms microsegundos"; | |
/* Resultados | |
El resultado son 5 vacas, 1 borregos y 94 chivos | |
11462 intentos realizados en 0.0041 microsegundos | |
La optimización se comprueba porque, si comentáramos las líneas break, el resultado sería: | |
El resultado son 5 vacas, 1 borregos y 94 chivos | |
25578 intentos realizados en 0.0082 microsegundos | |
*/ | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment