The NLL Immaculate Grid

About a week ago, someone asked me if my NLL stats database could help create an “immaculate grid” game for the NLL. I had never heard of an immaculate grid, so I looked it up. For those of you who are as uninformed as I was, it’s a game where you have a grid of three columns and three rows, and each column and row has a “category”, like players who played for a specific team, or players who have accomplished some statistical feat. The idea is to find a player who matches the categories for both the column he is in and the row he is in, and to do this for all nine combinations of row and column categories.

For example, say we have a column with the category “Played for Colorado Mammoth” and a row that says “Played for Halifax Thunderbirds”, you need to find players who have played for both of these teams. In this case, there are only six matches so you could enter Rhys Duch, Connor Watson, Ryan Benesch, Mike Burke, Stephen Keogh, or Chet Koneczny and you’d be right. For things like “Played with Buffalo Bandits” and “Played with Toronto Rock”, there are 51 players who match both, and there are an amazing 76 players who have played for both the Bandits and the original Knighthawks.

There are nine squares to fill in, and you get nine guesses before you are done. You can fill in any number of player names and then click “Guess”, and you are told how many you got right. Note that you are not told which ones you got right, just the number. The fewer guesses you take to get all nine correct, the better. Of course, there are no prizes except bragging rights.

Like I said, I’d never heard of the game but it’s pretty easy to understand. I knew my database contains enough information to create this game, so I did. It was actually quite simple. Here’s how it works.

I created a Javascript program that reads the database and creates one category for each team it finds. I limited it to those teams who played at least one season after 2000 since the data on older teams (teams like the Washington Wave, Detroit Turbos, Baltimore Thunder, etc.) isn’t always complete. I also added some statistical categories in there, like 1000 points or 400 goals in a career, 100 points or 50 goals in a season, and 6 goals or 10 points in a game. This program picks six random categories (three rows and three columns). For each row/column pair, we make a list of players who match the first category and a separate list of players who match the second category. Then we find the players who appear in both lists. If there is any row/column pair that has no players in common, we throw this option out and start over. For example, the intersection of “Played for Columbus Landsharks” and “Played for Georgia Swarm” contains no players, so any grid containing that combination is thrown out.

Screenshot of NLL Grid

I believe for a baseball immaculate grid game, you are also required to pick different players for each of the nine grid spots, even if one player qualifies more than once. However I relaxed that restriction because the NLL only has 30-odd seasons and a total of a little over 1700 players. One of the grids created while I was testing this contained a column for “Played for Vancouver Warriors” and two of the rows were “Scored 100 points in a season” and “Scored 1000 career points”. The only player who matches both* is Shawn Evans, so the “unique player” restriction would make this grid impossible to solve.

* – This is not true. Mitch Jones played for the Warriors and also scored 100 points in a season, but his 100 points was split over two different teams. This doesn’t negate his accomplishment, but it means that the way I match the categories won’t find it. I could fix it but it’s a lot of work (not for me – the extra work would have to be done every time the site loads which would make it slower for everyone) and Jones is literally the only player in NLL history who falls into that category. I have some ideas on other ways to fix it but for now, we have this restriction.

Back to Javascript. I generate a grid of 6 categories and save the categories in a file, along with a date. I generate grids and dates for each of the next 30 days, making sure we don’t have any repeat grids. I make sure that no grid cells will contain zero players, but we don’t actually store the matches in this file. This is all done on my laptop. I upload this file to the web site. Every 30 days, I’ll need to do this again.

When you go to the web site, I load this file, find the categories for today, and display the grid. You enter the player names, and there’s an autofill feature to help you. When you click Guess, I check how many of the names match the list for that grid cell, and tell you how many matching names you have. If that number is 9, you win. Otherwise I reduce the number of guesses you have left (starting at 9). If that number is now zero, you lose, otherwise we keep going.

If the game is over (you win, you lose, or you click the “Give up” button), we show you which cells contain a correct guess, and display the list of matching players for each cell. We also display a little mini-grid of green and white squares and a Copy button so you can post your results to social media, showing everyone how NLL-savvy you are.

The site uses local storage to keep track of your guesses and whether you completed the game today. If you refresh the page, we’ll remember how many guesses you’ve taken and the names you’ve already entered. We also keep track of how many wins and losses you have, and if you have a winning streak. This is browser- and machine-specific, so if you start the game on your desktop and then move to your phone, it won’t remember your guesses. The only way to fix that is to have some sort of universal login, and force users to authenticate before playing. But that’s a lot of work for me and I suspect there’s not enough benefit for you. Many people would not bother to create a user account and log in every time they want to play, so they just wouldn’t play at all.

