#!/usr/bin/perl 

use 5.038.2;

my $saldoini = 12_345;   # puede ser negativo

my $nmoves = 2 + int rand() * 10;

my @move;
my $type;

my ($max, $min) = (-999_999, +999_999);
say "CASO 0: Orden correcto en un solo día";
my $saldo = $saldoini;
for my $i ( 0 .. $nmoves ){
    $move[$i] = int ((rand()-0.5) * 50_000);
    $saldo += $move[$i];
    $type = ($move[$i] >= 0) ? "in " : "out"; 
    say "$i)   money $type $move[$i]   saldo $saldo";  
    $max = $saldo if $saldo > $max;
    $min = $saldo if $saldo < $min;
}
say "Saldo final = $saldo";
say "min = $min   max = $max\n";

for my $i (1 .. 10){
    say "CASO $i: Desorden de iguales movimientos mismo día";
    $saldo = $saldoini;
    my $c = 0;
    ($max, $min) = (-999_999, +999_999);
    @move = jlm( @move );
    for my $j ( @move ){
	$c++;
	$saldo += $j;
	$type = ($j >= 0) ? "in " : "out"; 
	say "$c)   money $type $j   saldo $saldo"; 
	$max = $saldo if $saldo > $max;
	$min = $saldo if $saldo < $min;
    }
    say "Saldo final = $saldo";
    say "min = $min   max = $max\n";
}

exit 3;


sub jlm {
    my @deck = @_;
    my @deck2;
    my $n = scalar(@deck);
    while ($n){
	push @deck2, splice(@deck,int($n*rand),1);
	--$n;
    }
    return @deck2;
}



