About the Project
This is a fork of the WebKenKen project by msakuta. Special thanks to Sid Challa for helping set up the Google Cloud application.
Classical KenKen started as a digital version of a daily Do Now activity done on paper. Our team was manually creating puzzles, converting them to PDFs, printing, cutting, and grading 100+ KenKen puzzles a day. Over the course of a year we graded over 6,000 individual puzzles. After reviewing the data, we decided to build this online version to handle scoring automatically and serve puzzles based on each student's current level.
Project Objectives
- Students log in with their school accounts for verification and tracking
- A score is earned upon completing a puzzle that measures guesses, time, and difficulty
- Student scores are stored in a server-side database identified by student email
- Puzzles are served based on student ability (rank)
- Scores determine a grade relative to puzzle difficulty
Research & Results
The following compares overall 9th grade PSAT growth against students in the course that used KenKen puzzles (ECS):
| Group | Overall Growth | Math Growth | Reading Growth |
|---|---|---|---|
| 9th Grade (overall) | 25.8 | 12.6 | 13.3 |
| ECS Students | 31.9 | 16.5 | 15.4 |
The same data separated by average daily KenKen puzzle grade:
| Daily Puzzle Grade | Overall Growth | Math Growth | Reading Growth |
|---|---|---|---|
| >80% | 41.7 | 20.6 | 21.1 |
| 60%–79% | 22.2 | 2.2 | 20.0 |
| <60% | 7.7 | 7.7 | 0.0 |
This data informed our student learning objectives for the 22–23 school year.
How It Works
- Student signs in using their school-issued Google account via Google Identity Services (OAuth 2.0)
- The server validates the Google access token using the Google OAuth2 tokeninfo API, then issues a persistent session token
- The session token is stored in the browser's
localStorageso the student stays signed in across page loads and return visits - A puzzle is generated with difficulty determined by the student's current rank
- Upon completion, the score is stored in the server-side database with a timestamp and the student's email
- Teachers access the Teacher portal to view all stored student scores, filterable and sortable by name or ID
Determining Difficulty
Difficulty is controlled by two variables: grid size and hint count.
The grid size is floor(rank) + 2, maxing out at 9×9.
Rank is a floating-point number — the integer part sets the grid size, and the fractional part
(sub-rank) controls how many cells are pre-filled as hints. Hints decrease as sub-rank rises,
so students are gradually challenged to solve more of the puzzle on their own before advancing
to the next grid size. The rank is derived from the student's cumulative average score.
Scoring
Score = (Unsolved / Guesses + 2.5 × Unsolved / Time) × Grid Size × 10
Unsolved is the number of cells the student had to figure out themselves (total cells minus hint cells). Time is seconds elapsed. The grid size multiplier captures the inherent difficulty of larger puzzles — more number choices per cell and more complex arithmetic — independent of how many cells were pre-filled. Time is weighted 2.5× relative to guess accuracy.
Typical Scores by Rank
| Rank | Grid | Hints (start → end) | Unsolved range | Typical Score | Avg to Advance |
|---|---|---|---|---|---|
| 1 | 3×3 | 3 → 1 | 6 – 8 | 25 – 40 | 25 |
| 2 | 4×4 | 5 → 2 | 11 – 14 | 38 – 55 | 42 |
| 3 | 5×5 | 8 → 3 | 17 – 22 | 50 – 68 | 58 |
| 4 | 6×6 | 12 → 5 | 24 – 31 | 62 – 80 | 72 |
| 5 | 7×7 | 16 → 7 | 33 – 42 | 74 – 93 | 84 |
| 6 | 8×8 | 21 → 9 | 43 – 55 | 85 – 105 | 94 |
| 7 | 9×9 | 0 | 81 | 95 – 120 | — |
Calculating a Grade
Teachers configure three variables: Max Score, Completion Score (%), and No-Submission Score (%). A student's daily qualifying submissions are counted against the required number per day over the assignment period. Grade = count / required × Max Score, floored at the Completion Score if the requirement is met, or at the No-Submission Score if nothing was submitted. A KenKen submission only counts if the score meets or exceeds the student's all-time average.
Rank Structure
Rank is a floating-point number. The integer part determines the grid size; the fractional part (sub-rank) controls hints. A student advances to the next integer rank when their cumulative average score crosses the threshold below.
Rank Level Thresholds
| Rank | Grid | Avg Score to Enter |
|---|---|---|
| 1 | 3×3 | 0 |
| 2 | 4×4 | 25 |
| 3 | 5×5 | 42 |
| 4 | 6×6 | 58 |
| 5 | 7×7 | 72 |
| 6 | 8×8 | 84 |
| 7 | 9×9 | 94 |
Sub-Rank Hint Breakdown
Within each rank, hints are assigned based on how far through the rank the student is (sub-rank = fractional part of rank). Fewer hints = more cells to solve independently.
| Sub-rank | Hints given |
|---|---|
| 0.0 – 0.1 | floor(cells / 3) |
| 0.1 – 0.3 | floor(cells / 4) |
| 0.3 – 0.5 | floor(cells / 5) |
| 0.5 – 0.8 | floor(cells / 6) |
| 0.8 – 1.0 | floor(cells / 7) |
| Rank 7 | 0 (no hints) |
Privacy Policy
Thank you for using Classical KenKen. This privacy policy explains how we collect, use, and protect your information. This app complies with the Google API Services User Data Policy, including the Limited Use requirements.
Information We Collect
We request access to the following Google API scope:
- userinfo.email — to identify and track your progress using your email address
Sign-in is handled by Google Identity Services (OAuth 2.0 implicit token flow).
The Google access token is verified server-side using the Google OAuth2 tokeninfo API
(googleapis.com/oauth2/v1/tokeninfo). We never receive your Google password.
How We Use Your Information
We collect and use your Google Account email address solely for:
- Providing personalized experiences in our logic puzzle and SAT practice application
- Storing your scores and progress in our server-side database, keyed to your email address
- Scaling the difficulty of puzzles and questions based on your performance
Data Storage and Retention
- Your email address and scores are stored in a SQLite database hosted on our application server
- A session token (a random UUID) is issued upon sign-in and stored in your browser's
localStorageto keep you signed in; it is never shared with third parties - Only users signing in from an authorized school domain (
hartfordschools.org) are permitted to store data - Data may be removed upon request — contact us at the address below
Third-Party Disclosure
We do not disclose your information to any third party. Your data is strictly confidential and used only for the purposes stated above.
Data Security
We implement security measures including encryption and access controls to protect the confidentiality and integrity of your data.
User Controls
You have the right to:
- Access the data associated with your account
- Request correction of any inaccuracies in your information
- Revoke the application's access to your Google Account at any time
Updates to This Policy
This policy may be updated occasionally. We will notify you of any changes by updating the date at the top of this page.
Contact
Questions or concerns? Contact us at dobbb001@hartfordschools.org.