But remember that in a few months if someone shows you a screenshot of “50 wins, 0 losses”, or even a fully-green grid for one particular day – they could easily have clicked “Give up” on one browser or machine to get the answers, and then played again on a different browser or machine.

Strategy

The one thing that gets me when dealing with the statistical categories is that the second category is not always as related as you might think. For example, if the column is “Played for Toronto Rock” and “Scored 400 career goals”, I think “OK, Colin Doyle and Josh Sanderson are easy, but no other Rock players come to mind. I don’t think Blaine Manning got to 400 goals in his career, did he?” (Answer: no, he ended up with 307.) But while the “Played for the Rock” thing is important, don’t overthink it. We’re actually looking for players who did two separate things: (1) scored 400 career goals and (2) played for the Rock at some point in their career. We’re not necessarily looking for players who scored 400 with the Rock. So Dan Dawson, Lewis Ratcliff, Ryan Benesch, and Shawn Williams also qualify.

Relocations and rebrandings are ignored, so the Albany Attack, San Jose/Washington/Vancouver Stealths, and Vancouver Warriors are considered five distinct teams. Similarly for the two Swarms, the two Rushes, the original Knighthawks and the Thunderbirds, the Wings/Black Wolves/FireWolves, and so on. Also the “original Philadelphia Wings” and “original Rochester Knighthawks” are distinct from the current Wings and Knighthawks.

“Played for” a team means that a player appeared in at least one regular season or playoff game with that team. Anthony Cosmo was traded to the Minnesota Swarm at one point in his career, but he never actually played a game with them, so that doesn’t count. Similarly, Ryan Benesch was drafted by the San Jose Stealth, but he was traded to the Rock before playing a game with them so he won’t match the “Played for San Jose Stealth” category.

The game is more challenging than you might expect. If you’re trying to think of players who played for both the Saskatchewan Rush and Buffalo Bandits, you may remember Alex Buque or Dan Lintner, but it may also bring up some “Oh right!” moments, like Jeff Shattler and Chris Corbeil. But the older teams can be very tough. There are six players who played for both the Ottawa Rebel and New Jersey Storm – do you remember them? Do the names Mike Benedict, Paul Talmo, or Joe Finstad ring any bells? If you’ve been around the league long enough they might, but I started watching the NLL in 2001 and I don’t recognize those names. On some days, 9/9 won’t be that bad, but on other days, you may struggle to get 5/9.

Good luck!

2023 NLL off-season report, part I

It’s been over two and a half months since the Bandits took home the NLL Cup. Many teams have been busy making changes they deem necessary to be able to do the same next season. Here are some thoughts on some of the bigger moves made in the off-season so far.

Continue reading

2023 NLL Championship

They did it. After losing in both of the last two finals, the Buffalo Bandits got that monkey off their backs and won their first NLL Championship in 15 years. And after a very close game one and losing big in game two, they did it in convincing fashion, destroying the Colorado Mammoth 13-4 in Game three. After losing in their own building to these same Mammoth in game three of last year’s final, the Bandits had no intention of having history repeat itself this year.

Continue reading

2023 NLL Finals: Games one and two

Stop me if you’ve heard this one before. In a higher-scoring game than you might have expected, the Bandits got by the Mammoth by a single goal in game one of the NLL Championship Finals in Buffalo. In game two, the Bandits took a lead in the first half, but the hometown Mammoth came back and won by a few goals. Buffalo took far more penalties than Colorado in that game. Game three will be in Banditland to decide it all.

So, am I talking about the 2022 or 2023 Finals? Yup.

Continue reading

2023 NLL Playoffs and Awards

I spent most of the last 3 weeks on vacation in Italy, and it was fabulous. Of course, you’re not here for details on my trip so let’s get into what I missed: a couple of rounds of playoff action, as well as the announcement of the annual NLL awards nominees. The winners of those awards have been announced this week as well, so I’ll touch on those and how I screwed up my vote on one of them.

I’ve seen none of the playoff games so far, since they all took place starting at 1am Central European Time at the earliest. So other than a few video highlights here and there, all of my comments below are based solely on the game summaries and various comments on the games that I read on twitter. I’m going full boxscore cowboy this week.

Continue reading

2023 NLL Week 22

So the curtains are closed on the 2023 regular season. The Warriors, Desert Dogs, Rush, Wings, FireWolves, Swarm, and Riptide are all done for the year. The playoff curtains open next weekend for the rest, and we’re in for some pretty exciting games. Well, you are in for some exciting games. Details on that below.

Continue reading

