Wordle comparison: Difference between revisions
Content added Content deleted
imported>Fth |
(Add Scala implementation) |
||
Line 1,594: | Line 1,594: | ||
BBAABBB vs BBBBBAA green green yellow yellow green yellow yellow |
BBAABBB vs BBBBBAA green green yellow yellow green yellow yellow |
||
BBAABBB vs AABBBAA yellow yellow yellow yellow green grey grey |
BBAABBB vs AABBBAA yellow yellow yellow yellow green grey grey |
||
</pre> |
|||
=={{header|Scala}}== |
|||
{{trans|Java}} |
|||
<syntaxhighlight lang="Scala"> |
|||
object WordleComparison extends App { |
|||
case class TwoWords(answer: String, guess: String) |
|||
enum Colour extends Enum[Colour] { |
|||
case GREEN, GREY, YELLOW |
|||
} |
|||
val pairs = List(TwoWords("ALLOW", "LOLLY"), TwoWords("ROBIN", "SONIC"), |
|||
TwoWords("CHANT", "LATTE"), TwoWords("We're", "She's"), TwoWords("NOMAD", "MAMMA")) |
|||
pairs.foreach(pair => println(s"${pair.answer} v ${pair.guess} -> ${wordle(pair.answer, pair.guess)}")) |
|||
def wordle(answer: String, guess: String): List[Colour] = { |
|||
if (answer.length != guess.length) { |
|||
throw new AssertionError("The two words must be of the same length.") |
|||
} |
|||
var answerCopy = answer |
|||
var result = List.fill(guess.length)(Colour.GREY) |
|||
for (i <- guess.indices) { |
|||
if (answer(i) == guess(i)) { |
|||
answerCopy = answerCopy.updated(i, NULL) |
|||
result = result.updated(i, Colour.GREEN) |
|||
} |
|||
} |
|||
for (i <- guess.indices) { |
|||
val index = answerCopy.indexOf(guess(i)) |
|||
if (index >= 0 && result(i) != Colour.GREEN) { |
|||
answerCopy = answerCopy.updated(index, NULL) |
|||
result = result.updated(i, Colour.YELLOW) |
|||
} |
|||
} |
|||
result |
|||
} |
|||
val NULL = '\u0000' |
|||
} |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
ALLOW v LOLLY -> List(YELLOW, YELLOW, GREEN, GREY, GREY) |
|||
ROBIN v SONIC -> List(GREY, GREEN, YELLOW, GREEN, GREY) |
|||
CHANT v LATTE -> List(GREY, YELLOW, YELLOW, GREY, GREY) |
|||
We're v She's -> List(GREY, GREY, YELLOW, YELLOW, GREY) |
|||
NOMAD v MAMMA -> List(GREY, YELLOW, GREEN, GREY, GREY) |
|||
</pre> |
</pre> |
||