pashto-grammar/src/lib/game-utils.ts

45 lines
1.3 KiB
TypeScript
Raw Normal View History

2021-09-03 12:05:05 +00:00
import {
2023-07-28 06:25:39 +00:00
removeAccents,
hasAccents,
Types as T,
standardizePashto,
standardizePhonetics,
flattenLengths,
2022-10-10 10:06:32 +00:00
} from "@lingdocs/ps-react";
import { removeAShort } from "./misc-helpers";
2021-09-03 12:05:05 +00:00
export function getPercentageDone(current: number, total: number): number {
2023-07-28 06:25:39 +00:00
return Math.round((current / (total + 1)) * 100);
2021-08-31 16:33:44 +00:00
}
2021-09-03 12:05:05 +00:00
/**
2023-07-28 06:25:39 +00:00
* Says if an input written in phonetics by the user is correct/the same as a given answer
*
* The user is allowed to leave out the accents, but if they include them they must be the same as the answer
*
2021-09-03 12:05:05 +00:00
* @param input - the answer given by the user in phonetics
* @param answer - the correct answer in phonetics
*/
export function compareF(input: string, answer: string): boolean {
2023-07-28 06:25:39 +00:00
const inp = removeAShort(input);
const ans = removeAShort(answer);
return inp === (hasAccents(inp) ? ans : removeAccents(ans));
}
2023-07-28 06:25:39 +00:00
export function comparePs(
inputRaw: string,
answer: T.SingleOrLengthOpts<T.PsString[]>
): boolean {
function cleanSpaces(s: string): string {
return s.replace(/\s+/g, " ");
}
const input = cleanSpaces(inputRaw);
if ("long" in answer) {
return comparePs(input, flattenLengths(answer));
}
return answer.some((a) => {
const stand = standardizePhonetics(standardizePashto(input)).trim();
return stand === cleanSpaces(a.p) || compareF(stand, cleanSpaces(a.f));
});
}