BEGIN{ srand()} BEGIN { Opts="n 50 kmin 2 kmax 10000 acmin 1 acmax 5 "\ "remin 1 remax 5 mmmin -0.178 mmmax -0.078 " \ "mpmin 0.073 mpmax 0.21 amin 2.8 amax 3.2 bmin 1.05 bmax 1.2"; N=split(Opts,Tmp); for(I=1;I<=N;I +=2 ) Set[Tmp[I]]= Tmp[I+1]; #for(I in Set) print I " " Set[I]; } NF == 2 && ( ! ($1 in Set)) {echo "unknown " $1 ; next} NF==2 {Set[$1]=$2+0} function x(y) { if (y in Set) return Set[y]; print y " missing" exit; } function min(y) { return x(y "min") } function max(y) { return x(y "max") } function months() { return a()*ksloc()^b()*(mm()*(acap()-3)+1)*(mp()*(rely() -3) + 1); } function ksloc() {return from(min("k"), max("k"))} function acap() { return fromi(min("ac"),max("ac"))} function rely() { return fromi(min("re"),max("re"))} function mm() { return from(min("mm"), max("mm"))} function mp() { return from(min("mp"), max("mp")) } function a() { return from(min("a"), max("a")) } function b() { return from(min("b"), max("b")) } function from(min,max) { return ((min > max) ? froam(max,min) : min+rand()*(max-min)) } function fromi(min,max) {return round(from(min,max)) } function round(x) { return int(x+0.5) } function debug() { print "a " a(); print "b " b(); print "acap " acap(); print "rely " rely(); print "mm " mm(); print "mp " mp(); print "ksloc " ksloc(); } END { #debug(); I=x("n"); while(I--) print months() }