Since it uses Wikipedia as the text source and orders by frequency, the results tend to be more realistic phrases than you might find doing smashing words from a word list together.
Since it uses Wikipedia as the text source and orders by frequency, the results tend to be more realistic phrases than you might find doing smashing words from a word list together.
We solved two or three of the small puzzles, but couldn't get the rest. I wondered if we could solve the overall puzzle without knowing the letters, by exploiting the structure of the graph: perhaps there are simply not many words or phases which could be produced by the graph.
Enumerating the possible paths through the graph was straightforward (there are a few hundred, i think). Matching those paths against individual words, if you have a word list, is easy. But where i was stumped was matching them against phrases containing multiple words. Trying every possible sequence of words, even lazily assembled, felt like it would be a combinatorial explosion that i would never be able to get through.
Using a corpus of phrases from wikipedia is absolute genius.
[1] https://www.gchq.gov.uk/news/christmas-card-2020 - note that the edge with a double arrow is really two edges, one in each direction
The anagram operator is a new one for me. Nice.
$ echo 'a b
c b
c d*' | hfst-regexp2fst > ab.fst
$ echo 'c ?+' | hfst-regexp2fst >cdotplus.fst
$ hfst-intersect ab.fst cdotplus.fst | hfst-expand -c3
cb
cd
cdd
cddd
cdddd
$ hfst-expand -c3 ab.fst
ab
cb
c
cd
cdd
cddd
The regex syntax is a bit quirky due to backwards compatibility with lexicons written in XFST, see https://github.com/hfst/hfst/wiki/Regular-Expression-Operato...