#!/usr/bin/perl # $minfile = "/tmp/minion" . time; $len1 = $ARGV[0]; # length of first line $len2 = $ARGV[1]; # length of second line $maxlen = $len1 + $len2; $inputfile = $ARGV[2]; # saved output from Lisp's "non-matches" function open(INFILE, $inputfile) or die "Can't open inputfile: $!"; $tfilename = "/tmp/mintemp" . time; $tfile = ">". $tfilename; open(TEMPFILE,$tfile); while () { s/\n/\ /; s/\(//g; s/\)/\n/g; s/\ \ /\ /g; s/\ \ /\ /g; s/\n\ /\n/g; print TEMPFILE "$_"; } close INFILE; close TEMPFILE; open(RFILE,$tfilename) or die "Can't open rfile: $!"; while () { if ($. == 1) { @sparray1 = split(); } } close RFILE; open(RFILE,$tfilename) or die "Can't open rfile: $!"; while () { if ($. == 2) { @sparray2 = split(); } } close RFILE; $nomatchlen = @sparray1; # print ("length of nomatch array is: ",$nomatchlen,"\n"); $mfilename = "/tmp/minionfile" . time; $mfile = ">". $mfilename; open(MFILE,$mfile); print MFILE "MINION 3 **VARIABLES** DISCRETE places1[",$len1,"] {0..",$maxlen,"} DISCRETE places2[",$len2,"] {0..",$maxlen,"} DISCRETE maxes[2] {0..",$maxlen,"} DISCRETE aux0 {0..",$maxlen,"} # aliases **SEARCH** MINIMISING aux0 PRINT [ places1,places2] VARORDER [ places1,places2] **CONSTRAINTS** "; for ($i = 0; $i < $nomatchlen; $i++) { print MFILE "diseq(places1[",$sparray1[$i],"], places2[",$sparray2[$i],"])\n";} $len1minus1 = $len1 - 1; for ($i = 0; $i < $len1minus1; $i++) { print MFILE "ineq(places1[",$i,"],places1[",$i + 1,"],-1)\n";} $len2minus1 = $len2 - 1; for ($i = 0; $i < $len2minus1; $i++) { print MFILE "ineq(places2[",$i,"],places2[",$i + 1,"],-1)\n";} print MFILE "alldiff([places2]) alldiff([places1]) max(places1,maxes[0]) max(places2,maxes[1]) max(maxes,aux0) **EOF**"; close MFILE; $minoutname = "/tmp/minout" . time; $dominion = `minion $mfilename > $minoutname`; open(INFILE, $minoutname) or die "Can't open inputfile: $!"; while () { if ($_ =~ m/Value/) {$reflineno = $.;} } close INFILE; open(INFILE, $minoutname) or die "Can't open inputfile: $!"; while () { if ($. == $reflineno - 7 || $. == $reflineno - 6) {print substr($_,5);} } close INFILE; $cleanup = `rm $minoutname; rm $mfilename; rm $tfilename`;