From f7ec0742e1ea61941976fd6a9dde46dcca50dd21 Mon Sep 17 00:00:00 2001 From: George Powell Date: Mon, 2 Feb 2026 01:27:12 -0500 Subject: [PATCH] fixed "first letter" clue edge cases --- clear-today-verse.sh | 20 ++++++++++++++++ src/lib/components/GuessesTable.svelte | 17 +++++++++---- src/routes/+page.svelte | 33 ++++++++++++++++++-------- 3 files changed, 56 insertions(+), 14 deletions(-) create mode 100755 clear-today-verse.sh diff --git a/clear-today-verse.sh b/clear-today-verse.sh new file mode 100755 index 0000000..7960f3e --- /dev/null +++ b/clear-today-verse.sh @@ -0,0 +1,20 @@ +#!/bin/zsh + +# Clear today's verse from daily_verses table +DB_PATH="dev.db" +TODAY=$(date +%Y-%m-%d) + +echo "Deleting verse for date: $TODAY" + +sqlite3 "$DB_PATH" "DELETE FROM daily_verses WHERE date = '$TODAY';" + +if [ $? -eq 0 ]; then + echo "✓ Successfully deleted verse for $TODAY" + + # Show remaining verses in table + COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM daily_verses;") + echo "Remaining verses in database: $COUNT" +else + echo "✗ Failed to delete verse" + exit 1 +fi diff --git a/src/lib/components/GuessesTable.svelte b/src/lib/components/GuessesTable.svelte index e64446c..eacf874 100644 --- a/src/lib/components/GuessesTable.svelte +++ b/src/lib/components/GuessesTable.svelte @@ -28,6 +28,11 @@ return "bg-red-500 border-red-600"; } + function getFirstLetter(bookName: string): string { + const match = bookName.match(/[a-zA-Z]/); + return match ? match[0] : bookName[0]; + } + function getBoxContent( guess: Guess, column: "book" | "firstLetter" | "testament" | "section", @@ -44,16 +49,20 @@ (correctBook?.section === "Pauline Epistles" || correctBook?.section === "General Epistles") && correctBook.name[0] === "1"; - const guessStartsWithNumber = guess.book.name[0] === "1"; + const guessIsEpistlesWithNumber = + (guess.book.section === "Pauline Epistles" || + guess.book.section === "General Epistles") && + guess.book.name[0] === "1"; if ( correctIsEpistlesWithNumber && - guessStartsWithNumber && + guessIsEpistlesWithNumber && guess.firstLetterMatch ) { - return "Yes"; // Special wordplay case + const words = ["Exactly", "Right", "Yes", "Naturally"]; + return words[Math.floor(Math.random() * words.length)]; // Special wordplay case } - return guess.book.name[0]; // Normal case: just show the first letter + return getFirstLetter(guess.book.name); // Normal case: show first letter, ignoring numbers case "testament": return ( guess.book.testament.charAt(0).toUpperCase() + diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 9fcaace..918d7d4 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -82,6 +82,11 @@ return !!(b1 && b2 && Math.abs(b1.order - b2.order) === 1); } + function getFirstLetter(bookName: string): string { + const match = bookName.match(/[a-zA-Z]/); + return match ? match[0] : bookName[0]; + } + function submitGuess(bookId: string) { if (guesses.some((g) => g.book.id === bookId)) return; @@ -98,15 +103,19 @@ // Special case: if correct book is in the Epistles + starts with "1", // any guess starting with "1" counts as first letter match const correctIsEpistlesWithNumber = - correctBook.section === "Pauline Epistles" && + (correctBook.section === "Pauline Epistles" || + correctBook.section === "General Epistles") && correctBook.name[0] === "1"; - const guessStartsWithNumber = book.name[0] === "1"; + const guessIsEpistlesWithNumber = + (book.section === "Pauline Epistles" || + book.section === "General Epistles") && + book.name[0] === "1"; const firstLetterMatch = - correctIsEpistlesWithNumber && guessStartsWithNumber + correctIsEpistlesWithNumber && guessIsEpistlesWithNumber ? true - : book.name[0].toUpperCase() === - correctBook.name[0].toUpperCase(); + : getFirstLetter(book.name).toUpperCase() === + getFirstLetter(correctBook.name).toUpperCase(); console.log( `Guess: ${book.name} (order ${book.order}), Correct: ${correctBook.name} (order ${correctBook.order}), Adjacent: ${adjacent}`, @@ -206,15 +215,19 @@ // Apply same first letter logic as in submitGuess const correctIsEpistlesWithNumber = - correctBook.section === "Pauline Epistles" && + (correctBook.section === "Pauline Epistles" || + correctBook.section === "General Epistles") && correctBook.name[0] === "1"; - const guessStartsWithNumber = book.name[0] === "1"; + const guessIsEpistlesWithNumber = + (book.section === "Pauline Epistles" || + book.section === "General Epistles") && + book.name[0] === "1"; const firstLetterMatch = - correctIsEpistlesWithNumber && guessStartsWithNumber + correctIsEpistlesWithNumber && guessIsEpistlesWithNumber ? true - : book.name[0].toUpperCase() === - correctBook.name[0].toUpperCase(); + : getFirstLetter(book.name).toUpperCase() === + getFirstLetter(correctBook.name).toUpperCase(); return { book,