I wanted a daily puzzle that wasn't about words. The result is Sonar Puzzle : a free logic game where you find one enemy submarine in every coloured sector. Easy, Medium, and Hard are three boards, and every player on that day gets the same three.
The day is a fixed UTC+2 calendar date, not the phone's local midnight, and the device builds that day's board itself.
The game in 30 seconds
From 29 October 2026, Easy is 5×5. Earlier days stay 6×6. From 30 October 2026, Easy also keeps at least one one-cell sector. Medium is 8×8. Hard is 9×9. Each row, each column, and each sector holds one enemy, and two enemies cannot touch, even at a corner.
1. A daily puzzle without a puzzle server
The seed is the date plus the level. hashString lives in src/app/sonar/sonar-daily.ts . mulberry32 is the only random stream the generator may use:
export function dailySeed ( date : string , level : LogicLevel ): number { return hashString ( `sonar2| ${ date } | ${ level } ` ); }
/** Mulberry32.…