I added a "refuse" wildcard type, bound to "!" by default. This allows constructing some exotic states by concatenating a bunch of disconnected blocks with these impossible wildcards (e.g. that "proj001" business up thread would have been easier with this).
Unfortunately WAO doesn't work with wildcards (it's on my radar but that WAO init code is extremely, extremely complicated and wildcards are going to make it even worse). I have instead special-cased a column of solid exclamation points to be understood as a splitting point. Now you can run an input like...
Code: Select all
| | ABABABuuMMMMMMMMMuuCDCDC!ABABABuuMMMMMMMMMuuuCDCDC |
| .*.*.*.............*.*.*!.*.*.*.............**.*.* | .*.*.**...........**.*.*!.*.*.**............**.*.* |
| .*.*.**...........**.*.*!.*.*.**.............*.*.* | .*.*.*.............*.*.*!.*.*.*............*.*.*.* |
| .*.*.*.*.........*.*.*.*!.*.*.*.*.........**.*.*.* | |
...to allow multiple different phasings of the sides in one search (I think there are 4 relative phasings here, it was really just a demo). E.g. a single search with this at one point output a shortest and a random partial showing both phasings were still live:
Code: Select all
20241031 16:33:57 [INFO] Shortest partial:
20241031 16:33:57 [INFO] | .*..................**.* | .**.................**.* |
20241031 16:33:57 [INFO] | .**..................*.* | .*.................*.*.* |
20241031 16:33:57 [INFO] | .*.*.......*......**.*.* | .*.**.....***.....**.*.* |
20241031 16:33:57 [INFO] | .*.**.....***......*.*.* | .*.*.*...*...*...*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.**..***.**.**.*.*.* | .*.*.**.*....**.**.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*..**....*.**.*.*.* | .*.*.*.**..**.*.*..*.*.* |
20241031 16:33:57 [INFO] | .*.*.*..*...*.....*..*.* | .*.*.*.*.....*.**....*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*...*..*.**.*.* | .*.*.*.*.***.*..*.**.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.**.**..**...*.* | .*.*.*.*.*....**.....*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*.***..****.*.* | .*.*.*.*.*.*..**..*..*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*...*..*....*.* | .*.*.*.*.*....*.*..*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*.**.*.*..*.*.* | .*.*.*.*.*.**.*.*.**.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*.*..*.*.**.*.* | .*.*.*.*.*.***..*....*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*......*.**.*.* | .*.*.*.*..*..**.*.*..*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.....**.*...**.* | .*.*.*.*.**.....*....*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.**.....*.**.*.* | .*.*.*.*........*.**.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*........*..*.*.* | .*.*.*.*.**......***.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*...........*.* | .*.*.*..*.......**..*..* |
20241031 16:33:57 [INFO] | .*.*.*.....*.*..**.....* | .*.*..*.***.***.....**.* |
20241031 16:33:57 [INFO] | .*.*....*.*..**.....**.* | |
20241031 16:33:57 [INFO] Random[ish] partial:
20241031 16:33:57 [INFO] | .*.*.......................*.* | .*.**.....................**.* |
20241031 16:33:57 [INFO] | .*.**.....................**.* | .*.*.......................*.* |
20241031 16:33:57 [INFO] | .*.*.*.........*.........*.*.* | .*.*.**.......***.......**.*.* |
20241031 16:33:57 [INFO] | .*.*.**.......***.......**.*.* | .*.*.*.......*...*.......*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.....*****.....*.*.*.* | .*.*.*.**...*.....*...**.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.**...**...**...**.*.*.* | .*.*.*.*....*.....*....*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*..*..*..*..*.*.*.*.* | .*.*.*.*.**.*.***.*.**.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.**.*.*.*.*.**.*.*.*.* | .*.*.*.*.**.*.*.*.*.**.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*....*.*.*.*....*.*.*.* | .*.*.*.*.**.*.*...*.**.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*..*.*.*...*.*..*.*.*.* | .*.*.*.**...*.*.*.*...**.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*....*..*.*..*..*.*.*.* | .*.*.*.*.**.*.......*..*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.**.*.......**.*.*.*.* | .*.*.*.*.*..*....***.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.***....**.*.*.*.*.*.* | .*.*.*.*........**.*.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*..*..**...**.*.*.*.*.*.* | .*.*.*.....**..*...*.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.**......*.*.*.*.*.*.*.* | .*.*.*.**......*.*.*.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.........*...*.*.*.*.*.* | .*.*.*..........*..*.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.**..........*.*.*.*.*.* | .*.*.*.*.......**.**.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*..*........**..*.*.*.*.*.* | .*.*..........*..*.*.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*..*.***.....****.*.*.*.*.*.* | .*....*.**...*.......*.*.*.*.* |
20241031 16:33:57 [INFO] | .*....*..**..**..****..*.*.*.* | |
Beware that it still picks up the left edge from only the left side of the input and the right edge from only the right side of the input. This is good if you just want to show various bits of state that you want all mashed together arbitrarily and maybe less good if you're trying to union multiple inputs that don't have identical edges.
I also added WAO-specific unique partials. As an example, a search with this input file...
Code: Select all
| | | | | | ABCABRRR |
| | | | ABCABRRR | **.**... | **.**... |
| | ABCABRRR | **.**... | **.**... | **.**... | **.**... |
| ........ | ........ | ........ | ........ | ........ | |
| **.**... | **.**... | **.**... | | | |
| **.**... | | | | | |
...and appropriate boundary conditions (3c/6 f2b blocks agar edge), will include displays like this...
Code: Select all
20241031 19:18:27 [INFO] Unique [WAO idx #3]:
20241031 19:18:27 [INFO] | | | | | **. | **. |
20241031 19:18:27 [INFO] | | | **. | **. | **. | **. |
20241031 19:18:27 [INFO] | ... | ... | ... | ... | ... | ..* |
20241031 19:18:27 [INFO] | **. | **. | **. | **. | **. | **. |
20241031 19:18:27 [INFO] | *.. | *.. | *.. | *.. | *.* | *.. |
20241031 19:18:27 [INFO] | ..* | *.* | *.* | *.* | *.. | *.. |
20241031 19:18:27 [INFO] | **. | *** | *.* | *.. | *.. | **. |
20241031 19:18:27 [INFO] | *.. | *.. | *.. | *.. | *.. | *.. |
20241031 19:18:27 [INFO] | *.. | *.* | *.* | *.* | *.* | ??? |
20241031 19:18:27 [INFO] | **. | *** | *.. | ??? | ??? | |
20241031 19:18:27 [INFO] | ?.. | ?.? | ?.? | | | |
20241031 19:18:27 [INFO] | ??? | | | | | |
20241031 19:18:27 [INFO] Unique [WAO idx #4]:
20241031 19:18:27 [INFO] | | | | | **. | **. |
20241031 19:18:27 [INFO] | | | **. | **. | **. | **. |
20241031 19:18:27 [INFO] | ... | ... | ... | ... | ... | ..* |
20241031 19:18:27 [INFO] | **. | **. | **. | **. | *** | *?? |
20241031 19:18:27 [INFO] | *.* | *.* | *.* | *.* | *.? | ?.? |
20241031 19:18:27 [INFO] | ?.* | ?.* | ?.* | ?.? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ?.? | ??? |
20241031 19:18:27 [INFO] | ?.. | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | | | |
20241031 19:18:27 [INFO] | ??? | | | | | |
20241031 19:18:27 [INFO] Unique [WAO idx #9]:
20241031 19:18:27 [INFO] | | | | | ... | ... |
20241031 19:18:27 [INFO] | | | ... | ... | ... | ... |
20241031 19:18:27 [INFO] | ... | ... | ... | ... | .*. | *** |
20241031 19:18:27 [INFO] | ... | ... | .*. | *** | *?* | ?.? |
20241031 19:18:27 [INFO] | .*. | *** | *?* | ?.? | ??? | ?.? |
20241031 19:18:27 [INFO] | *?* | ?.? | ??? | ?.? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ?.? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | | | |
20241031 19:18:27 [INFO] | ??? | | | | | |
...and each time a WAO idx disappears it will explicitly note it like...
Code: Select all
20241031 19:18:27 [INFO] WAO idx #3 terminated
20241031 19:18:27 [INFO] Unique [WAO idx #4]:
20241031 19:18:27 [INFO] | | | | | **. | **. |
20241031 19:18:27 [INFO] | | | **. | **. | **. | **. |
20241031 19:18:27 [INFO] | ... | ... | ... | ... | ... | ..* |
20241031 19:18:27 [INFO] | **. | **. | **. | **. | *** | *?? |
20241031 19:18:27 [INFO] | *.* | *.* | *.* | *.* | *.? | ?.? |
20241031 19:18:27 [INFO] | ?.* | ?.* | ?.* | ?.? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ?.? | ??? | ?.? | ?.? |
20241031 19:18:27 [INFO] | ?.. | *?? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ?.? | ??? | ??? | ??? | ??? | |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | | | |
20241031 19:18:27 [INFO] | ??? | ??? | | | | |
20241031 19:18:27 [INFO] Unique [WAO idx #9]:
20241031 19:18:27 [INFO] | | | | | ... | ... |
20241031 19:18:27 [INFO] | | | ... | ... | ... | ... |
20241031 19:18:27 [INFO] | ... | ... | ... | ... | .*. | *** |
20241031 19:18:27 [INFO] | ... | ... | .*. | *** | *?* | ?.? |
20241031 19:18:27 [INFO] | .*. | *** | *** | ?.? | ??? | ?.? |
20241031 19:18:27 [INFO] | *?* | ?.? | ??? | ?.? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ?.? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | | | |
20241031 19:18:27 [INFO] | ??? | ??? | | | | |
WAO windows aren't very wide by default (WAO pads default to 1) so the display is pretty thin. You can increase the pad size(s) to put more context in each window but depending on your other configuration it may multiply up the total number of WAO idxs and the size of the search pretty badly.
This might not be super exciting by itself although hopefully it will shine a little light into WAO's confusion. The code backing this helps pave the way to being able to do autochoking by cell value for cells w/in WAO windows which I'm hoping will be a sensibleish option for trading correctness/completeness for memory.
TBD any sort of display of shortest/random partial per WAO idx. Computers could certainly be made to do it, but I could not think of a way that is not extremely expensive. I have no idea better than multiplying the time of the existing partials, which can be considerable, by the number of extant WAO idxs, which I think is going to be unpalatable. I guess if you really want per-idx partials may you just gotta run separate searches for each.