lllllllllwith10ls wrote: December 26th, 2024, 7:09 pm
I want to be able to search for skimmers with specified ahead boundaries and behind boundaries. What I want is something like
Code: Select all
AABDD
AABDD
AABDD
AASDD
AACDD
AACDD
AACDD
where A and D repeat along both dimensions and B and D repeat along the vertical dimension, and S is the skimmer. (ABCD are all specified) Something that can also find something like
Code: Select all
AABDD
AABDD
AABDD
EESFF
GGCHH
GGCHH
GGCHH
would be nice (ABCDEFGH are all specified, and you solve for S), although not as much of a priority.
LLSSS can theoretically do both of these although to do the latter is going to require either k-gram edges which will have issues not forcing their transitions, or manually choosing single edge transition positions which is very limiting.
As for the original problem of finding 4c/4 skimmers for that blocks-on-parallel-stripes edge...
Normally I would prefer to search f2b, something like...
Code: Select all
$ cat 1.in
| | | | ABABuuRRR |
| | | ABABuuRRR | *.*...... |
| | ABABuuRRR | *.*...... | *.*...... |
| ABABuuRRR | *.*.**... | *.*.**... | *.*.**... |
| *.*.**... | *.*.**... | *.*.**... | |
| *.*...... | *.*...... | | |
| *.*...... | | | |
$ rlife llsss-recentering-wao 4c4-f2b 1.in --left-edge agar:vertical-stripes --left-inertness agar:vertical-stripes --wao-idx ALL --partials ... --ends ... 17
...
...but unfortunately very quickly all WAO error windows die out except for the left-most one which can refuse to engage the prompt and produce useless stuff like:
Code: Select all
End [thinnest] "LlsssEndsSPeriodic([Vec3(0, 0, 1)])":
| | | | ABABABABABuuRR |
| | | ABABABABABuuRR | *.*.*.*.*..... |
| | ABABABABABuuRR | *.*.*.*.*..... | *.*.*.*.*..... |
| ABABABABABuuRR | *.*.*.*.*.**.. | *.*.*.*.*.**.. | *.*.....*.**.. |
| *.*.*.*.*.**.. | *.*.*.*.*.**.. | *.*.....*.**.. | *.*..*..*.**.. |
| *.*.*.*.*..... | *.*.....*..... | *.*..*..*..... | *.*.***.*..... |
| *.*.....*..... | *.*..*..*..... | *.*.***.*..... | *.*.*.*.*..... |
| *.*..*..*.**.. | *.*.***.*.**.. | *.*.*.*.*.**.. | *.*.*.*.*.**.. |
| *.*.***.*.**.. | *.*.*.*.*.**.. | *.*.*.*.*.**.. | *.*.*.*.*.**.. |
| *.*.*.*.*..... | *.*.*.*.*..... | *.*.*.*.*..... | |
| *.*.*.*.*..... | *.*.*.*.*..... | | |
| *.*.*.*.*.**.. | | | |
You could maybe still get this sort of search off the ground by taking a partial that did engage like...
Code: Select all
| | | | ABABABABuuRR |
| | | ABABABABuuRR | *.*.*.*..... |
| | ABABABABuuRR | *.*.*.*..... | *.*.*.*..... |
| ABABABABuuRR | *.*.*.*.**.. | *.*.*.*.**.. | *.*...*.**.. |
| *.*.*.*.**.. | *.*.*.*.**.. | *.*...*.**.. | *.*...*.**.. |
| *.*.*.*..... | *.*...*..... | *.*...*..... | *....**.*... |
| *.*...*..... | *.*...*..... | *.....**.... | *.**........ |
| *.*...*.**.. | *....**..... | *.**.***.... | *.****..*... |
| *.....*..... | *.**..*..... | *.**..**.... | *.**....*... |
| *.**.**.**.. | *.**.*..*... | *....*..*... | *....*..**.. |
| *.*...**.... | *.**.****... | *.**.**.**.. | |
| *........... | *.......*... | *........*.. | |
| *.*..*.**... | *......*.*.. | | |
| | | | |
...and stripping it back to the first row that forces engagement...
Code: Select all
| | | | ABABABABuuRR |
| | | ABABABABuuRR | *.*.*.*..... |
| | ABABABABuuRR | *.*.*.*..... | *.*.*.*..... |
| ABABABABuuRR | *.*.*.*.**.. | *.*.*.*.**.. | *.*...*.**.. |
| *.*.*.*.**.. | *.*.*.*.**.. | *.*...*.**.. | *.*...*.**.. |
| *.*.*.*..... | *.*...*..... | *.*...*..... | *....**.*... |
| *.*...*..... | *.*...*..... | *.....**.... | |
| *.*...*.**.. | *....**..... | | |
| *.....*..... | | | |
...and searching that. This sort of single-shot WAO search might also do better for other fronts. Generally you'd be using either `--ends pd_lite:K` if you're trying to reduce to lower period (ultimately wanting c/1) or `--ends s_periodic:0:0:1` if you're trying to find patterns returning to a still-life back.
For this blocks edge I instead concentrated on trying to complete the period division to a common c/1 edge. For this I included `--ends pd_lite:2` in the above search (to search for division by 2 from 4c/4 to 2c/2) and noticed:
Code: Select all
End LlsssEndsPdLite depth 4:
| | | | ABABABABABuuRR |
| | | ABABABABABuuRR | *.*.*.*.*..... |
| | ABABABABABuuRR | *.*.*.*.*..... | *.*.*.*.*..... |
| ABABABABABuuRR | *.*.*.*.*.**.. | *.*.*.*.*.**.. | *.*.....*.**.. |
| *.*.*.*.*.**.. | *.*.*.*.*.**.. | *.*.....*.**.. | *.*..*..*.**.. |
| *.*.*.*.*..... | *.*.....*..... | *.*..*..*..... | *.*.***.*.*... |
| *.*.....*..... | *.*..*..*..... | *.*.***.**.... | *.*........... |
| *.*..*..*.**.. | *.*.***.*..... | *.*.***.**.... | *.*........... |
| *.*.***.*..... | *.*.....*..... | *.*..**.*..... | *.*...*.**.... |
| *.*.****..**.. | *.*....*...... | *.**.......... | *.**.......... |
| *.*..*........ | *.*..*........ | *.*........... | *............. |
| *.**.......... | *.**.......... | *.**.......... | *.**.......... |
| *.*........... | *............. | *............. | *............. |
| *.**.......... | *.**.......... | *............. | |
| *............. | *............. | | |
| *............. | | | |
I stripped this back to the earliest 2 Y rows of 2c/2 and searched from there looking for another division in 2 (to c/1)...
Code: Select all
$ cat 2.in
| | ABABuuRRR |
| ABABuuRRR | *.*.**... |
| *.*.*.... | *.*...... |
| *.*.**... | |
$ rlife llsss-recentering 2c2-f2b 2.in --left-edge agar:vertical-stripes --left-inertness agar:vertical-stripes --ends pd_lite:2 20
...
This finds:
Code: Select all
End LlsssEndsPdLite depth 2:
| | ABABABuuRR |
| ABABABuuRR | *.*.*.**.. |
| *.*.*.*... | *.*.*..... |
| *.*.*.**.. | *.....**.. |
| *......... | *..*...... |
| *..*...... | *.**...... |
| *.**...... | |
Next, to find c/1 repositionings I chose to search s2s. This is unfortunate in some ways because then top pad (how far "inward" the pattern can deviate from agar) has to be chosen in advance but it does specify the edges more nicely than searching for this f2b would.
For example, to find a widening by one lane I used this:
Code: Select all
$ cat 3.in
| EABCDEAMMMFGHIJFG |
| ***************** |
| ................. |
| ***************** |
| ................. |
| ***************** |
| ................. |
| ***************** |
| ................. |
| ***************** |
| ................. |
| *..***.???******* |
| ..**...???....... |
| *...**.???..***.. |
| .......???.**...* |
| .......???...**.. |
| .......???....... |
| .......???....... |
| .......???....... |
$ rlife llsss-recentering 1c1-s2s 3.in --top-pad 08 --left-pad 05 --fuzzy-left-edge --right-pad 05 --fuzzy-right-edge XX
...
Which finds:
Code: Select all
End [thinnest] "LlsssEndsZero":
| ABCDEABCDEAMMMMFG |
| ***************** |
| ................. |
| *********..****** |
| ..........**..... |
| **..*****...***** |
| ...**........*... |
| **...**.......*** |
| ..............*.. |
| **......*.*...*** |
| .....**.*...*.... |
| ...**.....*..**** |
| .*.**.....*.*.... |
| .....**.*.....*.. |
| ........*.*.*...* |
| ............*.*.. |
| ................. |
| ................. |
Similarly to find a reduction by one lane:
Code: Select all
| EABCDEAMMMFGHIJFG |
| ***************** |
| ................. |
| ***************** |
| ................. |
| ***************** |
| ................. |
| ***************** |
| ................. |
| ***************** |
| ................. |
| *******???..***.. |
| .......???.**...* |
| *..***.???...**.. |
| ..**...???....... |
| *...**.???....... |
| .......???....... |
| .......???....... |
| .......???....... |
Finds:
Code: Select all
End [thinnest] "LlsssEndsZero":
| ABCDEAMMMMFGHIJ |
| *************** |
| ............... |
| **..***..****** |
| ...**...**..... |
| **...**...***** |
| ...........*... |
| **..........*** |
| ............*.. |
| ****.....*.*.** |
| .....*.*.*..... |
| **...*.....*.** |
| ...*...*.*..*.. |
| ...*.*...*.*.** |
| .*............. |
| ............... |
| ............... |
To find a rephasing is tricky because you have to force the phase mod 5 (so no 3x repeat of M in middle):
Code: Select all
| EABCDEAuFGHIJFG |
| *************** |
| ............... |
| *************** |
| ............... |
| *************** |
| ............... |
| *************** |
| ............... |
| *************** |
| ............... |
| *..***.?.***..* |
| ..**...?**...** |
| *...**.?..**... |
| .......?....... |
| .......?....... |
| .......?....... |
| .......?....... |
| .......?....... |
Finds:
Code: Select all
End [thinnest] "LlsssEndsZero":
| ABCDEAuFGHIJF |
| ************* |
| ............. |
| **..********* |
| ...**........ |
| **...******** |
| ......*...... |
| **.....*..*** |
| ...*.*...**.. |
| **...*.*...** |
| ............. |
| ............. |
Finally to find the back conversion of the c/1 edge back into blocks I search b2f from blocks similar to how I did f2b for the front. I used different combinations of inertness (pd:4 on both sides instead of just agar on left), WAO padding, and mid_steps but the essential search setup is the same. Eventually some reduction to 2c/2 was able to reduce to c/1 and then find the common edge.
To find the common edge in the final c/1 search I used `--inertness agar:vertical-stripes` with `--partials srv2` in that search and it was output as a very thin choke:
Code: Select all
| LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL |
| ABABABABABuuuuuuuuuuuuuuuuuuuuuuuuRRRRRRRRR |
| *.*.*.*.*.*.*....*..*.*.*..**..*.*......... |
| *.*.*.*.*...........*.***..**..**.......... |
| *.*.*.*.*.**.*..*.*.*..*........*.......... |
| *.*.*.***.......*.*.*......*............... |
| *.*.**...*..**...**.*.*.*.*....*.*.*..*.... |
| *.*.*............*..*.......*..*.*.*..*.... |
| *.**....*.*..*......*.**.**.*...**..**..... |
| *..*....*.*.....*.*.*.......*.*..*..**..... |
| *........**.*.*....**.*...*.**............. |
| *.*.*..*..*.*.*.**..*.*...*..*..*.*..*..... |
| *.*.*......**.*......**.*.*.....*.*........ |
| *.*.*.*.*..*..*.*....*..*.*.*.*.*.*.*.*.... |
| *.*.*.*.*.....*.*.......*.*.*.*.*.*.*.*.... |
| *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.. |
| *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.. |
| *..*...*...*...*...*...*...*...*...*..**... |
| *.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*..*... |
Stitching it all together:
Code: Select all
x = 66, y = 216, rule = B3/S23
2obobobobobobobobobobobobobobobobobobobobobobobobobobobobobobobobo$2ob
obobobobobobobobobobobobobobobobobobobobobobobobobobobobobobobo$3bobob
obobobobobobobobobobobobobobobobobobobobobobobobobobobobobo$3bobobobob
obobobobobobobobobobobobobobobobobobobobobobobobobobobo$2obobobobobobo
bobobobobobobobobobobobobobobobobobobobobobobobobobo$2obobobobobobobob
obobobobobobobobobobobobobobobobobobobobobobobobo$3bobobobobobobobobob
obobobobobobobobobobobobobobobobobobobobobobo$3bobobobobobobobobobobob
obobobobobobobobobobobobobobobobobobobobo$2obobobobobobobobobobobobobo
bobobobobobobobobobobobobobobobobobobo$2obobobobobobobobobobobobobobob
obobobobobobobobobobobobobobobobobo$3bobobobobobobobobobobobobobobobob
obobobobobobobobobobobobobobobo$3bobobobobobobobobobobobobobobobobobob
obobobobobobobobobobobobobo$2obobobobobobobobobobobobobobobobobobobobo
bobobobobobobobobobobobo$2obobobobobobobobobobobobobobobobobobobobobob
obobobobobobobobobobo$3bobobobobobobobobobobobobobobobobobobobobobobob
obobobobobobobobo$3bobobobobobobobobobobobobobobobobobobobobobobobobob
obobobobobobo$2obobobobobobobobobobobobobobobobobobobobobobobobobobobo
bobobobobo$2obobobobobobobobobobobobobobobobobobobobobobobobobobobobob
obobobo$3bobobobobobobobobobobobobobobobobobobobobobobobobobobobobobob
obo$3bo5bobobobobobobobobobobobobobobobobobobobobobobobobobobobobo$2ob
o2bo2bobobobobobobobobobobobobobobobobobobobobobobobobobobobobo$3bob3o
bobobobobobobobobobobobobobobobobobobobobobobobobobobobobo$2o2b4obobob
obobobobobobobobobobobobobobobobobobobobobobobobobobo$6bo2bobobobobobo
bobobobobobobobobobobobobobobobobobobobobobobo$8b2obobobobobobobobobob
obobobobobobobobobobobobobobobobobobo$9bobobobobobobobobobobobobobobob
obobobobobobobobobobobobobo$8b2obobobobobobobobobobobobobobobobobobobo
bobobobobobobobobo$15bobobobobobobobobobobobobobobobobobobobobobobobob
obo$12bo2bobobobobobobobobobobobobobobobobobobobobobobobobobo$12b2obob
obobobobobobobobobobobobobobobobobobobobobobobobo$11bobobobobobobobobo
bobobobobobobobobobobobobobobobobobobo$11bobobobobobobobobobobobobobob
obobobobobobobobobobobobobo$15bobobobobobobobobobobobobobobobobobobobo
bobobobobobo$12bo2bobobobobobobobobobobobobobobobobobobobobobobobobobo
$12b2obobobobobobobobobobobobobobobobobobobobobobobobobobo$11bobobobob
obobobobobobobobobobobobobobobobobobobobobobobo$11bobobobobobobobobobo
bobobobobobobobobobobobobobobobobobo$15bobobobobobobobobobobobobobobob
obobobobobobobobobobo$12bo2bobobobobobobobobobobobobobobobobobobobobob
obobobobo$12b2obobobobobobobobobobobobobobobobobobobobobobobobobobo$
11bobobobobobobobobobobobobobobobobobobobobobobobobobobobo$11bobobobob
obobobobobobobobobobobobobobobobobobobobobobobo$15bobobobobobobobobobo
bobobobobobobobobobobobobobobobo$12bo2bobobobobobobobobobobobobobobobo
bobobobobobobobobobo$12b2obobobobobobobobobobobobobobobobobobobobobobo
bobobobo$11bobobobobobobobobobobobobobobobobobobobobobobobobobobobo$
11bobobobobobobobobobobobobobobobobobobobobobobobobobobobo$15bobobobob
obobobobobobobobobobobobobobobobobobobobobo$12bo2bobobobobobobobobobob
obobobobobobobobobobobobobobobo$12b2obobobobobobobobobobobobobobobobob
obobobobobobobobobo$11bobobobobobobobobobobobobobobobobobobobobobobobo
bobobobo$11bobobobobobobobobobobobobobobobobobobobobobobobobobobobo$
15bobobobobobobobobobobobobobobobobobobobobobobobobobo$12bo2bobobobobo
bobobobobobobobobobobobobobobobobobobobobo$21bobobobobobobobobobobobob
obobobobobobobobobobo$12b2o4bo2bobobobobobobobobobobobobobobobobobobob
obobobo$12b2o4b2obobobobobobobobobobobobobobobobobobobobobobobo$11bo2b
o2bobobobobobobobobobobobobobobobobobobobobobobobobo$11bo2bo2bobobobob
obobobobobobobobobobobobobobobobobobobobo$19bobobobobobobobobobobobobo
bobobobobobobobobobobo$10b2o2b2o3bobobobobobobobobobobobobobobobobobob
obobobobobo$23bobobobobobobobobobobobobobobobobobobobobobo$10bob2obo4b
o2bobobobobobobobobobobobobobobobobobobobobobo$20b2obobobobobobobobobo
bobobobobobobobobobobobobo$9b2obobo4bobobobobobobobobobobobobobobobobo
bobobobobobobo$13bo4b2obobobobobobobobobobobobobobobobobobobobobobobo$
9bobobob3obobobobobobobobobobobobobobobobobobobobobobobobo$13bobobobob
obobobobobobobobobobobobobobobobobobobobobobo$10bo2bobobobobobobobobob
obobobobobobobobobobobobobobobobobo$10b2obobobobobobobobobobobobobobob
obobobobobobobobobobobobo$9bobobobobobobobobobobobobobobobobobobobobob
obobobobobobobo$9bobobobobobobobobobobobobobobobobobobobobobobobobobob
obobo$13bobobobobobobobobobobobobobobobobobobobobobobobobobobo$10bo2bo
bobobobobobobobobobobobobobobobobobobobobobobobobobo$10b2obobobobobobo
bobobobobobobobobobobobobobobobobobobobobo$9bobobobobobobobobobobobobo
bobobobobobobobobobobobobobobobo$9bobobobobobobobobobobobobobobobobobo
bobobobobobobobobobobo$13bobobobobobobobobobobobobobobobobobobobobobob
obobobobo$10bo2bobobobobobobobobobobobobobobobobobobobobobobobobobobo$
10b2obobobobobobobobobobobobobobobobobobobobobobobobobobobo$9bobobobob
obobobobobobobobobobobobobobobobobobobobobobobobo$9bobobobobobobobobob
obobobobobobobobobobobobobobobobobobobo$13bobobobobobobobobobobobobobo
bobobobobobobobobobobobobo$10bo2bobobobobobobobobobobobobobobobobobobo
bobobobobobobobo$10b2obobobobobobobobobobobobobobobobobobobobobobobobo
bobobo$9bobobobobobobobobobobobobobobobobobobobobobobobobobobobobo$9bo
bobobobobobobobobobobobobobobobobobobobobobobobobobobobo$13bobobobobob
obobobobobobobobobobobobobobobobobobobobobo$10bo2bobobobobobobobobobob
obobobobobobobobobobobobobobobobo$10b2obobobobobobobobobobobobobobobob
obobobobobobobobobobobo$9bobobobobobobobobobobobobobobobobobobobobobob
obobobobobobo$9bobobobobobobobobobobobobobobobobobobobobobobobobobobob
obo$13bobobobobobobobobobobobobobobobobobobobobobobobobobobo$10bo2bobo
bobobobobobobobobobobobobobobobobobobobobobobobobo$15bo7bobobobobobobo
bobobobobobobobobobobobobobobo$11b2o2bo4bo2bobobobobobobobobobobobobob
obobobobobobobobo$20b2obobobobobobobobobobobobobobobobobobobobobobo$
11bob2o4bobobobobobobobobobobobobobobobobobobobobobobobo$19bobobobobob
obobobobobobobobobobobobobobobobobobo$12bobo8bobobobobobobobobobobobob
obobobobobobobobobo$20bo2bobobobobobobobobobobobobobobobobobobobobobo$
11b2ob2o4b2obobobobobobobobobobobobobobobobobobobobobobo$19bobobobobob
obobobobobobobobobobobobobobobobobobo$11bobobo2b2obobobobobobobobobobo
bobobobobobobobobobobobobo$12bo3b2obobobobobobobobobobobobobobobobobob
obobobobobobo$11bobobobobobobobobobobobobobobobobobobobobobobobobobobo
bo$11bobobobobobobobobobobobobobobobobobobobobobobobobobobobo$15bobobo
bobobobobobobobobobobobobobobobobobobobobobobo$12bo2bobobobobobobobobo
bobobobobobobobobobobobobobobobobo$12b2obobobobobobobobobobobobobobobo
bobobobobobobobobobobo$11bobobobobobobobobobobobobobobobobobobobobobob
obobobobobo$11bobobobobobobobobobobobobobobobobobobobobobobobobobobobo
$15bobobobobobobobobobobobobobobobobobobobobobobobobobo$12bo2bobobobob
obobobobobobobobobobobobobobobobobobobobobo$12b2obobobobobobobobobobob
obobobobobobobobobobobobobobobo$11bobobobobobobobobobobobobobobobobobo
bobobobobobobobobobo$11bobobobobobobobobobobobobobobobobobobobobobobob
obobobobo$15bobobobobobobobobobobobobobobobobobobobobobobobobobo$12bo
2bobobobobobobobobobobobobobobobobobobobobobobobobobo$12b2obobobobobob
obobobobobobobobobobobobobobobobobobobobo$11bobobobobobobobobobobobobo
bobobobobobobobobobobobobobobo$11bobobobobobobobobobobobobobobobobobob
obobobobobobobobobo$15bobobobobobobobobobobobobobobobobobobobobobobobo
bobo$12bo2bobobobobobobobobobobobobobobobobobobobobobobobobobo$12b2obo
bobobobobobobobobobobobobobobobobobobobobobobobobo$11bobobobobobobobob
obobobobobobobobobobobobobobobobobobobo$11bobobobobobobobobobobobobobo
bobobobobobobobobobobobobobo$15bobobobobobobobobobobobobobobobobobobob
obobobobobobo$12bo2bobobobobobobobobobobobobobobobobobobobobobobobobob
o$12b2obobobobobobobobobobobobobobobobobobobobobobobobobobo$11bobobobo
bobobobobobobobobobobobobobobobobobobobobobobobo$11bobobobobobobobobob
obobobobobobobobobobobobobobobobobobo$19bobobobobobobobobobobobobobobo
bobobobobobobobobo$12bo3bo2bobobobobobobobobobobobobobobobobobobobobob
obobo$16b2obobobobobobobobobobobobobobobobobobobobobobobobo$11b2o2bobo
bobobobobobobobobobobobobobobobobobobobobobobobo$14b2obobobobobobobobo
bobobobobobobobobobobobobobobobobo$11bobobobobobobobobobobobobobobobob
obobobobobobobobobobobo$15bobobobobobobobobobobobobobobobobobobobobobo
bobobobo$12bo2bobobobobobobobobobobobobobobobobobobobobobobobobobo$12b
2obobobobobobobobobobobobobobobobobobobobobobobobobobo$11bobobobobobob
obobobobobobobobobobobobobobobobobobobobobo$11bobobobobobobobobobobobo
bobobobobobobobobobobobobobobobo$15bobobobobobobobobobobobobobobobobob
obobobobobobobobo$12bo2bobobobobobobobobobobobobobobobobobobobobobobob
obobo$12b2obobobobobobobobobobobobobobobobobobobobobobobobobobo$11bobo
bobobobobobobobobobobobobobobobobobobobobobobobobobo$11bobobobobobobob
obobobobobobobobobobobobobobobobobobobobo$15bobobobobobobobobobobobobo
bobobobobobobobobobobobobo$12bo2bobobobobobobobobobobobobobobobobobobo
bobobobobobobo$12b2obobobobobobobobobobobobobobobobobobobobobobobobobo
bo$11bobobobobobobobobobobobobobobobobobobobobobobobobobobobo$11bobobo
bobobobobobobobobobobobobobobobobobobobobobobobobo$15bobobobobobobobob
obobobobobobobobobobobobobobobobobo$12bo2bobobobobobobobobobobobobobob
obobobobobobobobobobobo$12b2obobobobobobobobobobobobobobobobobobobobob
obobobobobo$11bobobobobobobobobobobobobobobobobobobobobobobobobobobobo
$11bobobobobobobobobobobobobobobobobobobobobobobobobobobobo$15bobobobo
bobobobobobobobobobobobobobobobobobobobobobo$12bo2bobobobobobobobobobo
bobobobobobobobobobobobobobobobo$12b2obobobobobobobobobobobobobobobobo
bobobobobobobobobobo$11bobobobobobobobobobobobobobobobobobobobobobobob
obobobobo$11bobobobobobobobobobobobobobobobobobobobobobobobobobobobo$
15bobobobobobobobobobobobobobobobobobobobobobobobobobo$12bo2bobobobobo
bobobobobobobobobobobobobobobobobobobobobo$12b2obobobobobobobobobobobo
bobobobobobobobobobobobobobobo$11bobobobobobobobobobobobobobobobobobob
obobobobobobobobobo$11bobobobobobobobobobobobobobobobobobobobobobobobo
bobobobo$13bobobobobobobobo7bobo5bobobobobobobobobobobobo$13bobobobobo
bobobo2bo4bobo2bo2bobobobobobobobobobobobo$17bobo5bobob2o6bob2o6bobobo
bobobobobobobo$14bo2bobo2bo2bo3bobo2b2obobobo2bo2bobobobobobobobobobo$
22b2obo3bob2o4bobob2o8bobobobobobobobo$14b2o2bo2bobo7bobobo5bobo4bo2bo
bobobobobobobo$14b2o2b2o3bob2ob2obo6bo2bobo4b2obobobobobobobobo$13bo2b
obobo2bo7bo2bo12bobobobobobobobobobo$13bo2bobobo4bobobobob2o3b2o2bo3b
2obobobobobobobobobo$24bo6bobobo7b3obobobobobobobobobobo$19bo8bo2bobob
o2bob2obobobobobobobobobobobobo$19b2o2b2o2b3obo11bobobobobobobobobobob
obo$18bobo2b2o2bobobo2bo4bobobobobobobobobobobobobobo$18bobobo3b2obobo
b2o5bo2bobobobobobobobobobobobo$22bob3o6bobo3bobobobobobobobobobobobob
obo$22bob2o2bo4bobo3bobobobobobobobobobobobobobo$27b3o13bobobobobobobo
bobobobobo$24b2o6b2ob2o3bo2bobobobobobobobobobobobo$40b2obobobobobobob
obobobobobo$28b2o2bobobo2bobobobobobobobobobobobobobo$28b2o5bo2b2obobo
bobobobobobobobobobobo$29bo3bobobobobobobobobobobobobobobobobo$29b4o2b
obobobobobobobobobobobobobobobo$31bobobobobobobobobobobobobobobobobobo
$31bobobobobobobobobobobobobobobobobobo$29bobobobobobobobobobobobobobo
bobobobobo$29bobobobobobobobobobobobobobobobobobobo$30b2obobobobobobob
obobobobobobobobobobo$33bobobobobobobobobobobobobobobobobo$33bobobobob
obobobobobobobobobobobobo$30b2obobobobobobobobobobobobobobobobobo$30b
2obobobobobobobobobobobobobobobobobo$33bobobobobobobobobobobobobobobob
obo$33bobobobobobobobobobobobobobobobobo$30b2obobobobobobobobobobobobo
bobobobobo$30b2obobobobobobobobobobobobobobobobobo$33bobobobobobobobob
obobobobobobobobo$33bobobobobobobobobobobobobobobobobo$30b2obobobobobo
bobobobobobobobobobobobo$30b2obobobobobobobobobobobobobobobobobo$33bob
obobobobobobobobobobobobobobobo$33bobobobobobobobobobobobobobobobobo$
30b2obobobobobobobobobobobobobobobobobo$30b2obobobobobobobobobobobobob
obobobobo$33bobobobobobobobobobobobobobobobobo$33bobobobobobobobobobob
obobobobobobo$30b2obobobobobobobobobobobobobobobobobo$30b2obobobobobob
obobobobobobobobobobobo!
This hopefully shows some of the ways you can search for parts. Nothing I did above is some sort of One True Way (TM) to do it. There are a lot of ways you can specify boundary conditions (the top/start, the left and right edges, and the bottom/ends) and depending on what unhelpful patterns exist you may have to work around them.