Skip to content

Instantly share code, notes, and snippets.

@bcernesto
Last active March 25, 2019 22:48
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bcernesto/528cf5c5ac0305da9ec56c51be058125 to your computer and use it in GitHub Desktop.
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
<?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