kripke: add daily and random challenges (2)

This commit is contained in:
2025-02-19 21:24:33 +09:00
parent 64d622ea8f
commit 2901d39d30
2 changed files with 18 additions and 12 deletions

View File

@@ -1,7 +1,21 @@
import type { SeoProps } from "$components/seo";
import { randomSeed } from "../system.js";
export async function load({ url }) {
const seedStr = url.searchParams.get("seed");
const seed = (() => {
try {
if (!seedStr) return randomSeed();
const seed = Number.parseInt(seedStr);
if (!Number.isSafeInteger(seed)) return randomSeed();
return seed;
} catch {
return randomSeed();
}
})();
export async function load() {
return {
seed,
seo: {
title: "KRIPKE (random challenge) - cannorin.net",
description: "KRIPKE - WORDLE, but for Kripke frames!",

View File

@@ -1,5 +1,4 @@
<script lang="ts">
import { page } from "$app/state";
import { Button } from "$lib/components/ui/button";
import * as Dialog from "$lib/components/ui/dialog";
import { type Formula, isomorphic, validWorlds } from "@cannorin/kripke";
@@ -8,17 +7,10 @@ import LuX from "lucide-svelte/icons/x";
import FrameInput from "../frame-input.svelte";
import Game, { type GameStatus, type Move } from "../game.svelte";
import Rules from "../rules.svelte";
import { getRandomFrame, randomSeed } from "../system";
const seed = (() => {
const seedStr = page.url.searchParams.get("seed");
if (seedStr) {
const seed = Math.floor(Number.parseInt(seedStr));
return seed;
}
return randomSeed();
})();
import { getRandomFrame } from "../system";
let { data } = $props();
const seed = data.seed;
const { id, frame } = getRandomFrame(seed);
const guess = (frameId: number) => isomorphic[frameId] === id;
const check = (formula: Formula) => validWorlds(frame, formula).length;