How scoring works: Zip
Your game score comes from your own puzzle result. Your party rank compares that score with your party's submissions for the same day.
Quick summary
Zip is scored on how fast you trace the path through the grid. Your time falls into one of six score brackets (1.0 down to 0.5), or a 0.2 floor if slower than 10 minutes. Backtracks don't lower your score -- they only break ties against players with the same time.
How to score well
- Solve the puzzle as quickly as possible -- 30 seconds or less is a perfect score.
- Plan the path before you start drawing so you avoid backtracking, which costs time.
- Fewer backtracks won't raise your score, but they rank you ahead of anyone who tied your time.
- Even a very slow solve earns 0.2 -- unsolved entries are the only way to receive 0.0.
How ranking works in parties
- Your score is compared to other party members who solved the same day's Zip puzzle.
- Players who tie on time are ordered by fewer backtracks.
- Ties are broken using competition ranking -- if two players tie exactly, they share the same rank.
Example
You solve Zip #329 in 2:17 (137 seconds) with 9 backtracks. Your time falls in the 120-180s bracket, so your normalized score is 0.7 -- the backtracks don't reduce it. A partymate who also finished in 2:17 with 2 backtracks ranks just ahead of you.
How to submit your score
On iOS, tap Share → PuzzleParty after solving. On Android/web, tap the share button, copy the result, and paste it into PuzzleParty.
Technical scoring data
{
"ranking": {
"tie_algorithm": {
"key": "competition_ranking",
"display_name": "Competition ranking"
}
},
"examples": [
"Solving Zip in 0:30 or less earns a normalized score of 1.0 (elite).",
"Solving in 1:00 earns 0.9 -- very fast.",
"Solving in 2:17 (137 seconds) earns 0.7 -- good, regardless of backtracks.",
"Solving in 10:00 earns 0.5 -- slow but scored.",
"Two players finishing in 1:30 are ranked by who used fewer backtracks."
],
"rule_text": "Faster solve times produce better normalized scores. Scoring uses a step-function bracket table: 30 seconds or less earns 1.0, up to 60 seconds earns 0.9, up to 2 minutes earns 0.8, up to 3 minutes earns 0.7, up to 5 minutes earns 0.6, up to 10 minutes earns 0.5. Any solved time slower than 10 minutes earns the minimum solved score of 0.2. Unsolved entries receive 0.0. Backtracks never change the normalized score -- they only break ties in party ranking between players with the same time.",
"edge_cases": [
"Unsolved puzzles always receive a score of 0.0, regardless of time spent.",
"Backtracks NEVER change the normalized score -- they encode as a fractional tiebreaker (backtrack_count * 0.0001) in score_value so they only matter when times are equal.",
"A missing backtrack line in the share text means zero backtracks.",
"The flawless flag is recorded in parsed data but does not affect scoring in V1.",
"Solved entries never score below 0.2, regardless of how slow the time is.",
"Times at exactly a bracket threshold (e.g., exactly 30s, 60s) receive that bracket's score (inclusive)."
],
"measurement": {
"metric_key": "time_seconds",
"metric_label": "Time to solve",
"scoring_type": "time_based"
},
"human_review": {
"checklist": [
"Verify rule_text reflects the time-based scoring behavior without ambiguity.",
"Verify examples are readable and match expected outcomes for the 30s-600s range.",
"Verify edge_cases are clear and non-conflicting, especially that backtracks are a tiebreaker only and the flawless flag is recorded-only."
],
"machine_verifiable_scope": [
"measurement.scoring_type",
"absolute_scoring.method",
"absolute_scoring.solved_floor",
"absolute_scoring.unsolved_score",
"absolute_scoring.brackets",
"ranking.tie_algorithm.key"
]
},
"party_ranking": {
"normalization_summary": "Within a party, players are ranked on Zip by faster completion times first (ties on time are broken by fewer backtracks), with unsolved entries ranked last. Each player earns one point for every party member they beat, plus one. Players who don't solve the puzzle earn zero points for this game."
},
"schema_version": 1,
"absolute_scoring": {
"method": "time_based",
"brackets": {
"30": 1,
"60": 0.9,
"120": 0.8,
"180": 0.7,
"300": 0.6,
"600": 0.5
},
"scoring_type": "time_based",
"solved_floor": 0.2,
"unsolved_score": 0
}
}