As I said at the end of the last post:

There is a set of puzzles called Volapük. According to Wikipedia:

Volapük is a constructed language created between 1879 and 1880 by Johann Martin Schleyer, a Catholic priest in Baden, Germany, who believed that God had told him in a dream to create an international language.

So, if we are going to be solving for words from Volapük, might prove challenging.

As of starting this post, I have not yet done one of the Volapük crosswords. So once I do, this post may come to a sudden end. Or I switch to some other regex exercise/problem.

Volapük #1 (Bal)

(zo|os|op)
[^ion\ss]+
[grapez]+
(po|r|g|e)*[gra]p+.*
(z|oo)[kinzs]+(x|y|z)[kis\s]+
[gin].
[spik\s]*
[^zyp]+

Solve It

For the first row, the right regex has a literal p in the second position. That pretty much means the last character is o. The row’s left regex allows for a p one or more times and any character zero or more times. But, the last column’s bottom regex says no p. So, the intersection of the various regexes gives an o given the row’s left regex. The intersection of the row’s right regex and the first column’s bottom regex make the first character a g. None of the regexes complain about these assignments.

The intersection of two regexes for the second row make the first character a z. The o in the last position on the first row means the last character in the second row must be an s. The row’s regexes only allow an s. The second row’s right regex says the middle character must be in [kis\s]+. The column’s top regex eliminates everything but the k.

(zo|os|op)
[^ion\ss]+
[grapez]+
(po|r|g|e)*gpo[gra]p+.*
(z|oo)[kinzs]+zks(x|y|z)[kis\s]+
[gin].
[spik\s]*
[^zyp]+

And I have not been able to determine if gpozks means anything in Volapük or not. But the puzzle title, bal, translates to the number 1. And, tel to 2. I have a feeling the only Volapük will be the numbering for the crosswords. And that the crossword solutions are mainly gobbledygook. But time will tell.

Volapük #2 (tel)

(y$|yh|\d$)+
(\\d|\d.)[\\\/b]
m[\dip]*
(y|\d|m)+[^ib][0-3]y
(.h|p|.p)+^(p|y)*(pa|\.h$)
[\dip\s].+[pa\\d\d]+
(m|a|p)+
[^2o13]\.\\*(a|p)?
[how2y]+

Looking at the regexes, this one might be more challenging than some of the previous ones. But we have a few literal characters so let’s sort those and redraw the crossword.

First character of first column is an m. Last character of first row is a y. And middle character of middle column looks to be a period (\.).

(y$|yh|\d$)+
(\\d|\d.)[\\\/b]
m[\dip]*
(y|\d|m)+my[^ib][0-3]y
(.h|p|.p)+.^(p|y)*(pa|\.h$)
[\dip\s].+[pa\\d\d]+
(m|a|p)+
[^2o13]\.\\*(a|p)?
[how2y]+

Comparing the first grouping in the top regex of the second column and the left regex of the first row, the middle character looks to be 0. Note: that is an o not a 0 in the bottom regex for the column. It was a lot less obvious on the crossword site which uses capitals ([^2O13]). (I convert them to lowercase here, just because that’s how I prefer viewing them).

For the first character of the second row, the intersection of the relevant portions of the regex leave us with p. And the relevant portions of the row’s two regexes leave us with h for the last character. Pretty much required by the last alternation of the grouping (pa|\.h$) since the middle character is a period (\.) and $ says end of the line. The ^ at the start of the row’s right regex says start of the line.

For the first character of the last row, the intersection of the relevant parts of the pertinent regexes leave us with a p (again). For the second character, the column’s top regex and the row’s right regex leave us with a backslash (\\). The only thing available in both. The column’s bottom regex accepts a backslash at that point (\\*, * = 0 or more). And the (ap)? says zero or one from the alernation. Zero times it is. For the last character in the row, the really relevant element is the \d$ in the column’s top regex. I.E. a digit at the end of the line. And the bottom regex has as its only digit a 2.

(y$|yh|\d$)+
(\\d|\d.)[\\\/b]
m[\dip]*
(y|\d|m)+m0y[^ib][0-3]y
(.h|p|.p)+p.h^(p|y)*(pa|\.h$)
[\dip\s].+p\2[pa\\d\d]+
(m|a|p)+
[^2o13]\.\\*(a|p)?
[how2y]+