Player records in 2023

New league records

Dhane Smith

  • Dhane Smith – 96 assists, beating his own record of 94 from last year. He also sets the assists per game record of 5.33, beating his old 5.22.
  • Jake Withers – faceoff percentage of 78.6%, just edging out Geoff Snider’s 78.4% from 2012.
  • James Barclay wins the “Ice Bath award” with 28 blocked shots, beating Reid Bowering’s 26 from last year.
  • Mitch Jones – 100 turnovers, just beating out Jeff Teat from this year with 97. The former record holder was Mark Matthews with 88 in 2016.
  • Christian Del Bianco – 1080:19 minutes beating his own record of 1074:44 from 2019.
  • The Toronto Rock had a goal differential of +70, beating the 2015 Edmonton Rush who were +64.

New player records

These are players (non-rookies) who beat their own personal bests in a particular stat. Congratulations to all of the players who did that, but I can’t list them all here since there are dozens for each stat. I’ll only list the top few where the player blew the old stat out of the water.

Points

  • Andrew Kew, 106 points, beating 59 in 2022
  • Connor Fields, 112 points, beating 67 in 2022
  • Tanner Thomson, 51 points, beating 10 in 2022
  • Connor Kelly, 68 points, beating 39 in 2020
  • Jeff Teat, 136 points, beating 108 in 2022

Goals

  • Tanner Cook, 32 goals, beating 11 in 2022
  • Connor Fields, 52 goals, beating 32 in 2022
  • Connor Kelly, 35 goals, beating 15 in 2020
  • Jeff Teat, 56 goals, beating 37 in 2022
  • Ethan Walker, 26 goals, beating 8 in 2022

Assists

  • Andrew Kew, 63 assists, beating 27 in 2020
  • Connor Fields, 60 assists, beating 35 in 2022
  • Tanner Thomson, 31 assists, beating 6 in 2022
  • Wes Berg, 69 assists, beating 50 in 2022
  • Ryan Smith, 42 assists, beating 24 in 2022

Loose Balls

Again, I won’t list them all but 20 different players beat their own season best in loose balls by 30 or more.

  • TD Ierlan, 202 LB, beating 111 in 2022
  • Ryan Terefenko, 186 LB, beating 103 in 2022
  • Mitch Ogilvie, 116 LB, beating 40 in 2022
  • Matt Gilray, 154 LB, beating 81 in 2020
  • Max Adler, 66 LB, beating 17 in 2022

Caused Turnovers

  • Eli Salama, 38 CTOs, beating 18 in 2022
  • John Wagner, 33 CTOs, beating 15 in 2020
  • Graeme Hossack, 49 CTOs, beating 34 in 2018
  • Ron John, 20 CTOs, beating 5 in 2022
  • Matt Gilray, 26 CTOs, beating 13 in 2020

Goalie minutes

  • Landon Kells, 863:43, beating 10:01 in 2022
  • Rylan Hartley, 1046:58, beating 453:54 in 2022
  • Chris Origlieri, 386:59, beating 94:16 in 2022
  • Nick Damude, 971:38, beating 747:38 in 2022

2023 NLL Week 21

We’re almost there… There are only six games left in the 2023 NLL season, and some playoff decisions have yet to be made. Rochester clinched their spot this past weekend, while the Wings were eliminated. The Bandits locked up first in the East while the Seals did the same in the West. Halifax and Georgia are still fighting for the last spot, and how awesome is it that they play each other on the last day of the season to decide it?

Continue reading

2023 NLL Week 20

The playoff picture in the West is almost set – we know the four teams who will be in the post-season. In are the Seals, Roughnecks, PCLC, and Mammoth. The top two will be the Seals and Roughnecks but we don’t know the order, and third and fourth will be PCLC and the Mammoth, but we don’t know the order.

The East is less set. Similar to the West, we know the top two will be the Rock and Bandits, and next week’s matchup in Banditland will decide the order. But the other two spots are up for grabs. It could be Halifax/Rochester, or Rochester/Halifax, or Rochester/Georgia, or Georgia/Halifax, or Georgia/Philadelphia, or Halifax/Philadelphia, or possibly others. We could have all four of those teams tied at 9-9, which case I believe we’d have Halifax 3rd and Philadelphia 4th.

There are only 13 games left in the 2023 regular season, but still lots to be decided.

Continue reading

2023 NLL Week 19

Once again, I wasn’t able to see any games this past weekend, so this week’s report will be short. Kudos to the FireWolves for finally ending their losing streak and taking down the Knighthawks and to the surging Swarm for taking down the Rush.

Continue reading