Implement Scrabble move generator (DAWG) #1

Merged
owner merged 6 commits from feat/scrabble-solver into master 2026-06-01 22:02:56 +00:00
18 changed files with 862 additions and 0 deletions
Showing only changes of commit 6a794bd9e2 - Show all commits
+187
View File
@@ -0,0 +1,187 @@
package scrabble
import (
"bufio"
"os"
"path/filepath"
"strconv"
"strings"
"testing"
"scrabble-solver/board"
"scrabble-solver/internal/dictdawg"
"scrabble-solver/rules"
)
// TestScoreRealGames replays real tournament games recorded in GCG format and checks that
// our scoring reproduces, move for move, the score and running total written in the
// protocol. This validates the scoring engine against canonical play, not invented cases.
//
// The games come from cross-tables.com (annotated self-play) and are stored under
// testdata/. They use the standard English board and SOWPODS, so the test loads the
// committed dawg/en_sowpods.dawg (build it with `make dawg`).
func TestScoreRealGames(t *testing.T) {
finder, err := dictdawg.Load("../dawg/en_sowpods.dawg")
if err != nil {
t.Skipf("need dawg/en_sowpods.dawg (run `make dawg`): %v", err)
}
s := NewSolver(rules.English(), finder)
games, _ := filepath.Glob("testdata/*.gcg")
if len(games) == 0 {
t.Fatal("no GCG games in testdata/")
}
for _, g := range games {
t.Run(filepath.Base(g), func(t *testing.T) { replayGCG(t, s, g) })
}
}
// parsePos decodes a GCG coordinate into a 0-based square and orientation. A leading digit
// means an across (horizontal) play ("11J"), a leading letter means a down (vertical) one
// ("H7"); rows are 1..15 and columns A..O.
func parsePos(p string) (row, col int, dir Direction, ok bool) {
if len(p) < 2 {
return 0, 0, 0, false
}
if p[0] >= '1' && p[0] <= '9' { // number first -> horizontal (across)
i := 0
for i < len(p) && p[i] >= '0' && p[i] <= '9' {
i++
}
if i+1 != len(p) || p[i] < 'A' || p[i] > 'O' {
return 0, 0, 0, false
}
n, _ := strconv.Atoi(p[:i])
return n - 1, int(p[i] - 'A'), Horizontal, true
}
if p[0] >= 'A' && p[0] <= 'O' { // letter first -> vertical (down)
for i := 1; i < len(p); i++ {
if p[i] < '0' || p[i] > '9' {
return 0, 0, 0, false
}
}
n, _ := strconv.Atoi(p[1:])
return n - 1, int(p[0] - 'A'), Vertical, true
}
return 0, 0, 0, false
}
// parseRack splits a GCG rack ("ACEILRT", "?GOORRS") into lowercase letters and a blank
// count, ready for makeRack.
func parseRack(s string) (string, int) {
var letters []rune
blanks := 0
for _, ch := range s {
switch {
case ch == '?':
blanks++
case ch >= 'A' && ch <= 'Z':
letters = append(letters, ch+('a'-'A'))
case ch >= 'a' && ch <= 'z':
letters = append(letters, ch)
}
}
return string(letters), blanks
}
// parseWord turns a GCG word into the newly-placed tiles starting at (row,col) along dir.
// "." marks an existing played-through tile (skipped); a lowercase letter is a blank.
func parseWord(word string, row, col int, dir Direction) []Placement {
var ts []Placement
for _, ch := range word {
if ch != '.' {
switch {
case ch >= 'A' && ch <= 'Z':
ts = append(ts, Placement{Row: row, Col: col, Letter: byte(ch - 'A')})
case ch >= 'a' && ch <= 'z':
ts = append(ts, Placement{Row: row, Col: col, Letter: byte(ch - 'a'), Blank: true})
}
}
if dir == Horizontal {
col++
} else {
row++
}
}
return ts
}
func replayGCG(t *testing.T, s *Solver, path string) {
f, err := os.Open(path)
if err != nil {
t.Fatal(err)
}
defer f.Close()
b := board.New(s.rules.Rows, s.rules.Cols)
total := map[string]int{}
var last Move // the last applied play, undone by a phony withdrawal ("--")
plays := 0
sc := bufio.NewScanner(f)
for sc.Scan() {
line := sc.Text()
if !strings.HasPrefix(line, ">") {
continue // pragma or note
}
colon := strings.Index(line, ":")
player := line[1:colon]
toks := strings.Fields(line[colon+1:])
if len(toks) < 2 {
continue
}
// score = the +N/-N token; cumulative = the last token.
want, _ := strconv.Atoi(strings.TrimPrefix(toks[len(toks)-2], "+"))
cumul, _ := strconv.Atoi(toks[len(toks)-1])
switch row, col, dir, ok := parsePos(toks[1]); {
case ok: // a regular play: RACK POS WORD +SCORE CUMUL
ts := parseWord(toks[2], row, col, dir)
m, err := s.ScorePlay(b, dir, ts)
if err != nil {
t.Fatalf("%s: ScorePlay %q at %s: %v", path, toks[2], toks[1], err)
}
if m.Score != want {
t.Errorf("%s: %q at %s scored %d, want %d", path, toks[2], toks[1], m.Score, want)
}
// A dictionary-valid play must also be produced by the generator from the
// player's rack; phonies (not in SOWPODS) are correctly never generated.
if _, verr := s.ValidatePlay(b, dir, ts); verr == nil {
key, found := moveKey(dir, ts), false
for _, mv := range s.GenerateMoves(b, makeRack(parseRack(toks[0])), Both) {
if mv.Key() == key {
found = true
if mv.Score != want {
t.Errorf("%s: generated %q at %s scored %d, want %d", path, toks[2], toks[1], mv.Score, want)
}
break
}
}
if !found {
t.Errorf("%s: generator did not produce %q at %s from rack %s", path, toks[2], toks[1], toks[0])
}
}
Apply(b, m)
last = m
total[player] += m.Score
plays++
case toks[1] == "--": // a challenged-off phony: undo the previous play
for _, p := range last.Tiles {
b.Set(p.Row, p.Col, 0)
}
last = Move{}
total[player] += want
default: // pass, exchange, challenge bonus, time penalty, end-game rack adjustment
total[player] += want
}
if total[player] != cumul {
t.Errorf("%s: %s running total %d, want %d (after %q)", path, player, total[player], cumul, line)
}
}
if err := sc.Err(); err != nil {
t.Fatal(err)
}
if plays == 0 {
t.Fatalf("%s: no plays parsed", path)
}
t.Logf("%s: %d scored plays, final totals %v", path, plays, total)
}
+38
View File
@@ -0,0 +1,38 @@
#player1 Thomas_Reinke Thomas Reinke
#player2 Charles_Reinke Charles Reinke
>Thomas_Reinke: BCFLPYY 8H FLYBY +40 40
#note Club game, Madison, WI, 3/28/2012. I made a wiseacre comment about not having any vowels here. P.S. check out madisonscrabble.com!
>Charles_Reinke: AEEEEIO -AEEEIO +0 0
>Thomas_Reinke: ?ACEOPT M2 TOECAPs +92 132
#note Scored as 82. The bingo down from the F would have been better.
>Charles_Reinke: DEEEKRV K5 KER.ED +26 26
#note 4K KE(E)VE looks pretty good. If I'm going to play off these letters, might as well do it with L8 YERKED.
>Thomas_Reinke: AEIMRUV I6 VE.ARIUM +68 200
>Charles_Reinke: AEEGISV 13I .AVIE +20 46
#note L1 VIGA is the star play. I looked at the spot, but not hard enough, since I was sort of annoyed at my (mis)fortune at this point.
>Thomas_Reinke: DELQRUU L10 EQU.D +33 233
>Charles_Reinke: DEGGLSS 15H GELDS +41 87
>Thomas_Reinke: AILRRSU 2F RURALIS. +62 295
#note This is the point where Charles is the most pissed.
>Charles_Reinke: GINORST H1 T.OG +21 108
#note I was pretty pissed at this point.
>Thomas_Reinke: CEJNOTZ 4L J.EZ +60 355
>Charles_Reinke: EIINNRS 4A RESININ. +70 178
#note The thought of blocking the O-column with ZINES briefly crossed my mind...
>Thomas_Reinke: ACENNOT O1 CAN.ONET +221 576
#note Scored as 231, this makes up for the 10 point underscore before. Quick quiz: find the other playable bingo.
>Charles_Reinke: ?ADGHIN A1 HoA.DING +158 336
#note Scored as 168. I guess we just like overscoring our triple-triples by 10.
>Thomas_Reinke: AAHMRTU B1 AH +23 599
#note 3A (A)MAH is normally better, but I wanted to keep a scoring tile and leave lines open.
>Charles_Reinke: EIOOOSW C1 WOO. +28 364
>Thomas_Reinke: AMOPRTU 10F POU. +12 611
#note I spent a long time on this, but it's just fine, there's no way to score here.
>Charles_Reinke: BEEIOST M10 BIT. +25 389
#note Probably would have done 3C OBOE had I seen it. I don't think any play wins more than 0%, though.
>Thomas_Reinke: AAMNRTX I2 .X +34 645
>Charles_Reinke: EELOOSW N6 WE +32 421
#note Scored as 31. We were missing a tile in this game so this empties the bag; I made this play knowingly emptying the bag.
>Thomas_Reinke: AAIMNRT 11A MARTIAN +74 719
#note An I was missing from the bag, so Charles' rack of EFLOOST was added to my score. Final recorded score is 739-430.
#rack2 EFLOOST
+29
View File
@@ -0,0 +1,29 @@
#player1 Christopher_Sykes Christopher Sykes
#player2 John_Dafoe John Dafoe
>Christopher_Sykes: AADHNRV 8G VAH +18 18
#note I was hoping John would challenge this off and give me an E for VERANDAH.
>John_Dafoe: DEHINRS J2 HINDERS +81 81
>John_Dafoe: DEHINRS -- -81 0
>Christopher_Sykes: ?AADENR G8 .ERANDAs +64 82
#note I played this to put an S at G15 that would be there for me after John played a legit bingo.
>John_Dafoe: DEHINRS 7H NERDISH +71 71
>Christopher_Sykes: ACEIKTW 15A WACKIE.T +239 321
>John_Dafoe: AELZ K3 LAZE. +30 101
>Christopher_Sykes: EEILNPU 10E PE.ILUNE +64 385
>John_Dafoe: AEGILRS 4H REG.LIAS +72 173
>John_Dafoe: AEGILRS -- -72 101
>Christopher_Sykes: COOOUVY E7 COY.OU +26 411
>John_Dafoe: AEGILRS 5H GLA.IERS +68 169
>Christopher_Sykes: EINOOTV 13G .EVOTION +82 493
>John_Dafoe: IJOT N10 JOI.T +56 225
>Christopher_Sykes: EGGMOQS O1 MOGG. +33 526
#note Phoney, not deliberate. It's hard to remember those extra-G four letter words sometimes.
>John_Dafoe: EIMT 8L TIME +33 258
>Christopher_Sykes: AAEQSWY 14E AW. +29 555
>John_Dafoe: APX 12J PAX +48 306
>Christopher_Sykes: ABEQSSY 15K ABYSS +52 607
>John_Dafoe: INRT 8A NITR. +18 324
>Christopher_Sykes: EEINOQU B10 QUINO. +70 677
>John_Dafoe: DEFO H1 DEFO. +33 357
>Christopher_Sykes: ?BEERRU 1A dEBURRE. +83 760
>Christopher_Sykes: (DFLT) +16 776
+41
View File
@@ -0,0 +1,41 @@
#player1 Mike Mike
#player2 Cheri_Eder Cheri Eder
>Mike: ADKNR H8 DRANK +30 30
>Cheri_Eder: QUY 10F QU.Y +36 36
>Mike: ??AORST 8A ASsORTe. +74 104
#note Could have made a few more points on the J column, but I wanted to keep the board wide open.
>Cheri_Eder: AE I10 .EA +14 50
>Mike: JU F6 JU. +26 130
>Cheri_Eder: NOT G5 TON. +16 66
>Mike: ABEHLOP 13I HOPABLE +100 230
#note I was hopable that she wouldn't challenge, or that it might be good - whichever came first. :-)
>Cheri_Eder: ABCDEFG -ABCDE +0 66
>Mike: OWW 14J WOW +39 269
>Cheri_Eder: EGN O12 G.NE +21 87
>Mike: DDEILMS 15E MIDDLES +94 363
>Cheri_Eder: DEEGIOV - +0 87
#note Challenged POS
>Mike: AGOTV 14B GAVOT +30 393
>Cheri_Eder: ETZ B6 ZE.T +33 120
>Mike: EEF H4 FEE +22 415
>Cheri_Eder: IO 11E OI +15 135
>Mike: DEP I3 PED +18 433
#note Still trying to keep the board open
>Cheri_Eder: ENOS J8 NOSE +28 163
>Mike: AEFLNRU 2G FLANEUR +69 502
>Cheri_Eder: HIT 15A HIT +23 186
>Mike: V L12 V.. +18 520
>Cheri_Eder: EX 12D EX +27 213
>Mike: EGI 1F GIE +23 543
>Cheri_Eder: AACCRRR -AARRR +0 213
>Mike: ACIMNOT M2 .OMANTIC +82 625
#note This is where I started to believe this game could be very special
>Cheri_Eder: ACR C5 CAR. +20 233
>Mike: BY 10A BY +40 665
>Cheri_Eder: IR 4K RI. +10 243
>Mike: ILRSU N1 US +26 691
>Cheri_Eder: AII N6 AI +10 253
>Mike: ILR 8L L.RI +18 709
#note My highest game ever and largest spread. Sorry Cheri!
>Mike: (I) +2 711
+37
View File
@@ -0,0 +1,37 @@
#player1 Morris_Greenberg Morris Greenberg
#player2 Ted_Blevins Ted Blevins
>Morris_Greenberg: DEILNRT 8C TENDRIL +68 68
>Ted_Blevins: AEILORV F1 OVERLAI. +72 72
#note Darn, he blocked EXPE(N)dER.
>Morris_Greenberg: ?EEEPRX 1A REEXP.sE +266 334
>Ted_Blevins: ARWZ - +0 72
#note Ted was kind of forced to challenge.
>Morris_Greenberg: CEJMRTU 5D MU.CT +18 352
#note Just to be extra safe, no insane double-doubles.
>Ted_Blevins: ARWZ 3C WAR.Z +54 126
>Morris_Greenberg: DEEGJRU 2H REJUDGE +116 468
#note Misscored as 114.
>Ted_Blevins: AGILNOT - +0 126
#note Challenged again.
>Morris_Greenberg: AEFHINT 1N FA +20 488
#note I didn't really want to block this lane because I was now going for the record, but I couldn't see anything close that didn't block it.
>Ted_Blevins: AGILNOT C6 TO.ALING +72 198
#note (I)NTAGLIO
>Morris_Greenberg: BCEHINT 7H BENTHIC +73 561
>Ted_Blevins: AINP 3K PAIN +31 229
>Morris_Greenberg: EEINOOS 4C OI +19 580
#note I managed to miss OOGENIES.
>Ted_Blevins: AFMO 9I FOAM +23 252
>Morris_Greenberg: EEINOSU L9 .OUE +12 592
>Ted_Blevins: GIW 12A WI.G +24 276
>Morris_Greenberg: DEEINSV 13F ENDIVES +70 662
>Ted_Blevins: AQSU A8 SQUA. +51 327
>Morris_Greenberg: HKNORSY 4J YOK +41 703
#note Maybe I should play HON(E)Y to fish for (SQUAW)KER and create a nice S lane. HY(D)RO is also nice.
>Ted_Blevins: AOTY H11 TO.AY +30 357
>Morris_Greenberg: DHLNRSS M6 L.NS +16 719
#note Blocking I(C)EBOATs. However, the better block is SH(O)RLS 10J, to leave D(E)N/(REEXPOsE)D next turn.
>Ted_Blevins: ?ABEIOT 15B OBEsIT. +12 369
>Morris_Greenberg: DHRS 12K H.RDS +15 734
#note I was only 95% sure of H(U)RDS, and I didn't want to phony on this board. Regardless, if I want to go for straight up high score instead of best endgame, (A)DS/(REJUDGE)D/(PAIN)S O1 gets 29 points.
>Morris_Greenberg: (A) +2 736
+36
View File
@@ -0,0 +1,36 @@
#player1 Evans_Clinchy Evans Clinchy
#player2 Walker_Willingham Walker Willingham
>Evans_Clinchy: EELOOTU -EOOU +0 0
>Walker_Willingham: EEIINRU -EIU +0 0
>Evans_Clinchy: AEGILNT 8F ELATING +70 70
>Walker_Willingham: ADEIKNR E6 DARKEN +31 31
>Evans_Clinchy: ?IIRTTU K4 TRIU.ITy +78 148
>Evans_Clinchy: ?EGILOS (challenge) +5 153
>Walker_Willingham: ADEINUZ 6D A.Z +33 64
>Evans_Clinchy: ?EGILOS 12A GLIOSEs +80 233
>Walker_Willingham: DEEINOU G5 OE +16 80
>Evans_Clinchy: AEHMORT A8 ETHO.RAM +176 409
>Evans_Clinchy: ACELOUW (challenge) +5 414
>Walker_Willingham: DEINOUV H1 ENVOID +51 131
>Walker_Willingham: DEINOUV -- -51 80
>Evans_Clinchy: ACELOUW 4I OU.LAW +18 432
>Walker_Willingham: DEINOUV N2 VO.ED +32 112
>Evans_Clinchy: ACDEEMN B2 MENACED +89 521
>Walker_Willingham: CIINOOU A1 COO +21 133
>Evans_Clinchy: AAEIRUV 1L VIAE +46 567
>Walker_Willingham: GIINOSU 10A .I +7 140
>Evans_Clinchy: ABEJLRU M3 J.B +46 613
>Walker_Willingham: GINOSUY O5 YOGI +35 175
>Evans_Clinchy: AAELRUY L11 AYU +13 626
>Walker_Willingham: BDEINSU 14J BUSED +35 210
>Evans_Clinchy: AELNNRS C11 L.N +6 632
>Walker_Willingham: HINQRTX N8 QIN +25 235
>Evans_Clinchy: AEFFNRS 10E .FF +17 649
>Walker_Willingham: EHIRTTX M9 XI +36 271
>Evans_Clinchy: AENRRSW 15F WARREN +33 682
>Walker_Willingham: EHPPRTT M13 H.P +26 297
>Evans_Clinchy: SS 9M ..S +19 701
>Walker_Willingham: EPRTT 3G REP +16 313
>Evans_Clinchy: S 6D ....S +15 716
#note 720! As of this writing, the 13th highest score in tournament Scrabble history. Pretty cool!
>Evans_Clinchy: (TT) +4 720
+40
View File
@@ -0,0 +1,40 @@
#player1 Steven Steven Alexander
#player2 Elizabeth Elizabeth Wood
#description 2017-07-04 Lake Oswego OR club game 2
#comment date="2017-07-04" author="Steven Alexander"
#lexicon TWL15
>Steven: DEENTUU 8H UNDUE +14 14
>Elizabeth: IMO 7H MOI +16 16
>Steven: CEHORTY 6I CHERTY +50 64
>Elizabeth: BCU K3 CUB. +16 32
>Steven: EEFIIOO -EIIOOF +0 64
>Elizabeth: FTT 4J T.FT +14 46
>Steven: AEEELUY 3K .EE +19 83
>Elizabeth: AI 5H AI +8 54
>Steven: AEILSUY 4C EASILY +35 118
>Elizabeth: EIRW E2 WI.ER +16 70
>Steven: AAEEPQU 6B QUA.E +36 154
>Elizabeth: AKNS A6 SANK +39 109
>Steven: AEIIOPR 2M POI +15 169
>Elizabeth: GLN O1 L.NG +21 130
>Steven: AEHIORS 7C HI +20 189
>Elizabeth: JOW 3A JOW +36 166
>Steven: AEOORRS A1 RA. +30 219
>Elizabeth: DEGLRT B2 G.T +24 190
>Elizabeth: DEGLRT -- -24 166
>Steven: ?AEOORS B9 AEROSOl +72 291
>Elizabeth: DEGLRT C9 TRED +21 187
>Elizabeth: DEGLRT -- -21 166
>Steven: ABDEERZ 15A B.AZERED +311 602
>Elizabeth: DEGLRT 12A G.RT +14 180
>Elizabeth: DEGLRT -- -14 166
>Steven: ?FIILOO 7L OI +9 611
>Elizabeth: DEGLRT 12A G.LD +16 182
>Steven: ?FGILNO 14G FOILiNG +70 681
>Elizabeth: ETV L12 VE.T +16 198
>Steven: AIMNOTT 2A .M +16 697
>Elizabeth: EVX 11K VEX +34 232
>Steven: AAINOTT 15L .OIT +15 712
>Elizabeth: DNPRS H12 PR.. +10 242
>Steven: AANT N9 ANTA +20 732
>Steven: (DNS) +8 740
+29
View File
@@ -0,0 +1,29 @@
#player1 David David Poder
#player2 Bruce Bruce D'Ambrosio
>David: ?DEEEMS 8H SEEDMEn +74 74
>Bruce: OVW 7G VOW +28 28
>David: AILNPSU F6 PAULINS +77 151
>Bruce: HI 7M HI +19 47
>David: BBIJ 12B JIBB. +32 183
>Bruce: CNO 13A CON +23 70
>David: FFO 6I OFF +23 206
>Bruce: IRTUV E2 VIRTU +20 90
>David: EGU 4D G.UE +10 216
>Bruce: LT B12 ..LT +22 112
>David: AZ 6N ZA +62 278
>Bruce: AEEILUY -AEEILUY +0 112
>David: ?AAEERS 15A S.EARAtE +122 400
>Bruce: AD 14F DA +15 127
>David: EILOPRT 3G POLITER +83 483
>Bruce: ADEIMRT 13G READMIT +77 204
>David: IQ 2J QI +64 547
>Bruce: NU 14K UN +8 212
>David: AEKT 15L KETA +51 598
>Bruce: GO H1 GO. +12 224
>David: HLORW 1K WHORL +51 649
>Bruce: Y I5 Y... +10 234
>David: EX 4K EX +43 692
>Bruce: AEINRST 10F .NERTIAS +60 294
>David: ACDEGNO 12L DANG +36 728
>Bruce: INOY D6 YONI +16 310
>Bruce: (CEO) +10 320
+29
View File
@@ -0,0 +1,29 @@
#character-encoding UTF-8
#player1 David_Firstman David Firstman
#player2 Zombywoof Zombywoof
>David_Firstman: CEIOPRS 8D COPIERS +78 78
>Zombywoof: AAELORW D8 .LAWER +22 22
>David_Firstman: ?AEGILT H8 .GALITEs +77 155
>Zombywoof: AABDFGO G12 GAB +17 39
>David_Firstman: AIJNOUY J6 JU. +26 181
>Zombywoof: AADFHOR C10 FARAD +34 73
>David_Firstman: AINOSVY 15H .YNOVIAS +101 282
>Zombywoof: EEHKNOO 10F KO. +17 90
>David_Firstman: ?EHINSX E11 EX +40 322
>Zombywoof: EEHNOQT K5 HON +23 113
>David_Firstman: ?HIINPS O8 kINSHIP. +98 420
>Zombywoof: EEEQTTV B13 VET +24 137
>David_Firstman: DMNORUW L4 MOW +34 454
>Zombywoof: EEOOQTT M2 TOOT +18 155
>David_Firstman: ACDENRU 2H UNCRA.ED +84 538
>Zombywoof: EEFLQTZ G7 Q. +21 176
>David_Firstman: AABEMOT 1H MA +26 564
>Zombywoof: EEFLTUZ 1N FE +29 205
>David_Firstman: ABDEORT 3B ABORTED +78 642
>Zombywoof: ELLSTUZ 11J LUTZE. +30 235
>David_Firstman: EENNRUY 4A EYEN +29 671
>Zombywoof: DGIIILS A14 GI +20 255
>David_Firstman: EINRU M11 .IN +24 695
>Zombywoof: DIILS 2A ID +20 275
>David_Firstman: ERU F3 .RUE +6 701
>David_Firstman: (ILS) +6 707
+49
View File
@@ -0,0 +1,49 @@
#character-encoding UTF-8
#player1 Samuel_Kaplan Samuel Kaplan
#player2 Samuel_Moch Samuel Moch
>Samuel_Kaplan: EENSTUZ 8G ZEN +24 24
>Samuel_Moch: DIILOOV 7I OVOLI +13 13
#note Thanks to Sam for providing his racks. I like OVOLI better than 9I or 7I OVOID since OVOLIS* isn't good and he gives back way fewer points to me.
>Samuel_Kaplan: EHOSTUW 8M TOW +20 44
#note This play is not great statically, but it sims fairly well. If I'm not going to see M3 OUTW(I)SH for 34, which flushes out all of the bad tiles, I could probably just go with G6 WU(Z) if I really wanted to keep the board bad for him or L4 WHO(L)E for a few more points but keeping a slightly worse leave that does not preserve scoring power. TOW sims slightly worse than WHOLE since the H gets along nicely with the W, but that combination is weakened by keeping the U to go with it. I'd probably do WHOLE in a do-over since WUZ blocks off the bottom left of the board, and OVOLI actually blasted it open nicely.
>Samuel_Moch: ADGIILS M4 DIG..ALIS +62 75
#note Wow. That is a nice find. I don't think I would have spotted that. Kudos!
>Samuel_Kaplan: EHJNRSU 12I JEHU. +30 74
#note I did not think about the DIGITALISE hook just because those words are pronounced very differently. 13L JEHU easily reigns supreme. #hookrecognitionlarge
>Samuel_Moch: ?ACNOPS 5H CANOP.eS +72 147
#note Lol. He's got his bingo bango no matter what. But the only difference is I'm down less if I realized DIGITALISE could have been formed.
>Samuel_Kaplan: AEENORS 13E ARENOSE +76 150
#note And not seeing DIGITALISE bites me again since ARENOSE would have played for so many more at 13H with DIGITALISES (assuming it does not get blocked)! It's very rare that you seen an 11 on the board. Luckily he didn't see it either.
>Samuel_Moch: DEFHIKQ O1 KIEF. +48 195
#note This is his best play.
>Samuel_Kaplan: EEIIPRT L3 PI. +20 170
#note Maybe H1 PIER(C)E?
>Samuel_Moch: DEHQRRY 2N Q. +22 217
>Samuel_Kaplan: CEEIRTV 12A CIVET +28 198
#note This time, I would not have made a play with the DIGITALISE hook even if I had seen it. The problem with making a play there is it doesn't open much and allows him to outrun me easily. CIVET does a nice job of forking vertical lines such that the board will be that much harder for him to block. For this reason, I'm fine with CIVET. 12A VERITE might be 2 more, but CIVET at least opens the board in a way that's not going to give back so many points to him and preserves the board shape that I'm looking for in a better fashion.
>Samuel_Moch: DEEHRRY 14B HERD +20 237
#note I believe that he made a mistake here. This would be reasonable if he had the last S and didn't sacrifice so many points. Like I mentioned earlier, we both missed the DIGITALISE hook all game and EDH would have played at 13M. That said, I think he should play 11D HERRY here. I am not guaranteed to have a good rack after CIVET.
>Samuel_Kaplan: AELNORT 15A TOLE +25 223
#note I read Sam's last play as a potential S setup and would like to address this since he could have also played HERD at 11D for 7 more. If he hits a bingo with the TADS hook, I am going to have a hard time clawing my way back. I can see why LONE sims slightly ahead of TOLE despite there being more Ts unseen as opposed to Ns- ART is a bit of a better leave than ANR. Even with an S specified, 9F TALON tops the bunch in the sim, but I was not comfortable doing that when 14B HERD raised alarm bells. I'm fine with my idea here; ART bingoes a little more often than ANR. It's good to have an A in reserve in case I need to use Row 9 next turn.
>Samuel_Moch: EGMNRRY 9K GR.Y +13 250
#note 13M ERG appears to be worth it here. But that assumes he sees the DIGITALISE hook.
>Samuel_Kaplan: AAINNRR H1 ARNI.A +27 250
#note Yes, I did consider 9F RAN. I didn't like it for the same reason I didn't like leaving Row 15 open on my previous turn: I thought he kept the last S after his placement of HERD. RAN allows high scoring bingoes on Row 10 ending with -ES which would force me to have to open the left side of the board for cheap depending on what he puts on Row 10. It's another situation where I will probably have a hard time coming back if I make the wrong play. ARNICA not only scores 9 more than RAN, which would make it worth it either way, but he also won't be up by enough to fully commit to shutting down the board. The H1 placement does sim ahead of the A8 placement by just a little. I would think about A8 more if I was ahead, but forking horizontal lines was a key driving force while I was behind.
>Samuel_Moch: ABEMNRX 9F MAX +34 284
#note I think this looks good if the DIGITALISE hook was missed.
>Samuel_Kaplan: ?BEFNOR 14G FOB +27 277
#note 2B FReEBO(R)N is not easy to spot, but that's clearly best. The blank was still a clutch draw. #findinglarge
>Samuel_Moch: BEGLNRU 10B BUGLE +22 306
#note I might do 10E BUG here- since shutting down the board is not possible, he should try putting himself in a position to bingo back if I do that on my next turn since my last turn was a bit more aggressive. BUG wins a good 4% more often than BUGLE does.
>Samuel_Kaplan: ?AENRTU 15I sAUNTER +83 360
#note As boring as this play looks, it's obviously better than anything else available. Sometimes those are the plays that win you games.
>Samuel_Moch: EMNORTT 14N MO +18 324
>Samuel_Kaplan: AAIISWY 2F AI.WAY +16 376
#note Picking 2 Is would normally be terrible, but given the positioning of the G in BUGLE, this is actually a huge break since there are no -ING threats to worry about. Sam's last play of MO was a great one since he leaves 2 in the bag, and I will have to permute more combinations to block as many bingo threats as possible since I'm not up by enough to outrun. G2 AIS looks tempting at first since I take out the RNI in ARNICA, but the problem is it still allows 1C UNDER(A)TE if DT is in the bag and 1E DER(A)TTED if NU is in the bag. I missed 1C DENUD(A)TE assuming RT is in the bag, but given that I saw more threats after AIS, I still felt it was incorrect. AIRWAY is the best play not just for spread purposes if he does bingo out, but AIRWAY only allows 5C DENDR(I)TE if TU is in the bag. Champ does confirm that this is my winningest move along with WI(R)Y and WA(R)Y, and I'm proud to have gotten this one right.
>Samuel_Moch: EENRTTU 3E REN.ET +21 345
#note This is a nice play.
>Samuel_Kaplan: DDIS G8 ..S +21 397
#note I correctly determined that this would be 2 more spread points than 11F DID, but I did miss I5 (A)D(ON)IS which is tricky to spot and is several spread points better than ZAS. #visionmedium
>Samuel_Moch: TU 15F UT +8 353
#note This is best. I really thought he was going to beat me for the 1st time after he found a 9 and was averaging nearly 40 points a move through 4 turns. It goes to show that anything can happen and I took advantage of his mistake of 14B HERD. He's tough to play against.
>Samuel_Moch: (DDI) +10 363
+35
View File
@@ -0,0 +1,35 @@
#character-encoding UTF-8
#description Steeltown Scrabble Showdown Round A3 5/31/26
#id io.woogles P5s2MwcXZR5c8A3NfTsG3H
#lexicon NWL23
#game-type classic
#player1 JohnHealy John Healy
#player2 AnthonyJrAnzaldi Anthony Jr Anzaldi
>JohnHealy: FEME 8G FEM +16 16
>AnthonyJrAnzaldi: ULU 7I ULU +9 9
>JohnHealy: VEI J6 V.EI +24 40
>AnthonyJrAnzaldi: DRAPERS L1 DRAPERS +78 87
>JohnHealy: MINGLEY 1F MINGLE. +33 73
>AnthonyJrAnzaldi: ZOO K3 ZOO +43 130
>JohnHealy: VWYITTT -TTT +0 73
>AnthonyJrAnzaldi: CHELA 9C CHELA +20 150
>JohnHealy: WAIVY E5 WAIV. +22 95
>AnthonyJrAnzaldi: AWA D3 AWA +17 167
>JohnHealy: BONY C3 BONY +37 132
>AnthonyJrAnzaldi: G 3K ..G +26 193
>JohnHealy: QUA B1 QUA +29 161
>AnthonyJrAnzaldi: CIS N1 CIS +24 217
>JohnHealy: FOUNTHE K9 FOUNT +21 182
>AnthonyJrAnzaldi: APERIES 14E APERIES +76 293
>JohnHealy: JETTYI 15A JETTY +53 235
>AnthonyJrAnzaldi: NOI H12 NO.I +15 308
>JohnHealy: HOBOTI? 13C BOHO +31 266
>AnthonyJrAnzaldi: RIN 10E RIN +27 335
>JohnHealy: GEALIT? 12A GEAL +22 288
>AnthonyJrAnzaldi: KIT I13 K.T +25 360
>JohnHealy: II??ATE 12G I.sI.uATE +73 361
>AnthonyJrAnzaldi: TENDDRS O8 TEND.D +24 384
>JohnHealy: ODXER 6E .XED +28 389
>AnthonyJrAnzaldi: RS E5 ......S +26 410
>JohnHealy: OR 13M RO. +14 403
>JohnHealy: (R) +2 405
+36
View File
@@ -0,0 +1,36 @@
#character-encoding UTF-8
#player1 Dustin_Dean Dustin Dean
#player2 Judy_Cole Judy Cole
>Dustin_Dean: GUV H7 GUV +14 14
>Judy_Cole: EFI 9F FI.E +12 12
>Dustin_Dean: AHNOSTU 7E HAN.OUTS +64 78
#note best, only bingo
>Judy_Cole: FO 6E OF +31 43
>Dustin_Dean: DEKR L3 DREK. +20 98
>Judy_Cole: IOR K5 RO.I +18 61
>Dustin_Dean: ACDH 5B CHAD +34 132
>Judy_Cole: AIW 3J WA.I +16 77
>Dustin_Dean: ADEJ C3 JE.AD +36 168
>Judy_Cole: ANV 10E VAN +17 94
>Dustin_Dean: TU 3C .UT +10 178
>Judy_Cole: ?EEINSW 11G NEWSIEr +71 165
#note Best is 8A WISE for 41, keeping EN?. Next is N1 EiSWEIN for 81, putting E in the triple lane.
>Dustin_Dean: ?ELMNOT B7 OMENTaL +63 241
#note 12H MOoNLET for 92
>Judy_Cole: ANQT 12A Q.NAT +46 211
>Dustin_Dean: AZ 11D ZA +45 286
>Judy_Cole: BDO A7 BOD +39 250
>Dustin_Dean: OX 13B .OX +43 329
>Judy_Cole: AMRY M9 MA.RY +24 274
>Dustin_Dean: GIPR 13I GRIP. +13 342
>Judy_Cole: BEGINOS 14E BINGOES +73 347
#note best, ahead of N4 BINGOES for 72
>Dustin_Dean: CEE F2 CEE +22 364
>Judy_Cole: EIPRT 15A TRIPE +34 381
>Dustin_Dean: AELORSU 15H ORE +25 389
#note There are 6 winning plays: Best is N7 SAUL, which blocks N8 LEY; the others are J9 RA(S)U(RE), N6 EUROS or ROUES, J9 RA(S)U(RE)S, and N1 OUSEL. ORE and N3 SAUL tie.
>Judy_Cole: EIILLTY N8 LEY +31 412
#note best, all other plays lose
>Dustin_Dean: ALSU N3 SAUL +15 404
#note SAUL for the tie is best, everything else loses. I had 9.5 seconds left on my clock after SAUL.
>Dustin_Dean: (IILT) +8 412
+43
View File
@@ -0,0 +1,43 @@
#character-encoding UTF-8
#player1 Mad_Palazzo Mad Palazzo
#player2 Caleb_Pittman Caleb Pittman
>Mad_Palazzo: ILMO 8G LIMO +12 12
>Caleb_Pittman: BELPRTY 9H TYPER +31 31
#note Why isn't this a word?
>Mad_Palazzo: GHIN J7 H..ING +14 26
>Caleb_Pittman: BEELOTY 12H BO.EY +28 59
#note Just totally missed 8L OBEY. Whoops
>Mad_Palazzo: AHIO 8L OHIA +27 53
>Caleb_Pittman: EIJLTWZ H12 .IZE +45 104
#note Neck and neck with 10L TIZ. Entirely reasonable
>Mad_Palazzo: AIQU K4 QUAI +31 84
>Caleb_Pittman: JLORTUW 14F WU. +23 127
#note Macondo likes 13K WORT, which seems nuts. This is reasonable
>Mad_Palazzo: ?AIORSV 15A VARIcOS. +90 174
>Caleb_Pittman: AEJLORT N7 R.OJA +28 155
#note TOLARJE(V)!!!! I'll never get to play that again as a natural. And for 107 points! Man, oh, man
>Mad_Palazzo: ENTW 13K WENT +24 198
>Caleb_Pittman: EGLLNTV -GLLNV +0 155
#note Never considered 14J VET, which is silly of me. When I exchange, I often exchange too much. I should keep ENT at a minimum
>Mad_Palazzo: CGILN L2 CLING +43 241
>Caleb_Pittman: AEEINPT 2F PATIEN.E +70 225
#note Only bingo
>Mad_Palazzo: CDERSTU 3A CRUSTED +83 324
#note ..There is a 106 point play here
>Caleb_Pittman: AAEFOUX 1G FAX +61 286
#note Forced, unfortunately
>Mad_Palazzo: ADEKL A1 LA.KED +54 378
>Caleb_Pittman: ?ADEEOU 4E ODEA +22 308
#note Fine
>Mad_Palazzo: DFIRT 13B DRIFT +24 402
>Caleb_Pittman: ?ELSTUV N2 SEV +38 346
#note I saw my only bingo, and correctly passed it up for the optimal play.
>Mad_Palazzo: AGMNO B5 MANGO +19 421
>Caleb_Pittman: ?EELSTU A8 aLEE +17 363
#note She made a great last play. Every line is dead. I spent 8 minutes looking for 9s starting with TO. Didn't even bother looking at the F... I mean, what kind of word even ends with a 4 point tile????
Anyway I blocked her only out, guaranteeing an out in 2
>Mad_Palazzo: BNOR 12D BO +21 442
>Caleb_Pittman: STU 5D UTS +19 382
#note Best out
>Caleb_Pittman: (NR) +4 386
+44
View File
@@ -0,0 +1,44 @@
#character-encoding UTF-8
#player1 Caleb_Pittman Caleb Pittman
#player2 Ian_Passfield Ian Passfield
>Caleb_Pittman: ACEGKOP H4 GECKO +28 28
#note Best
>Ian_Passfield: GIOV 5D OGIV. +18 18
>Caleb_Pittman: AAEHIJP 4B HAJ +44 72
#note Obviously
>Ian_Passfield: OTY 3A TOY +27 45
>Caleb_Pittman: AAADEIP 7H .APA +11 83
#note Entirely reasonable
>Ian_Passfield: EF 2A EF +30 75
>Caleb_Pittman: ADEIMWY 8K YAWED +44 127
#note Best
>Ian_Passfield: MTX F4 M.XT +29 104
>Caleb_Pittman: ADILMNO N7 D.MONIAL +76 203
#note I'm stupid. I've had this rack 40 times in Zyzzyva. And it's not like it's been a while; I had it come up 5 days ago!!!! I knew there was something here, but didn't realize it was MELANOID until much later. Sorry, Ian
>Ian_Passfield: AGZ M13 ZAG +50 154
>Caleb_Pittman: EIORRSS O13 SER +24 227
#note Some missed bingoes that I likely should have seen
>Ian_Passfield: HILNRU 15G HURLIN. +36 190
>Caleb_Pittman: FIIORST 6B FIT +24 251
#note Looks good
>Ian_Passfield: W A1 W.. +18 208
>Caleb_Pittman: AIOPRST 9C AIRPOST +75 326
#note Best. Got challenged
>Ian_Passfield: AAOSTTU - +0 208
#note #unsuccessful-challenge
>Caleb_Pittman: AACNORR M3 NARRO. +24 350
#note Was gonna play CARROW* before realizing that that was a Harry Potter villain
>Ian_Passfield: BDU L2 DUB +22 230
>Caleb_Pittman: ?ACDEIS 14A DISCAsE +73 423
#note DIsCASE(D) and CAdDISE(D) are the best bingoes. Couldn't avoid floating the 3x3 without taking a sacrifice
>Ian_Passfield: EOU E9 .OUE +8 238
>Caleb_Pittman: ?EEINQR 12B QuE.NIER +84 507
#note I played this instantly. It's a 21 point error, lol
>Ian_Passfield: EILN N2 LINE +18 256
>Caleb_Pittman: BINOTUV 2I VOI. +10 517
#note I wanted to block his only out while retaining an out. It's better to just take the points with VINO and let him go out
>Ian_Passfield: EEELST 7A LETS +24 280
>Caleb_Pittman: BNTU 11K BUN. +12 529
#note Best
>Ian_Passfield: EE O8 .EE +10 290
>Ian_Passfield: (T) +2 292
+50
View File
@@ -0,0 +1,50 @@
#character-encoding UTF-8
#player1 Jim_Carlton Jim Carlton
#player2 Caleb_Pittman Caleb Pittman
>Jim_Carlton: FHIRT 8D FIRTH +30 30
>Caleb_Pittman: GLOQRVZ 7C VOG +19 19
#note Just totally whiffed on V(I)ZOR. Awful
>Jim_Carlton: AEEIRTW H7 W.EATIER +65 95
#note Didn't even question this. Damn you, Collins!!!
>Caleb_Pittman: DEGLQRZ 10H .DZ +33 52
#note Best, probably
>Jim_Carlton: CEU K10 ECU +24 119
>Caleb_Pittman: EGILMQR 12J Q.IRE +28 80
#note Have to do this, unfortunately
>Jim_Carlton: ADHS O12 SHAD +43 162
>Caleb_Pittman: EGLMRTT E7 ..MLET +18 98
#note Big mistake, missed GL(E)ET and GR(E)ET. Cool though
>Jim_Carlton: IIII -IIII +0 162
>Caleb_Pittman: AGNPRST D11 PANG +22 120
#note I considered PR(E)ST! This is good though
>Jim_Carlton: AISX 15A AXIS +45 207
#note aw man
>Caleb_Pittman: AJKNRST N9 JAK.ST +47 167
#note Best. Got a challenge!
>Jim_Carlton: CGNORUV - +0 207
#note #unsuccessful-challenge
>Caleb_Pittman: CEIINNR I1 CRININE +67 234
#note Feel bad, but this was an intentional phony. CINERIN just didn't play.
>Jim_Carlton: MNOO O7 MOON +29 236
>Caleb_Pittman: DEEEOOY L7 EYED +28 262
#note I thought I got bagged. Anything but! (C)OOEYED is a 20% advantage
>Jim_Carlton: AABELRV 3F VAR.ABLE +78 314
>Caleb_Pittman: AEIOOOO -IOOOO +0 262
#note I deserve this
>Jim_Carlton: EPU 1G PU.E +24 338
>Caleb_Pittman: ?ABEIOU B11 BEAU. +28 290
#note Likely best, sadly
>Jim_Carlton: FNNY 5H F.NNY +22 360
>Caleb_Pittman: ?DIIOOU F8 .OID +21 311
#note If only DOUPIONI were available... This is perfectly good
>Jim_Carlton: OW N6 WO +17 377
>Caleb_Pittman: ?IILOOU 2M OI +6 317
#note Was hoping for something like abOULIA
>Jim_Carlton: ALT O1 ALT +12 389
>Caleb_Pittman: ?EILOOU F2 O.OLI +12 329
#note I can do better, but what's the point, eh?
>Jim_Carlton: ?GRST 13A T.R.S +20 409
#note I gave him an out, whoops
>Caleb_Pittman: ?EU J12 .UEy +14 343
#note Best
>Caleb_Pittman: (G?) +4 347
+51
View File
@@ -0,0 +1,51 @@
#character-encoding UTF-8
#player1 Caleb_Pittman Caleb Pittman
#player2 Lydia_Keras Lydia Keras
>Caleb_Pittman: EEIINSV H7 VIE +12 12
#note yup
>Lydia_Keras: ARV 10F VAR +21 21
>Caleb_Pittman: EGIINRS 7F RE.ISING +66 78
#note yup
>Lydia_Keras: KNT K5 KN.T +16 37
>Caleb_Pittman: ADELNOR I9 LADRONE +70 148
#note yup
>Lydia_Keras: BLOTT 15D BOTTL. +33 70
>Caleb_Pittman: ADDEEEM 12H D.EAMED +26 174
#note Missed ADEEMED, rough. Thought of it, too
>Lydia_Keras: PUY 11K YUP +34 104
>Caleb_Pittman: AEOPUWY 13M POW +33 207
#note PREVISING???
>Lydia_Keras: X N12 ..X +22 126
>Caleb_Pittman: AEMNTUY 15N YA +30 237
#note Perfectly good
>Lydia_Keras: EJ G13 JE. +18 144
>Caleb_Pittman: BEGMNTU G9 B.M +18 255
>Lydia_Keras: FO 6F OF +16 160
>Caleb_Pittman: ?EGNOTU 14L GO. +19 274
#note Boring, but correct
>Lydia_Keras: ILO 8M OIL +12 172
>Caleb_Pittman: ?ENRTTU O8 .UNT +4 278
#note Sorry, FERBAM?
>Lydia_Keras: EF 5E EF +16 188
>Caleb_Pittman: ?CEGRTU F10 .UG +11 289
#note Boring, but good
>Lydia_Keras: HINU 12B HUIN. +18 206
#note This looked bad to me, but I could bingo for more through the H
>Caleb_Pittman: ?ACERTW B8 WATC.ERs +84 373
#note Only bingo
>Lydia_Keras: EO 8A O.E +18 224
>Caleb_Pittman: AIILOQR L4 QI +28 401
#note duh
>Lydia_Keras: AE A14 AE +11 235
>Caleb_Pittman: AHILORS C2 SHOALI.R +79 480
#note Yup. Played this as it was more likely to be challenged than AIRHOLES
>Lydia_Keras: ACDEEIR - +0 235
#note Lo and behold
>Caleb_Pittman: CDEINTZ M3 ZIT +42 522
>Lydia_Keras: ?AAIRSS N2 pASS +37 272
#note The bingoes here are all hard, I'd likely miss them too
>Caleb_Pittman: CDEEN B1 NEED +22 544
#note Blocked the outs, accidentally gave her another
>Lydia_Keras: AIR A1 AR +15 287
>Caleb_Pittman: C 4B ..C +12 556
>Caleb_Pittman: (I) +2 558
+47
View File
@@ -0,0 +1,47 @@
#character-encoding UTF-8
#player1 Caleb_Pittman Caleb Pittman
#player2 Evan_Bialo Evan Bialo
>Caleb_Pittman: AEEIRSY H8 AYE +12 12
>Evan_Bialo: AMP G8 AMP +26 26
>Caleb_Pittman: DEINRST 11A TINDERS +74 86
#note yup
>Evan_Bialo: EFHI A11 .HIEF +45 71
>Caleb_Pittman: ABCFGTX I9 CAB +28 114
#note Looks best
>Evan_Bialo: BDGINO C9 BO.DING +28 99
>Caleb_Pittman: ?EFGSTX 12C .EX +37 151
#note Best
>Evan_Bialo: UV 15C .UV +8 107
>Caleb_Pittman: ?FGIOST J4 FOGIeST +85 236
#note Not a word
>Evan_Bialo: IO D8 OI +7 114
>Caleb_Pittman: DEKNOOW E4 WOODEN +27 263
#note Methinks best, sets up the K
>Evan_Bialo: IQ I3 QI +26 140
>Caleb_Pittman: IIKMRRT H4 KIR +27 290
#note yup
>Evan_Bialo: ?EHIOST 12I SHOrTIE +78 218
#note 1 of 2 bingoes
>Caleb_Pittman: EEIMRTU O12 .MEU +18 308
#note Great
>Evan_Bialo: AORR 4A ARRO. +18 236
>Caleb_Pittman: EEIPRTZ A2 TR.PEZE +54 362
#note Yep
>Evan_Bialo: AAU C2 AU.A +8 244
>Caleb_Pittman: AGILLTV M9 VIT.A +24 386
#note Probably better to just play for equity, but this is fine
>Evan_Bialo: ARW B6 WAR +40 284
>Caleb_Pittman: AEGLLUY 1B GLEY +14 400
#note Just tryna block
>Evan_Bialo: CEL 2C .LEC +19 303
>Caleb_Pittman: ADEJLNU 11K JE. +39 439
#note Best
>Evan_Bialo: LNNOST K4 SNOT +28 331
#note Best
>Caleb_Pittman: ADLNU 7E .UD +19 458
#note I should threaten an out instead, but this is good
>Evan_Bialo: LN 6E .N +8 339
>Caleb_Pittman: ALN 10B L. +8 466
#note Best
>Evan_Bialo: L 7I L.. +4 343
>Evan_Bialo: (AN) +4 347
+41
View File
@@ -0,0 +1,41 @@
#character-encoding UTF-8
#player1 Su_Edwards Su Edwards
#player2 Caleb_Pittman Caleb Pittman
>Su_Edwards: AY H7 YA +10 10
#note love the vert open!
>Caleb_Pittman: ACDEELO I6 COLED +18 18
#note Bad, I overvalue AE. Held for awhile
>Su_Edwards: ACEILRT G8 ARTICLE +64 74
>Caleb_Pittman: AEEGOOW F13 AWE +29 47
#note I can do better. Not by that much, though
>Su_Edwards: EGV E11 VEG +18 92
>Caleb_Pittman: EEFGOOS D12 FEE +27 74
#note GE(E)SE is best
>Su_Edwards: EFNO J9 FOEN +19 111
#note I knew this was phony. But I kept it, for some reason
>Caleb_Pittman: ?GOORRS 11J .RGO +10 84
>Su_Edwards: GIT 15B GIT +13 124
>Caleb_Pittman: ?NORRSZ L11 .ROSZ +50 134
#note Best, especially since it got challenged
>Su_Edwards: ADEIIPY - +0 124
>Caleb_Pittman: ?BIINOR B8 ORBItIN. +82 216
#note Best bingo. But (Z)ORI may be better
>Su_Edwards: AIKN A5 AKIN +30 154
>Caleb_Pittman: DEOORTU N9 OUTRODE +76 292
#note Looks good
>Su_Edwards: ?AAIMST O3 TAMArIS +79 233
>Caleb_Pittman: AAEINTU N4 TUNA +17 309
#note bad
>Su_Edwards: LUV M3 LUV +23 256
>Caleb_Pittman: AEEHIIM O13 HEM +44 353
#note Points.
>Su_Edwards: IJN M7 JIN +40 296
>Caleb_Pittman: AEEIIPY B2 YIPE +20 373
#note Defense
>Su_Edwards: AHP A1 PAH +34 330
>Caleb_Pittman: AEINRWX L6 WAX +48 421
#note Obviously
>Su_Edwards: EOQTU K2 QUOTE +33 363
>Caleb_Pittman: BDEINRS 4B .REBINDS +80 501
#note And that's that
>Caleb_Pittman: (DLS) +8 509