Pressletter
Letterpress is a fantastic game for iOS written by Loren Brichter. Pressletter is a gem that solves Letterpress boards using an included plaintext dictionary of words.
Installation
global install
To install pressletter to your system, run:
$ gem install pressletter
bundler
If you're using Bundler, add the pressletter gem to your Gemfile:
source 'https://rubygems.org'
gem 'pressletter'
and then run:
$ bundle install
Inside your Bundler project, the binary can then be accessed with bundle exec pressletter
.
Example
Here's what a board looked like in a game I played with @steveklabnik:
Using the pressletter gem, you can search for playable words by providing the 25 letters on the game board (even any repeats, since the game rules stipulate that each letter can only be used as many times as it appears on the board).
For instance, the letters in the provided screenshot are: E I P T C T B N T Y M E I P H O X V I T K M Z I B
.
command-line
The simplest way to invoke the gem is using the pressletter
binary from the command line.
You can pass the candidate letters as a contiguous string argument:
$ pressletter eiptctbntymeiphoxvitkmzib
Pressletter is also friendly to piped (and whitespace and uppercase) input:
$ echo "E I P T C T B N T Y M E I P H O X V I T K M Z I B" | pressletter
Finally, if an argument isn't passed in, pressletter will wait for you to interactively type in the letters:
$ pressletter
Please enter candidate Letterpress letters, then press <return>:
E I P T C T B N T Y M E I P H O X V I T K M Z I B
In each case, the results will print in order of largest-to-smallest length (with secondary alphabetical order for words of the same length). The output looks like:
$ pressletter eiptctbntymeiphoxvitkmzib
COMPETITIVITE
BIOETHICIEN
...
XI
Ruby
You can, of course, also look for solutions using pure ruby. The public API is exceedingly simple:
Pressletter.solve(letters[, config])
For input, all that's needed is a string or array of candidate letters. A config object that responds to dictionary_location
with a path of a dictionary file can also be optionally provided. An array (sorted largest-to-smallest) of valid words is returned.
Here's an interactive session that uses the gem programmatically:
$ irb
irb(main):001:0> require 'pressletter'
=> true
irb(main):002:0> letters = ["e", "i", "p", "t", "c", "t", "b", "n", "t", "y", "m", "e", "i", "p", "h", "o", "x", "v", "i", "t", "k", "m", "z", "i", "b"]
=> ["e", "i", "p", "t", "c", "t", "b", "n", "t", "y", "m", "e", "i", "p", "h", "o", "x", "v", "i", "t", "k", "m", "z", "i", "b"]
irb(main):003:0> Pressletter.solve(letters)
=> ["COMPETITIVITE", "...", "XI"]