import static Man.* import static Woman.* Map match(Map> guysGalRanking, Map> galsGuyRanking) { Map engagedTo = new TreeMap() List freeGuys = (Man.values()).clone() while(freeGuys) { Man thisGuy = freeGuys[0] freeGuys -= thisGuy List guyChoices = Woman.values().sort{ she -> - guysGalRanking[thisGuy][she] } for(Woman girl in guyChoices) { if(! engagedTo[girl]) { engagedTo[girl] = thisGuy break } else { Man thatGuy = engagedTo[girl] if (galsGuyRanking[girl][thisGuy] > galsGuyRanking[girl][thatGuy]) { engagedTo[girl] = thisGuy freeGuys << thatGuy break } } } } engagedTo }