printf :: c_func(format *c_char, ...) c_int PlayerID :: distinct u32 Tier :: enum(u8) { bronze = 1 silver gold } Player :: struct { id PlayerID name *c_char tier Tier score i32 streak i32 active bool } tier_bonus :: func(tier Tier) i32 { if tier == .gold { return 30 } else if tier == .silver { return 15 } return 5 } projected_score :: func(player Player) i32 { total i32 = player.score total += tier_bonus(player.tier) if player.active and player.streak > 2 { total += player.streak * 3 } return total } apply_decay :: func(players []mut Player) void { for players |@player| { if !player.active { player.score -= 4 } } } best_player :: func(players []mut Player) ?@mut Player { best ?@mut Player = none best_score i32 = 0 for players |@player| { score :: projected_score(player^) if best |_| { if score > best_score { best = player best_score = score } } else { best = player best_score = score } } return best } main :: func() i32 { players [4]mut Player = [ Player { id = PlayerID(1), name = "Ada", tier = .gold, score = 41, streak = 4, active = true }, Player { id = PlayerID(2), name = "Ken", tier = .silver, score = 56, streak = 1, active = true }, Player { id = PlayerID(3), name = "Edsger", tier = .bronze, score = 64, streak = 0, active = false }, Player { id = PlayerID(4), name = "Grace", tier = .gold, score = 33, streak = 5, active = true }, ] apply_decay((&players)[..]) for (&players) |@player, index| { score :: projected_score(player^) _ = printf("%d: %s projected=%d\n", index, player.name, score) } if best_player((&players)[..]) |winner : projected_score(winner^) >= 80| { _ = printf("winner: %s\n", winner.name) return 0 } return 1 }