From cd0d6c1c4c895b336bb8b37e25d4cb09e86fb6a8 Mon Sep 17 00:00:00 2001 From: tolelom <98kimsungmin@naver.com> Date: Wed, 25 Mar 2026 16:01:17 +0900 Subject: [PATCH] feat: add daily challenge seed generation Co-Authored-By: Claude Opus 4.6 (1M context) --- game/daily.go | 11 +++++++++++ game/daily_test.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 game/daily.go create mode 100644 game/daily_test.go diff --git a/game/daily.go b/game/daily.go new file mode 100644 index 0000000..2414430 --- /dev/null +++ b/game/daily.go @@ -0,0 +1,11 @@ +package game + +import ( + "crypto/sha256" + "encoding/binary" +) + +func DailySeed(date string) int64 { + h := sha256.Sum256([]byte("catacombs:" + date)) + return int64(binary.BigEndian.Uint64(h[:8])) +} diff --git a/game/daily_test.go b/game/daily_test.go new file mode 100644 index 0000000..8d07d4c --- /dev/null +++ b/game/daily_test.go @@ -0,0 +1,42 @@ +package game + +import ( + "math/rand" + "testing" + + "github.com/tolelom/catacombs/dungeon" +) + +func TestDailySeed(t *testing.T) { + // Same date produces the same seed + seed1 := DailySeed("2026-03-25") + seed2 := DailySeed("2026-03-25") + if seed1 != seed2 { + t.Errorf("same date should produce same seed: got %d and %d", seed1, seed2) + } + + // Different date produces a different seed + seed3 := DailySeed("2026-03-26") + if seed1 == seed3 { + t.Errorf("different dates should produce different seeds: both got %d", seed1) + } +} + +func TestDailyFloorDeterminism(t *testing.T) { + seed := DailySeed("2026-03-25") + + // Generate floor twice with the same seed + floor1 := dungeon.GenerateFloor(1, rand.New(rand.NewSource(seed))) + floor2 := dungeon.GenerateFloor(1, rand.New(rand.NewSource(seed))) + + if len(floor1.Rooms) != len(floor2.Rooms) { + t.Fatalf("room count mismatch: %d vs %d", len(floor1.Rooms), len(floor2.Rooms)) + } + + for i, r1 := range floor1.Rooms { + r2 := floor2.Rooms[i] + if r1.Type != r2.Type { + t.Errorf("room %d type mismatch: %d vs %d", i, r1.Type, r2.Type) + } + } +}