diff --git a/ai/bot/elite.go b/ai/bot/elite.go index 95888749..8434d831 100644 --- a/ai/bot/elite.go +++ b/ai/bot/elite.go @@ -111,7 +111,7 @@ func endGameBest(ctx context.Context, p *BotTurnPlayer, endgamePlies int) (*move gameCopy := p.Game.Copy() gameCopy.SetBackupMode(game.SimulationMode) gameCopy.SetStateStackLength(endgamePlies + 1) - gen1 := movegen.NewGordonGenerator(gd, gameCopy.Board(), p.Game.Rules().LetterDistribution(), p.Game.Rules().BingoBonus()) + gen1 := movegen.NewGordonGenerator(gd, gameCopy.Board(), p.Game.Rules().LetterDistribution()) err = p.endgamer.Init(gen1, gameCopy) if err != nil { return nil, err diff --git a/ai/turnplayer/static_player.go b/ai/turnplayer/static_player.go index 8401d2fd..cbecbaa9 100644 --- a/ai/turnplayer/static_player.go +++ b/ai/turnplayer/static_player.go @@ -57,7 +57,7 @@ func AddAIFields(p *turnplayer.BaseTurnPlayer, conf *config.Config, calculators if err != nil { return nil, err } - gen := movegen.NewGordonGenerator(gd, p.Board(), p.Bag().LetterDistribution(), p.Rules().BingoBonus()) + gen := movegen.NewGordonGenerator(gd, p.Board(), p.Bag().LetterDistribution()) gen.SetEquityCalculators(calculators) ret := &AIStaticTurnPlayer{*p, calculators, gen, conf} return ret, nil diff --git a/board/board.go b/board/board.go index af227e32..3bf908f2 100644 --- a/board/board.go +++ b/board/board.go @@ -844,16 +844,16 @@ func (g *GameBoard) formedCrossWord(crossVertical bool, letter tilemapping.Machi // assume the row stays static as we iterate through the letters of the // word. func (g *GameBoard) ScoreWord(word tilemapping.MachineWord, row, col, tilesPlayed int, - crossDir BoardDirection, ld *tilemapping.LetterDistribution, bingoBonus int) int { + crossDir BoardDirection, ld *tilemapping.LetterDistribution) int { // letterScore: var ls int mainWordScore := 0 crossScores := 0 - bonus := 0 + bingoBonus := 0 if tilesPlayed == 7 { - bonus = bingoBonus + bingoBonus = 50 } wordMultiplier := 1 @@ -904,7 +904,7 @@ func (g *GameBoard) ScoreWord(word tilemapping.MachineWord, row, col, tilesPlaye crossScores += ls*letterMultiplier*thisWordMultiplier + cs*thisWordMultiplier } } - return mainWordScore*wordMultiplier + crossScores + bonus + return mainWordScore*wordMultiplier + crossScores + bingoBonus } diff --git a/board/layouts.go b/board/layouts.go index 9ed0889d..eef58cc8 100644 --- a/board/layouts.go +++ b/board/layouts.go @@ -7,15 +7,11 @@ var ( // SuperCrosswordGameBoard is a board for a bigger Crossword game, featuring // even more wingos and blonks. SuperCrosswordGameBoard []string - // CrossplayGameBoard is a board like Crossword but with alternate wingo blonk - // arrangement. - CrossplayGameBoard []string ) const ( CrosswordGameLayout = "CrosswordGame" SuperCrosswordGameLayout = "SuperCrosswordGame" - CrossplayGameLayout = "CrossplayGame" ) func init() { @@ -59,21 +55,4 @@ func init() { ` - " - - " - `, `~ ' = ' = ' ~`, } - CrossplayGameBoard = []string{ - `" = ' = "`, - ` - " " - `, - ` ' ' `, - `= ' - ' =`, - ` ' " " ' `, - ` " ' " `, - ` " " `, - `' - ' ' - '`, - ` " " `, - ` " ' " `, - ` ' " " ' `, - `= ' - ' =`, - ` ' ' `, - ` - " " - `, - `" = ' = "`, - } } diff --git a/config/config.go b/config/config.go index a3a06f2b..4c4c2063 100644 --- a/config/config.go +++ b/config/config.go @@ -40,7 +40,6 @@ const ( ConfigOpenaiApiKey = "openai-api-key" ConfigDeepseekApiKey = "deepseek-api-key" ConfigWooglesApiKey = "woogles-api-key" - ConfigBingoBonus = "bingo-bonus" ConfigAliases = "aliases" ) @@ -114,7 +113,6 @@ func (c *Config) Load(args []string) error { c.BindEnv(ConfigOpenaiApiKey) c.BindEnv(ConfigDeepseekApiKey) c.BindEnv(ConfigWooglesApiKey) - c.BindEnv(ConfigBingoBonus) cfgdir, err := os.UserConfigDir() if err != nil { @@ -168,7 +166,6 @@ func (c *Config) Load(args []string) error { c.SetDefault(ConfigOpenaiApiKey, "") c.SetDefault(ConfigDeepseekApiKey, "") c.SetDefault(ConfigWooglesApiKey, "") - c.SetDefault(ConfigBingoBonus, 50) return nil } diff --git a/data/letterdistributions/english_crossplay b/data/letterdistributions/english_crossplay deleted file mode 100644 index 64495847..00000000 --- a/data/letterdistributions/english_crossplay +++ /dev/null @@ -1,27 +0,0 @@ -?,3,0,0 -A,9,1,1 -B,2,4,0 -C,2,3,0 -D,4,2,0 -E,12,1,1 -F,2,4,0 -G,3,4,0 -H,3,3,0 -I,8,1,1 -J,1,10,0 -K,1,6,0 -L,4,2,0 -M,2,3,0 -N,5,1,0 -O,8,1,1 -P,2,3,0 -Q,1,10,0 -R,6,1,0 -S,5,1,0 -T,6,1,0 -U,3,2,1 -V,2,6,0 -W,2,5,0 -X,1,8,0 -Y,2,4,0 -Z,1,10,0 \ No newline at end of file diff --git a/endgame/negamax/solver.go b/endgame/negamax/solver.go index f31fa413..071e42b2 100644 --- a/endgame/negamax/solver.go +++ b/endgame/negamax/solver.go @@ -360,7 +360,7 @@ func (s *Solver) makeGameCopies() error { s.movegens = []movegen.MoveGenerator{} gaddag := s.stmMovegen.(*movegen.GordonGenerator).GADDAG() for i := 0; i < s.threads-1; i++ { - mg := movegen.NewGordonGenerator(gaddag, s.gameCopies[i].Board(), s.gameCopies[i].Bag().LetterDistribution(), s.gameCopies[i].Rules().BingoBonus()) + mg := movegen.NewGordonGenerator(gaddag, s.gameCopies[i].Board(), s.gameCopies[i].Bag().LetterDistribution()) mg.SetSortingParameter(movegen.SortByNone) mg.SetGenPass(true) mg.SetPlayRecorder(movegen.AllPlaysSmallRecorder) diff --git a/equity/calculators_test.go b/equity/calculators_test.go index c16175d3..652c74f2 100644 --- a/equity/calculators_test.go +++ b/equity/calculators_test.go @@ -87,7 +87,7 @@ func TestEndgameTiming(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) assert.Nil(t, err) - generator := movegen.NewGordonGenerator(gd, bd, ld, 50) + generator := movegen.NewGordonGenerator(gd, bd, ld) tilesInPlay := bd.SetToGame(gd.GetAlphabet(), board.MavenVsMacondo) cross_set.GenAllCrossSets(bd, gd, ld) generator.GenAll(tilemapping.RackFromString("AEEORS?", alph), false) @@ -131,7 +131,7 @@ func TestPreendgameTiming(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) assert.Nil(t, err) - generator := movegen.NewGordonGenerator(gd, bd, ld, 50) + generator := movegen.NewGordonGenerator(gd, bd, ld) tilesInPlay := bd.SetToGame(gd.GetAlphabet(), board.VsOxy) cross_set.GenAllCrossSets(bd, gd, ld) generator.GenAll(tilemapping.RackFromString("OXPBAZE", alph), false) @@ -170,7 +170,7 @@ func TestOpeningPlayHeuristic(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) assert.Nil(t, err) - generator := movegen.NewGordonGenerator(gd, bd, ld, 50) + generator := movegen.NewGordonGenerator(gd, bd, ld) cross_set.GenAllCrossSets(bd, gd, ld) generator.GenAll(tilemapping.RackFromString("AEFLR", alph), false) els, err := equity.NewCombinedStaticCalculator( diff --git a/game/backup.go b/game/backup.go index 5152da03..07207276 100644 --- a/game/backup.go +++ b/game/backup.go @@ -166,7 +166,6 @@ func (g *Game) Copy() *Game { maxScorelessTurns: g.maxScorelessTurns, exchangeLimit: g.exchangeLimit, players: copyPlayers(g.players), - rules: g.rules, // stackPtr only changes during a sim, etc. This Copy should // only be called at the beginning of everything. stackPtr: 0, diff --git a/game/game.go b/game/game.go index e3f54f9d..499d9a89 100644 --- a/game/game.go +++ b/game/game.go @@ -823,7 +823,7 @@ func (g *Game) CreateAndScorePlacementMove(coords string, tiles string, rack str // ScoreWord assumes the play is always horizontal, so we have to // do the transpositions beforehand. score := g.Board().ScoreWord(mw, row, col, tilesPlayed, - crossDir, g.bag.LetterDistribution(), g.rules.BingoBonus()) + crossDir, g.bag.LetterDistribution()) // reset row, col back for the actual creation of the play. if vertical { row, col = col, row diff --git a/game/rules.go b/game/rules.go index d07b4b3a..dad3e3bd 100644 --- a/game/rules.go +++ b/game/rules.go @@ -42,7 +42,6 @@ type GameRules struct { boardname string distname string exchangeLimit int - bingoBonus int } func (g GameRules) Config() *config.Config { @@ -89,10 +88,6 @@ func (g GameRules) ExchangeLimit() int { return g.exchangeLimit } -func (g GameRules) BingoBonus() int { - return g.bingoBonus -} - func NewBasicGameRules(cfg *config.Config, lexiconName, boardLayoutName, letterDistributionName, csetGenName string, variant Variant) (*GameRules, error) { @@ -108,8 +103,6 @@ func NewBasicGameRules(cfg *config.Config, bd = board.CrosswordGameBoard case board.SuperCrosswordGameLayout: bd = board.SuperCrosswordGameBoard - case board.CrossplayGameLayout: - bd = board.CrossplayGameBoard default: return nil, errors.New("unsupported board layout") } @@ -147,12 +140,6 @@ func NewBasicGameRules(cfg *config.Config, exchLimit = 1 } - // Set bingo bonus based on board layout - bingoBonus := cfg.GetInt(config.ConfigBingoBonus) - if boardLayoutName == board.CrossplayGameLayout { - bingoBonus = 40 - } - rules := &GameRules{ cfg: cfg, dist: dist, @@ -163,7 +150,6 @@ func NewBasicGameRules(cfg *config.Config, crossSetGen: csgen, variant: variant, exchangeLimit: exchLimit, - bingoBonus: bingoBonus, } return rules, nil } diff --git a/game/rules_test.go b/game/rules_test.go index ffffe850..464050eb 100644 --- a/game/rules_test.go +++ b/game/rules_test.go @@ -3,8 +3,6 @@ package game import ( "testing" - "github.com/domino14/macondo/board" - "github.com/domino14/macondo/config" "github.com/matryer/is" ) @@ -30,50 +28,3 @@ func TestMaxCanExchange(t *testing.T) { is.Equal(MaxCanExchange(tc.inbag, tc.exchlimit), tc.expected) } } - -func TestBingoBonus(t *testing.T) { - is := is.New(t) - - cfg := config.DefaultConfig() - cfg.Set(config.ConfigBingoBonus, 50) // Set default to 50 - - // Create rules manually - rules := &GameRules{ - cfg: cfg, - bingoBonus: 0, - } - - // Simulate the bingo bonus setting logic from NewBasicGameRules - bingoBonus := cfg.GetInt(config.ConfigBingoBonus) - if board.CrossplayGameLayout == board.CrossplayGameLayout { - bingoBonus = 40 - } - rules.bingoBonus = bingoBonus - - is.Equal(rules.BingoBonus(), 40) // Crossplay overrides to 40 - - // Test other layouts use configured value - bingoBonus = cfg.GetInt(config.ConfigBingoBonus) - if board.CrosswordGameLayout == board.CrossplayGameLayout { - bingoBonus = 40 - } - rules.bingoBonus = bingoBonus - is.Equal(rules.BingoBonus(), 50) // Should use configured value - - // Test custom bingo bonus - cfg.Set(config.ConfigBingoBonus, 35) - bingoBonus = cfg.GetInt(config.ConfigBingoBonus) - if board.CrosswordGameLayout == board.CrossplayGameLayout { - bingoBonus = 40 - } - rules.bingoBonus = bingoBonus - is.Equal(rules.BingoBonus(), 35) // Should use configured value - - // Test Crossplay still overrides to 40 even with custom config - bingoBonus = cfg.GetInt(config.ConfigBingoBonus) - if board.CrossplayGameLayout == board.CrossplayGameLayout { - bingoBonus = 40 - } - rules.bingoBonus = bingoBonus - is.Equal(rules.BingoBonus(), 40) // Crossplay should still be 40 -} diff --git a/movegen/movegen.go b/movegen/movegen.go index fc00c618..d13e1277 100644 --- a/movegen/movegen.go +++ b/movegen/movegen.go @@ -111,7 +111,6 @@ type GordonGenerator struct { quitEarly bool maxTileUsage int maxCanExchange int - bingoBonus int // For top N only: topNPlays []*move.Move @@ -120,7 +119,7 @@ type GordonGenerator struct { // NewGordonGenerator returns a Gordon move generator. func NewGordonGenerator(gd gaddag.WordGraph, board *board.GameBoard, - ld *tilemapping.LetterDistribution, bingoBonus int) *GordonGenerator { + ld *tilemapping.LetterDistribution) *GordonGenerator { gen := &GordonGenerator{ gaddag: gd.(*kwg.KWG), @@ -136,7 +135,6 @@ func NewGordonGenerator(gd gaddag.WordGraph, board *board.GameBoard, placeholder: new(move.Move), maxTileUsage: 100, // basically unlimited maxCanExchange: game.DefaultExchangeLimit, - bingoBonus: bingoBonus, } return gen } @@ -396,7 +394,7 @@ func (gen *GordonGenerator) goOn(curCol int, L tilemapping.MachineLetter, leftstrip, rightstrip int, uniquePlay bool, baseScore, crossScores, wordMultiplier int) { var bingoBonus int if gen.tilesPlayed == game.RackTileLimit { - bingoBonus = gen.bingoBonus + bingoBonus = 50 } if curCol <= gen.curAnchorCol { if gen.board.HasLetter(gen.curRowIdx, curCol) { @@ -484,7 +482,7 @@ func (gen *GordonGenerator) crossDirection() board.BoardDirection { func (gen *GordonGenerator) scoreMove(word tilemapping.MachineWord, row, col, tilesPlayed int) int { - return gen.board.ScoreWord(word, row, col, tilesPlayed, gen.crossDirection(), gen.letterDistribution, gen.bingoBonus) + return gen.board.ScoreWord(word, row, col, tilesPlayed, gen.crossDirection(), gen.letterDistribution) } // Plays returns the generator's generated plays. diff --git a/movegen/movegen_test.go b/movegen/movegen_test.go index ad496ff5..458323e7 100644 --- a/movegen/movegen_test.go +++ b/movegen/movegen_test.go @@ -66,7 +66,7 @@ func TestGenBase(t *testing.T) { board := board.MakeBoard(board.CrosswordGameBoard) dist, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, board, dist, 50) + generator := NewGordonGenerator(gd, board, dist) board.ClearAllCrosses() generator.curAnchorCol = 8 @@ -113,7 +113,7 @@ func TestSimpleRowGen(t *testing.T) { dist, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) for idx, tc := range cases { - generator := NewGordonGenerator(gd, board, dist, 50) + generator := NewGordonGenerator(gd, board, dist) generator.curAnchorCol = tc.curAnchorCol rack := tilemapping.RackFromString(tc.rack, gd.GetAlphabet()) board.SetRow(tc.row, tc.rowString, gd.GetAlphabet()) @@ -136,7 +136,7 @@ func TestGenThroughBothWaysAllowedLetters(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) dist, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, dist, 50) + generator := NewGordonGenerator(gd, bd, dist) generator.curAnchorCol = 9 bd.SetRow(4, " THERMOS A", gd.GetAlphabet()) generator.curRowIdx = 4 @@ -168,7 +168,7 @@ func TestRowGen(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsEd) cross_set.GenAllCrossSets(bd, gd, ld) rack := tilemapping.RackFromString("AAEIRST", gd.GetAlphabet()) @@ -205,7 +205,7 @@ func TestOtherRowGen(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsMatt) cross_set.GenAllCrossSets(bd, gd, ld) @@ -235,7 +235,7 @@ func TestOneMoreRowGen(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsMatt) cross_set.GenAllCrossSets(bd, gd, ld) @@ -265,7 +265,7 @@ func TestGenMoveJustOnce(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsMatt) cross_set.GenAllCrossSets(bd, gd, ld) bd.Transpose() @@ -297,7 +297,7 @@ func TestGenAllMovesSingleTile(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsMatt) cross_set.GenAllCrossSets(bd, gd, ld) @@ -316,7 +316,7 @@ func TestGenAllMovesFullRack(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsMatt) cross_set.GenAllCrossSets(bd, gd, ld) @@ -343,7 +343,7 @@ func TestGenAllMovesFullRackAgain(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsEd) cross_set.GenAllCrossSets(bd, gd, ld) @@ -362,7 +362,7 @@ func TestGenAllMovesFullRackAgain(t *testing.T) { // bd := board.MakeBoard(board.CrosswordGameBoard) // ld := tilemapping.EnglishLetterDistribution(gd.GetAlphabet()) -// generator := NewGordonGenerator(gd, bd, ld, 50) +// generator := NewGordonGenerator(gd, bd, ld) // bd.SetToGame(gd.GetAlphabet(), board.MavenVsMacondo) // cross_set.GenAllCrossSets(bd, gd, ld) // fmt.Println(bd.ToDisplayText(alph)) @@ -382,7 +382,7 @@ func TestGenAllMovesSingleBlank(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsEd) cross_set.GenAllCrossSets(bd, gd, ld) @@ -404,7 +404,7 @@ func TestGenAllMovesTwoBlanksOnly(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsEd) cross_set.GenAllCrossSets(bd, gd, ld) @@ -429,7 +429,7 @@ func TestGenAllMovesWithBlanks(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsJeremy) cross_set.GenAllCrossSets(bd, gd, ld) @@ -465,7 +465,7 @@ func TestSmallMoveRecorder(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsJeremy) cross_set.GenAllCrossSets(bd, gd, ld) generator.SetPlayRecorder(AllPlaysSmallRecorder) @@ -514,7 +514,7 @@ func TestTopPlayOnlyRecorder(t *testing.T) { is.NoErr(err) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, g.Board(), ld, 50) + generator := NewGordonGenerator(gd, g.Board(), ld) generator.SetGame(g.Game) g.RecalculateBoard() generator.SetPlayRecorder(TopPlayOnlyRecorder) @@ -542,7 +542,7 @@ func TestGiantTwentySevenTimer(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsOxy) cross_set.GenAllCrossSets(bd, gd, ld) @@ -564,7 +564,7 @@ func TestGenerateEmptyBoard(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.UpdateAllAnchors() generator.GenAll(tilemapping.RackFromString("DEGORV?", alph), true) @@ -584,7 +584,7 @@ func TestGenerateNoPlays(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsJeremy) cross_set.GenAllCrossSets(bd, gd, ld) @@ -629,7 +629,7 @@ func TestAtLeastOneTileMove(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsMatt) cross_set.GenAllCrossSets(bd, gd, ld) @@ -650,7 +650,7 @@ func TestMaxTileUsage(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) cross_set.GenAllCrossSets(bd, gd, ld) rack := tilemapping.RackFromString("VIVIFIC", alph) @@ -680,7 +680,7 @@ func BenchmarkGenEmptyBoard(b *testing.B) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.UpdateAllAnchors() generator.GenAll(tilemapping.RackFromString("AEINRST", alph), true) } @@ -701,7 +701,7 @@ func BenchmarkGenFullRack(b *testing.B) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsMatt) cross_set.GenAllCrossSets(bd, gd, ld) @@ -721,7 +721,7 @@ func BenchmarkBoardPositionGenFullRackBest(b *testing.B) { is.NoErr(err) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, g.Board(), ld, 50) + generator := NewGordonGenerator(gd, g.Board(), ld) generator.SetGame(g.Game) g.RecalculateBoard() generator.SetPlayRecorder(TopPlayOnlyRecorder) @@ -749,7 +749,7 @@ func BenchmarkBoardPositionGenFullRackAll(b *testing.B) { is.NoErr(err) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, g.Board(), ld, 50) + generator := NewGordonGenerator(gd, g.Board(), ld) generator.SetGame(g.Game) g.RecalculateBoard() elc, err := equity.NewExhaustiveLeaveCalculator("CSW07", DefaultConfig, "") @@ -773,7 +773,7 @@ func BenchmarkJustMovegen(b *testing.B) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) generator.SetPlayRecorder(TopPlayOnlyRecorder) bd.SetToGame(gd.GetAlphabet(), board.VsMatt) cross_set.GenAllCrossSets(bd, gd, ld) @@ -798,7 +798,7 @@ func BenchmarkAtLeastOneTileMove(b *testing.B) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsMatt) cross_set.GenAllCrossSets(bd, gd, ld) b.ReportAllocs() @@ -825,7 +825,7 @@ func BenchmarkGenOneBlank(b *testing.B) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsJeremy) cross_set.GenAllCrossSets(bd, gd, ld) @@ -845,7 +845,7 @@ func BenchmarkGenBothBlanks(b *testing.B) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) bd.SetToGame(gd.GetAlphabet(), board.VsJeremy) cross_set.GenAllCrossSets(bd, gd, ld) @@ -865,7 +865,7 @@ func BenchmarkGenBothBlanksSmallPlayRecorder(b *testing.B) { bd := board.MakeBoard(board.CrosswordGameBoard) ld, err := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) is.NoErr(err) - generator := NewGordonGenerator(gd, bd, ld, 50) + generator := NewGordonGenerator(gd, bd, ld) generator.SetPlayRecorder(AllPlaysSmallRecorder) bd.SetToGame(gd.GetAlphabet(), board.VsJeremy) cross_set.GenAllCrossSets(bd, gd, ld) @@ -881,7 +881,7 @@ func TestGenExchange(t *testing.T) { bd := board.MakeBoard(board.CrosswordGameBoard) gd, _ := GaddagFromLexicon("NWL20") ld, _ := tilemapping.EnglishLetterDistribution(DefaultConfig.WGLConfig()) - gen := NewGordonGenerator(gd, bd, ld, 50) + gen := NewGordonGenerator(gd, bd, ld) gen.generateExchangeMoves(rack, 0, 0) assert.Equal(t, len(gen.plays), 127) diff --git a/preendgame/peg.go b/preendgame/peg.go index cfcc449d..fd28f2e1 100644 --- a/preendgame/peg.go +++ b/preendgame/peg.go @@ -422,7 +422,7 @@ func (s *Solver) Solve(ctx context.Context) ([]*PreEndgamePlay, error) { var winners []*PreEndgamePlay var err error - s.movegen = movegen.NewGordonGenerator(s.gaddag, s.game.Board(), s.game.Bag().LetterDistribution(), s.game.Rules().BingoBonus()) + s.movegen = movegen.NewGordonGenerator(s.gaddag, s.game.Board(), s.game.Bag().LetterDistribution()) s.movegen.SetGenPass(true) // Don't allow pre-endgame opponent to use more than 7 tiles. s.movegen.SetMaxTileUsage(7) @@ -517,7 +517,7 @@ func (s *Solver) Solve(ctx context.Context) ([]*PreEndgamePlay, error) { // Set a fixed order for the bag. This makes it easy for us to control // what tiles we draw after making a move. g.Bag().SetFixedOrder(true) - mg := movegen.NewGordonGenerator(s.gaddag, g.Board(), g.Bag().LetterDistribution(), g.Rules().BingoBonus()) + mg := movegen.NewGordonGenerator(s.gaddag, g.Board(), g.Bag().LetterDistribution()) err := es.Init(mg, g) if err != nil { return nil, err diff --git a/shell/api.go b/shell/api.go index 041311d1..477a6448 100644 --- a/shell/api.go +++ b/shell/api.go @@ -628,7 +628,7 @@ func (sc *ShellController) endgamePrepare(cmd *shellcmd) (*endgameParams, error) return nil, err } - mg := movegen.NewGordonGenerator(gd, sc.game.Board(), sc.game.Bag().LetterDistribution(), sc.game.Rules().BingoBonus()) + mg := movegen.NewGordonGenerator(gd, sc.game.Board(), sc.game.Bag().LetterDistribution()) err = sc.endgameSolver.Init(mg, sc.game.Game) if err != nil { diff --git a/shell/shell.go b/shell/shell.go index a768f215..15d6beee 100644 --- a/shell/shell.go +++ b/shell/shell.go @@ -398,7 +398,7 @@ func (sc *ShellController) initGameDataStructures() error { return err } - sc.backupgen = movegen.NewGordonGenerator(gd, sc.game.Board(), sc.game.Bag().LetterDistribution(), sc.game.Rules().BingoBonus()) + sc.backupgen = movegen.NewGordonGenerator(gd, sc.game.Board(), sc.game.Bag().LetterDistribution()) sc.rangefinder = &rangefinder.RangeFinder{} sc.rangefinder.Init(sc.game.Game, []equity.EquityCalculator{c}, sc.config) diff --git a/tinymove/conversions/conversions.go b/tinymove/conversions/conversions.go index d64f755d..94b35ce3 100644 --- a/tinymove/conversions/conversions.go +++ b/tinymove/conversions/conversions.go @@ -135,7 +135,7 @@ func TinyMoveToMove(t tinymove.TinyMove, b *board.GameBoard, om *move.Move) { } func TinyMoveToFullMove(t tinymove.TinyMove, bd *board.GameBoard, ld *tilemapping.LetterDistribution, - onTurnRack *tilemapping.Rack, bingoBonus int) (*move.Move, error) { + onTurnRack *tilemapping.Rack) (*move.Move, error) { m := &move.Move{} TinyMoveToMove(t, bd, m) @@ -157,7 +157,7 @@ func TinyMoveToFullMove(t tinymove.TinyMove, bd *board.GameBoard, ld *tilemappin bd.Transpose() } - m.SetScore(bd.ScoreWord(m.Tiles(), r, c, m.TilesPlayed(), crossDir, ld, bingoBonus)) + m.SetScore(bd.ScoreWord(m.Tiles(), r, c, m.TilesPlayed(), crossDir, ld)) if v { bd.Transpose() diff --git a/turnplayer/settings.go b/turnplayer/settings.go index a432a3b7..fc2d90e2 100644 --- a/turnplayer/settings.go +++ b/turnplayer/settings.go @@ -129,7 +129,7 @@ func (opts *GameOptions) SetChallenge(rule string) error { func (opts *GameOptions) SetBoardLayoutName(name string) error { switch name { - case board.CrosswordGameLayout, board.SuperCrosswordGameLayout, board.CrossplayGameLayout: + case board.CrosswordGameLayout, board.SuperCrosswordGameLayout: opts.BoardLayoutName = name default: return fmt.Errorf("%v is not a supported board layout", name)