;ROOMMATES IN A HAT [riah] ;who are the roommates? exten => s,1,set(__ROWS=6) exten => s,n,set(__ROOMMATE1=Brad) exten => s,n,set(__ROOMMATE2=Brian) exten => s,n,set(__ROOMMATE3=James) exten => s,n,set(__ROOMMATE4=Jeff) exten => s,n,set(__ROOMMATE5=Marc) exten => s,n,set(__ROOMMATE6=Aubrey) exten => s,n,set(__PRIZES=2) exten => s,n,set(__TRUNC=0) exten => s,n,set(__CROP=0) exten => s,n,set(__COUNT=1) exten => s,n,set(__TOTALSCORE=0) exten => s,n,set(__EXITLOOP=0) exten => s,n,set(__LAST=0) ;for each roommate prompt for a weight exten => s,n,set(__COUNT=$[${TRUNC} + 1]) ;set roommate counter exten => s,n,while($[${COUNT} <= $[${ROWS} - ${CROP}]]) ;while we havent assigned a weight... exten => s,n(reask),background(beep) ;prompt with a tone... exten => s,n,waitexten(5) ;and givem five seconds to enter an extension 0-9 exten => s,n(incr),set(__COUNT=$[${COUNT}+1]) ;then increment the counter exten => s,n,endwhile exten => s,n(dontask),set(__ROWS=$[${ROWS} - ${CROP}]) exten => s,n(repeat),set(__COUNT=$[${TRUNC} + 1]) exten => s,n,while($[${COUNT} <= ${ROWS}]) exten => s,n,set(__MATEWEIGHT${COUNT}=${MATH(${MATEWEIGHT${COUNT}}*100,int)}) exten => s,n,set(__MATEWEIGHT${COUNT}=${MATH(${MATEWEIGHT${COUNT}}/${TOTALSCORE},int)}) exten => s,n,set(__COUNT=$[${COUNT} + 1]) exten => s,n,endwhile exten => s,n,set(__COUNT=$[${TRUNC} + 1]) exten => s,n,while($[${COUNT} <= ${ROWS}] & $[${PRIZES} > $[${ROWS} - ${CROP}]]) exten => s,n(iloop),while($[${EXITLOOP} != 1]) exten => s,n,random(${MATEWEIGHT${COUNT}}:s,finalscore) exten => s,n,set(__TRIES=$[${TRIES} + 1]) exten => s,n,goto(iloop) exten => s,n(finalscore),set(__MATEWEIGHT${COUNT}=${TRIES}) exten => s,n,set(__EXITLOOP=1) exten => s,n,endwhile exten => s,n,set(EXITLOOP=0) exten => s,n,set(__COUNT=$[${COUNT}+1]) exten => s,n,set(__TRIES=1) exten => s,n,endwhile exten => s,n,set(__COUNT=$[${TRUNC} + 1]) exten => s,n,set(__SUBCOUNT=1) exten => s,n,while($[${COUNT} < ${ROWS}]) exten => s,n,while($[${SUBCOUNT} < $[${ROWS} - $[${COUNT} - 1]]]) exten => s,n,macroif($[${MATEWEIGHT${SUBCOUNT}} < ${MATEWEIGHT$[${SUBCOUNT} + 1]}]?sort|${MATEWEIGHT${SUBCOUNT}},${MATEWEIGHT$[${SUBCOUNT} + 1]},${ROOMMATE${SUBCOUNT}},${ROOMMATE$[${SUBCOUNT} + 1]},${SUBCOUNT},1) exten => s,n(incr2),set(__SUBCOUNT=$[${SUBCOUNT} + 1]) exten => s,n,endwhile exten => s,n,set(__COUNT=$[${COUNT} + 1]) exten => s,n,set(__SUBCOUNT=1) exten => s,n,endwhile exten => s,n,set(__COUNT=${PRIZES}) exten => s,n,gotoif($[${MATEWEIGHT${COUNT}} != ${MATEWEIGHT$[${COUNT} + 1]}] | $[${PRIZES} >= $[${ROWS} - ${CROP}]]?winners,1:trunc,1) exten => s,n,wait(5) exten => winners,1,while($[${COUNT} > 0]) exten => winners,n,noop(${ROOMMATE${COUNT}} is a winner) exten => winners,n,set(__COUNT=$[${COUNT} -1]) exten => winners,n,endwhile exten => winners,n,hangup ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;take the weight and build the array;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => _X,1,set(__MATEWEIGHT${COUNT}=${EXTEN}) ;give each roommate a relative weight using the counter exten => _X,n,set(__TOTALSCORE=$[${TOTALSCORE} + ${MATEWEIGHT${COUNT}}]) exten => _X,n,set(__LAST=$[${LAST} + 1]) exten => _X,n,gotoif($[${MATEWEIGHT${COUNT}} = 0]?zerocrop) exten => _X,n,goto(s,incr) exten => _X,n(zerocrop),macro(sort|${MATEWEIGHT${COUNT}},${MATEWEIGHT$[${ROWS} - ${CROP}]},${ROOMMATE${COUNT}},${ROOMMATE$[${ROWS} - ${CROP}]},${COUNT},1) exten => _X,n,set(__CROP=$[${CROP} + 1]) exten => _X,n,gotoif($[${LAST} = ${ROWS}]?s,dontask) exten => _X,n,goto(s,reask) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; exten => trunc,1,while($[${COUNT} > 1]) exten => trunc,n,gotoif($[${MATEWEIGHT${COUNT}} != ${MATEWEIGHT$[${COUNT} - 1]}]?posttrunc) exten => trunc,n,set(__COUNT=$[${COUNT} - 1]) exten => trunc,n,endwhile exten => trunc,n(posttrunc),set(__TRUNC=$[${PRIZES} - ${COUNT}]) exten => trunc,n,set(__COUNT=${PRIZES}+1) exten => trunc,n,while($[${COUNT} < ${ROWS}]) exten => trunc,n,gotoif($[${MATEWEIGHT${COUNT}} != ${MATEWEIGHT$[${COUNT} + 1]}]?postcrop) exten => trunc,n,set(__COUNT=$[${COUNT} + 1]) exten => trunc,n,endwhile exten => trunc,n(postcrop),set(__CROP=$[${ROWS} - ${COUNT}]) exten => trunc,n,goto(s,repeat) [macro-sort] exten => s,1,set(__TEMP=${ARG2}) exten => s,n,set(__MATEWEIGHT$[${ARG5} + ${ARG6}]=${ARG1}) exten => s,n,set(__MATEWEIGHT${ARG5}=${TEMP}) exten => s,n,set(__TEMP=${ARG4}) exten => s,n,set(__ROOMMATE$[${ARG5} + ${ARG6}]=${ARG3}) exten => s,n,set(__ROOMMATE${ARG5}=${TEMP})