And, on the crossword website that gets a big, bright checkmark. I am sticking with the puzzle solutions being gobbledygook. The title of the next crossword translates to three.

Volapük #3 (kil)

There are three crosswords left in the series. But I expect the last two will take longer to solve than the first two; so, am going to tackle the third one in this post. And up to four columns.

(o|p)\1\1
[you?be]+
(a|\?|\?p|np)+
[mensa?]+
[^ape]+.?[m-q].[a-e][m-q]
[snake]+..[^naked].?(uo|duo)
(\!|\'|\.|\?)?p[yo!]+.+[m-w]+
[^nap\s]+.
[pen\sa?]+
.+(y|be)
[^bat's?]+

Let’s start with the last column. Because whatever is chosen for the first character gets repeated for the rest of the column. We have a choice of (o|p). But the right regex for the second row says last character is an o. So, o it is for all three characters of the column.

The first character of the first row has to be in the character class at the top of the column. However, the bottom regex says no n or a. That leaves us with [mes?]. The row’s left regex says no e; leaving us with [ms?]. And the row’s right regex says it has to be in the range [m-q]. That leaves us with m.

The second character of the first row perhaps a touch more challenging. The intersection of column’s regexes allow a choice of a, n or ?. The row’s right regex is no help, as . doesn’t limit the choice of characters. If we look at the left regex it ends with .?, That says any character zero or one time. And, that’s the o. So, the first part of the regex is still in effect, + meaning one or more times. And it says no a allowed. So n or ?. But for it to be n, the second character of the column would need to a p. The left regex for the second row doesn’t allow a p in that position. [snake]+.. says one of the characters in the specified class one or more times, followed by any two characters. So the first two characters of the row must be from that character class and there is no p. So, our character has to be ?.

The top regex of the third column says we need one of [you?be]+. The right regex for the row says it must be in the range [a-e]. But, the left says e not allowed. That leaves us with b.

(o|p)\1\1
[you?be]+
(a|\?|\?p|np)+
[mensa?]+
[^ape]+.?m?bo[m-q].[a-e][m-q]
[snake]+..o[^naked].?(uo|duo)
(\!|\'|\.|\?)?p[yo!]+o.+[m-w]+
[^nap\s]+.
[pen\sa?]+
.+(y|be)
[^bat's?]+

The first character of the second row is rather straightforward using the row’s two regexes. Left says one of [snake]+, but right regex says the following are not allowed [^naked]. That leaves us with s.

For the second character the column’s top regex says one of (a|\?|\?p|np)+. But if we look at the last row’s left regex, it has a literal p somewhere in the row. That matches up nicely with the np. \?p doesn’t work as the row’s left regex doesn’t allow a question mark.

For the third character, the row’s right regex makes the determination. It says the row’s last two characters have to be uo, as the n in the second position eliminates the duo option.

(o|p)\1\1
[you?be]+
(a|\?|\?p|np)+
[mensa?]+
[^ape]+.?m?bo[m-q].[a-e][m-q]
[snake]+..snuo[^naked].?(uo|duo)
(\!|\'|\.|\?)?p[yo!]+po.+[m-w]+
[^nap\s]+.
[pen\sa?]+
.+(y|be)
[^bat's?]+

Given the p in the second position of the last row, the row’s left regex says the first character has to be one of (\!\'\.\?). The top regex for the column only allows the question mark.

One left. The bottom regex for the third column says the last character(s) in the column must be one of (y|be). Well we only have space for one character, so y it must be.

(o|p)\1\1
[you?be]+
(a|\?|\?p|np)+
[mensa?]+
[^ape]+.?m?bo[m-q].[a-e][m-q]
[snake]+..snuo[^naked].?(uo|duo)
(\!|\'|\.|\?)?p[yo!]+?pyo.+[m-w]+
[^nap\s]+.
[pen\sa?]+
.+(y|be)
[^bat's?]+

And that passed on the crossword site. That was perhaps the most challenging crossword to-date. And do note, it took multiple attempts. I made some errors working on the first row and the second character in the second row. The above is my final logic. I didn’t want to spend the space to show you my early mistakes.

Done

This post is plenty long enough now (246 lines, including the HTML for the crosswords). Must say that having gobbledygook for content sure makes the crossword harder to sort. No hints of any sort.

Until next time, if you are trying these crosswords, may your regex logic be rapidly percolating.

Resources