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(" ");