#!/usr/bin/perl

use 5.038;

# Simulación "efecto 2.º teorema de Coase" en un mercado de 10 empesas
# La integración horizontal por abandono con transferencias

my $N = 10;

my (@I, @C, @T); # empresas: ingresos, costes, transferencias cualquier signo
my ($p , $q) = (100, 1_000); # mercado: precios y cantidad de equilibrio.
# Reglas:
# El precio $p debe subir con descenso de $N
# $q permanece constante
# La regla de abandono es $C > $I

# Recolectar: NCasos efectoC positivo, Beneficio medio, casos nulos
my ($nsi, $bmedio1, $bmedio2, $nulos);
my $flag = 0;

my $N2 = 0;

my $iter = 1000;
my $c = 0;
while (++$c <= $iter){
# FASE 1
    generate_scene();
    get_stats();
# FASE 2
    do_absents();
    get_stats();
# info
    report();
}

exit 2;


sub generate_scene {
    # mercado                         # de momento, se obvia
    # $q constante
    # $p pongamos 10 y que puede subir a 10 + (10-$N)
    
    # empresas
    for my $i (0 .. $N-1){
	$I[$i] = int (100*rand());
	$C[$i] = int (80*rand());
	$T[$i] = 0;
    }
    $flag = 0;
    $N2 = 0;
    $bmedio1 = $bmedio2 = 0;
}

sub get_stats {
    my $b;
    for my $i (0 .. scalar(@I)-1){
	$b += ($I[$i] - $C[$i]) + $T[$i];
	if ($I[$i] == 0){
	    $flag = 1;
	}
    }
    $b /= scalar(@I);
    if ($flag == 1){
	$bmedio1 = $b;
    }else{
	$bmedio2 = $b;
    }
}

sub do_absents {
    if ($flag == 1){
	my $transfer = 0;
	for my $i (0 .. scalar(@I)-1){
	    if ($I[$i] < $C[$i]){
		$transfer += $I[$i];
		$I[$i] = $C[$i] = 0;
		$N2++;
	    }
	}
	$transfer /= ($N-$N2);
	for my $i (0 .. scalar(@I)-1){
	    if ($I[$i] < $C[$i]){
	        $T[$i] = $transfer;
	    }else{
		$T[$i] = -$transfer;
	    }
	}	
    }else{
	$nulos++;
    }
}

sub report {
    say "$c $0   Beneficio medio normal $bmedio2   Beneficio medio mejorado $bmedio1   Empresas ausentes $N2   Número acumulado de inmutables $nulos";
}




sub norm {
    my @l = @_;
    my $sum = 0;
    for my $i (@l){
	$sum += $i;
    }
    for my $j (0 .. scalar(@l)-1){
	$l[$j] /= $sum;      # en tanto por uno
	$l[$j] *= 100;       # pasado a tanto por 100
    }
    return @l;
}


__END__
La fuente de inspiración, aparte del trabajo de Ronald Coase,
  es el caso de los Dos Ríos en California, publicado en WIRED 2024.

Sugún esta simulación aproximadamente el 10% de los casos merece
  una salida coaseana, mientras que la relación ingresos-gastos es 100:80.
  
