#!/usr/bin/perl

use 5.038.2;

say "\nDigamos que q = ( 1000 - (p + p ** 2 + p ** 4) ).\n";
say "Si el producto es homogéneo, nada impide comprar al precio barato y";
say "venderlo a otros niveles de cantidad demandada que pagarían mayor";
say "precio. Este arbitraje entre zonas o clientes de distintos precios";
say "aumenta el ingreso de una misma demanda.";

say "La tabla correspondiente de precios y cantidades demandadas es:\n";
print f("Precio"), "   ", f("Cantidad"), "   ", f("Dos precios"), "   ", f("Acumulado"), "\n";

my $q1 = 0;
# my $q2 = 0;
my $p1 = 4;
my $p2 = 2;
my $sum = 0;
for (my $p = 5.5; $p >= 0.5; $p -= 0.5) { 
    print f($p), "   ", f(demandaq($p)), "  ";
    if ($p == $p1){
	print "   ", f($p * demandaq($p)), "   ";
    }

    $q1 = demandaq($p1);
    if ($p == $p2){
	my $qq = demandaq($p2)-$q1;
	print "   ";
	for (my $pp = $p2 + 0.5; $pp < $p1; $pp += 0.5){
	    last if $qq <= 0;
	    print f("(".demandaq($p2)."-$q1)*$pp");
	    $sum += $qq * $pp;
	    $qq -= demandaq($pp);
	}
	print "   ", f($sum);
    }else{
	if ($p == $p1){
	    print f($p *demandaq($p1));
	}else{
	    print f("-");
	}
    }  
    say "";
}

say "\nDe esta manera, el ingreso total obtenido es de ", $p1*$q1+$sum;

say "\nEn el paso 1 vimos el punto de la demanda más interesante";
say "En el paso 2 vimos que un cierto poder de monopolio exprime la demanda";
say "Y en el paso 3 vemos como trasladar cantidades aumenta el ingreso\n"; 

exit 3;


sub demandaq {
    my $p = shift;
    return int( 1000 - ($p + $p ** 2 + $p ** 4) );
}

sub f {
    my $n = shift;
    return " " x (16 - length ($n)) . $n;
}

