#!/usr/bin/perl open IN, "<".$ARGV[0] or die "Cannot open $1"; $_ = ; if (/MAX/ || /max/ || /Max/){ $tipo = 1; }else { $tipo =0; } while (){ next if (/^#/); next if (/^$/); $linea++; chomp; s/\s+/ /g; @lin = split /\s+/ ; $num=0; for $i (@lin){ $num++; $costes[$linea][$num] = $i; } } close IN; $n = $num; $m = $linea-1; for $i (1 .. $m){ $ofer[$i]=$costes[$i][$n+1]; $sumof += $ofer[$i]; } for $j (1..$n){ $dem[$j]=$costes[$linea][$j]; $sumde += $dem[$j]; } print "$m + $extraof, $n + $extrade\n"; for $i (1..$m+$extraof) { for $j (1..$n+$extrade) { print "$costes[$i][$j] "; } print " $ofer[$i]\n"; } print "@dem\n\n"; $extraof = $extrade = 0; if ($sumof > $sumde){ print "Problema desequilibrado, sumfil > sumcol\n"; $extrade = 1; $dem[$n+1]=$sumof-$sumde; for $i (1..$m){ $temp = $costes[$i][$n+1]; $costes[$i][$n+1]=0; $costes[$i][$n+2]=$temp; } }elsif ($sumof < $sumde){ print "Problema desequilibrado, sumfil < sumcol\n"; $extraof = 1; $ofer[$m+1]=$sumde-$sumof; for $j (1 .. $n){ $costes[$m+1][$j]=0; } }else{ print "Problema equilibrado, sumfil = sumcol\n"; } # for $i (1..$m){ # for $j (1..$n){ # if ($tipo==1){ # $costes[$i][$j]=-$costes[$i][$j]; # } # } # } print "$m + $extraof, $n + $extrade\n"; for $i (1..$m+$extraof) { for $j (1..$n+$extrade) { print "$costes[$i][$j] "; } print " $ofer[$i]\n"; } print "@dem\n"; # exit -1; $d = `date`; $d =~ s/ //g; $d =~ s/\://g; open OUT , ">$d" or die "Cannot open $d"; if ($tipo==1){ print OUT "max: "; }else{ print OUT "min: "; } for $i (1.. $m+$extraof){ for $j (1..$n+$extrade){ print OUT "+$costes[$i][$j]*X$i"."s$j"; } } print OUT ";\n"; for $i (1.. $m+$extraof){ for $j (1..$n+$extrade){ print OUT "+X$i"."s$j"; } print OUT "=$ofer[$i];\n"; } for $j (1.. $n+$extrade){ for $i (1..$m+$extraof){ print OUT "+X$i"."s$j"; } print OUT "=$dem[$j];\n"; } print OUT "int "; for $j (1.. $n+$extrade){ for $i (1..$m+$extraof){ print OUT "X$i"."s$j"; if ($j!=$n+$extrade || $i!=$m+$extraof ) { print OUT ","; } } } print OUT ";\n"; close OUT; __END__