package Ġde . sl uit . word search . game Ċ Ċ import Ġde . sl uit . word search . model .* Ċ Ċ class ĠGame ( val Ġsolution : ĠWord , Ġval Ġword List : ĠWord List ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġguess Results Ġ= Ġmutable ListOf < Guess Result >() ĊĊĠĠĠ Ġval Ġword Length Ġ= Ġsolution . length ĊĠĠĠ Ġval Ġmax G ues ses Ġ= Ġword Length Ġ+ Ġ 1 ĊĊĠĠĠ Ġfun Ġguess ( guess : ĠWord ): ĠAnswer Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalready W on () Ġ-> ĠPlayer Has W on ( last Guess Result ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalready Lost () Ġ-> ĠPlayer Has Lost ( last Guess Result ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlength Mismatch ( guess ) Ġ-> ĠWrong Length ( guess , Ġword Length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunknown Word ( guess ) Ġ-> ĠUnknown Word ( guess ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompare ( guess , Ġsolution ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguess Results Ġ+= Ġresult ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( guess Ġ== Ġsolution ) ĠPlayer Has W on ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( already Lost ()) ĠPlayer Has Lost ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠWrong Word ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompare ( guess : ĠWord , Ġword : ĠWord ) Ġ= Ġguess . letters . zip ( word . letters ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( guess Letter , Ġword Letter ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( guess Letter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword Letter Ġ-> ĠCorrect Place ( guess Letter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġword . letters Ġ-> ĠInc orrect Place ( guess Letter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠNot Present ( guess Letter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠGu ess Result ( guess , Ġit ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġalready W on (): ĠBoolean Ġ= Ġguess Results . last OrNull ()?. guess Ġ== Ġsolution ĊĠĠĠ Ġprivate Ġfun Ġalready Lost (): ĠBoolean Ġ= Ġguess Results . size Ġ>= Ġmax G ues ses ĊĠĠĠ Ġprivate Ġfun Ġlength Mismatch ( guess : ĠWord ): ĠBoolean Ġ= Ġsolution . length Ġ!= Ġguess . length ĊĠĠĠ Ġprivate Ġfun Ġunknown Word ( guess : ĠWord ): ĠBoolean Ġ= Ġ! word List . exists ( guess ) ĊĊĠĠĠ Ġprivate Ġfun Ġlast Guess Result () Ġ= Ġguess Results . last () Ċ } Ċ