add TUSMO simulator

This commit is contained in:
JOLIMAITRE Matthieu 2024-04-30 16:40:51 +02:00
parent 5d2ca505d7
commit 1156752e0a

View file

@ -1,8 +1,8 @@
import { Dict } from "../dict.ts"; import { Dict } from "../dict.ts";
import { enumerate, range, zip } from "../utils.ts"; import { enumerate, range, zip } from "../utils.ts";
import { GuessResult, Info } from "./game.ts"; import { Gaming, GuessResult, Info } from "./game.ts";
export class Simulator { export class Simulator implements Gaming {
word; word;
constructor(word: string) { constructor(word: string) {
@ -15,10 +15,10 @@ export class Simulator {
return new Simulator(word); return new Simulator(word);
} }
try_guess(guess: string): GuessResult { guess(guess_: string, _known: string): GuessResult {
if (guess === this.word) return { kind: "success" }; if (guess_ === this.word) return { kind: "success" };
const rest_actual = [...this.word].map((letter) => letter as (string | null)); const rest_actual = [...this.word].map((letter) => letter as (string | null));
const rest_guess = [...guess].map((letter) => letter as (string | null)); const rest_guess = [...guess_].map((letter) => letter as (string | null));
const info = [...range(0, this.word.length)].map(() => null) as (Info | null)[]; const info = [...range(0, this.word.length)].map(() => null) as (Info | null)[];
for (const [index, [guessed, actual]] of enumerate(zip(rest_guess, rest_actual))) { for (const [index, [guessed, actual]] of enumerate(zip(rest_guess, rest_actual))) {
@ -40,4 +40,8 @@ export class Simulator {
const informations = info.map((i) => i != undefined ? i : ({ kind: "abscent" }) as Info); const informations = info.map((i) => i != undefined ? i : ({ kind: "abscent" }) as Info);
return { kind: "failure", informations }; return { kind: "failure", informations };
} }
length(): number {
return this.word.length;
}
} }