diff --git a/src/App.tsx b/src/App.tsx index b364bef..d1ba9e5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -38,6 +38,7 @@ function App() { useEffect(() => { document.body.className = dark ? "dark" : ""; setTimeout(() => { + // Avoid transition on page load document.body.style.transition = "0.3s background-color ease-out"; }, 1); }, [dark]); @@ -58,14 +59,10 @@ function App() {

0 - ? { - color: "#e66", - textShadow: difficulty > 1 ? "0px 0px 5px #e66" : "none", - } - : {} - } + style={{ + color: difficulty > 0 ? "#e66" : "inherit", + fontStyle: difficulty > 1 ? "italic" : "inherit", + }} > hell @@ -136,9 +133,9 @@ function App() { > { [ - `No restrictions on guesses.`, + `Guesses must be valid dictionary words.`, `Wordle's "Hard Mode". Green letters must stay fixed, and yellow letters must be reused.`, - `An even stricter Hard Mode. Yellow letters must move away from where they were clued.`, + `An even stricter Hard Mode. Yellow letters must move away from where they were clued, and gray clues must be obeyed.`, ][difficulty] }

diff --git a/src/clue.ts b/src/clue.ts index b4977e1..3575dd6 100644 --- a/src/clue.ts +++ b/src/clue.ts @@ -1,4 +1,4 @@ -import { Difficulty, ordinal } from "./util"; +import { Difficulty, englishNumbers, ordinal } from "./util"; export enum Clue { Absent, @@ -71,9 +71,17 @@ export function violation( const upper = letter.toUpperCase(); const nth = ordinal(i + 1); if (clue === Clue.Absent) { - // if (difficulty === Difficulty.UltraHard && guess.includes(letter)) { - // return "Guess can't contain " + upper; - // } + if (difficulty === Difficulty.UltraHard) { + const max = clues.filter( + (c) => c.letter === letter && c.clue !== Clue.Absent + ).length; + const count = guess.split(letter).length - 1; + if (count > max) { + const amount = max ? `more than ${englishNumbers[max]} ` : ""; + const s = max > 1 ? "s" : ""; + return `Guess can't contain ${amount}${upper}${s}`; + } + } } else if (clue === Clue.Correct) { if (guess[i] !== letter) { return nth + " letter must be " + upper; diff --git a/src/util.ts b/src/util.ts index d95c6b8..289799b 100644 --- a/src/util.ts +++ b/src/util.ts @@ -59,3 +59,6 @@ export function speak( export function ordinal(n: number): string { return n + ([, "st", "nd", "rd"][(n % 100 >> 3) ^ 1 && n % 10] || "th"); } + +export const englishNumbers = + "zero one two three four five six seven eight nine ten eleven".split(" ");