Recent submissions

Comment · 6 months ago
Is the video episode for this up somewhere? It can be hard to find old PBS shows, even from just a few years ago.
Comment · 6 months ago
Comment · 6 months ago
Comment · 6 months ago
Comment · 11 months ago
Yes. You can give pickType a type in TS. Something like pickType<B extends boolean>(b: B): B extends true ? string : number.

I’d love to read a post explaining how TS conditional types are or are not a form of dependent types. Or, I’d like to understand dependent types well enough to write that post.

Comment · 1 year ago
It's open source, take a crack at it! Or file an issue requesting it.

This analysis doesn't make use of the Boggle dice. It assumes that any cell can be any letter. In practice, all high-scoring boards can be rolled with the Boggle dice. My code does assume the letters are A-Z, though, so the Ñ die in Spanish Boggle would require some code changes.

Comment · 1 year ago
Comment · 1 year ago
There are simpler ways to calculate a bound that don’t involve trees. You can read about the sum and max bounds in the WIP paper: https://github.com/danvk/hybrid-boggle/blob/main/paper

There are some examples in these old posts:

- https://www.danvk.org/wp/2009-08-08/breaking-3x3-boggle/inde...

- https://www.danvk.org/wp/2009-08-11/a-few-more-boggle-exampl...

These bounds are pretty effective at finding the global max for 3x3 Boggle, but 4x4 is a lot bigger.

There is a mapping from Boggle optimization to ILP, but I’ve seen no evidence that this is an efficient way to solve it. I’ve been told that branch and cut is usually better than branch and bound, but I don’t know whether it’s applicable to Boggle.

Comment · 1 year ago
I have been surprised that the Boggle code runs about 4x slower on the GCP machine than on my M2 MacBook. I don’t have enough experience running CPU- and RAM-intensive cloud jobs to know whether this is normal.
Comment · 1 year ago
> “As far as I can tell, I’m the only person who is actually interested in this problem,” Vanderkam said.

For context, many people are interested in finding high-scoring Boggle boards, usually via simulated annealing, hillclimbing, or genetic algorithms. But so far as I can tell, I'm the only one interested in _proving_ that a particular board is best. Doing that was the new result here.

Comment · 1 year ago
"Lone coder" here. I reached out to Ollie (the FT reporter) because he'd written a book (Seven Games) about computers and games, so I thought the Boggle story might interest him. It did!
Comment · 1 year ago
Your best bet in that case is to store the dictionary in a Trie or DAWG structure that can be mmapped directly from disk.
Comment · 1 year ago
Sorry, but this doesn’t pass the smell test. The article mentions 200,000 random 4x4 boards/second on a single core on an M2. That’s a ~4GHz chip. So ~20,000 ops/board. There are 200,000 words in the dictionary. You can’t possibly do something for every word in the dictionary, it would be too slow.

It sounds like your Trie implementation had a bug or inefficiency.

Comment · 1 year ago
You can see all the wordlists I used here: https://github.com/danvk/hybrid-boggle/tree/main/wordlists

The proof used ENABLE2K — repeating it for other wordlists would require another ~23,000 CPU hours each.

Comment · 1 year ago
Great! Feel free to reach out -- my email isn't hard to find.

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton