[Question]
  [
## Background
This challenge is in honor of [apsillers](https://codegolf.stackexchange.com/users/7796/apsillers), who won the [Not as simple as it looks](http://meta.codegolf.stackexchange.com/a/11192/32014) category in Best of PPCG 2016 with their challenge [Can my 4-note music box play that song?](https://codegolf.stackexchange.com/q/70221/32014)
Congratulations!
On their "About Me" page, this user has a really neat simulator for the [Game of Life](https://en.wikipedia.org/wiki/Conway's_Game_of_Life) cellular automaton.
(Seriously, go check it out.)
On the other hand, the word [aspillera](https://es.wikipedia.org/wiki/Aspillera) is Spanish for "arrowslit".
In light of these facts, this challenge is about arrowslits in Game of Life.
## Game of Life arrowslits
In GoL, we will represent an arrow by a [glider](https://en.wikipedia.org/wiki/Glider_%28Conway's_Life%29), and a wall by a sequence of [blocks](https://en.wikipedia.org/wiki/Still_life_%28cellular_automaton%29#Blocks).
A single glider approaches the wall from above, and tries to fly through a gap in the wall (the arrowslit).
Your task is to check whether the glider passes through the arrowslit or crashes into the wall.
## Input
Your input is a grid of bits, which represents a GoL configuration.
You can take it in any reasonable format (multiline string of any two distict printable ASCII characters, list of strings, 2D array of integers, 2D array of booleans etc).
For clarity, I will use multiline strings of the characters `.#` in the following.
The input is guaranteed to have several properties.
First, its height is **2N** for some **N ≥ 6**, and its width is at least **2N+2**.
The input will be all `.`s, except that somewhere on the top three rows is a glider, and on the two middle rows there is a wall of blocks.
The glider will be heading southwest or southeast, and its position is such that if the walls are removed, it will not pass through a side edge before reaching the bottom edge (but it may reach a corner of the grid).
The glider is initially separated from the left and right edges by at least one step of `.`s.
It can be in any phase.
The wall consists of blocks, which are separated by one column of `.`s, except in one place, where they will be separated by at least two columns of `.`s.
Like the glider, the leftmost and rightmost blocks are also separated from the edges by one step of `.`s.
There will always be at least one block on the left edge and one block on the right edge.
Here is an example of a valid input grid:
```
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
```
## Output
As stated, your task is to determine whether the glider crashes into the wall or makes it through to the south edge.
For the purposes of this challenge, a crash occurs if the configuration no longer consists of a single glider and the wall of blocks, regardless of what happens later in the simulation.
The following diagrams show the smallest gaps that a southeast glider can go through without crashing in the two distinct phases (the condition for southwest gliders is symmetric).
```
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
```
If the glider flies through the wall, you shall output a truthy value, and otherwise a falsy value.
For the example above, the correct output is falsy, since the glider will crash into the left part of the wall.
For the purposes of this challenge, you can assume that if you simulate GoL on the input for **2\*(height - 3)** steps, the glider is on the bottom row in the expected position and the wall is intact, then the output is truthy.
## Rules and scoring
You can write a full program or a function.
The lowest byte count wins.
## Test cases
I have collected the test cases into a [GitHub repository](https://github.com/iatorm/arrowslits), since they are quite large.
Here are links to the individual files:
* [Truthy test cases as 2D arrays of bits](https://raw.githubusercontent.com/iatorm/arrowslits/master/arrowslits_true.txt)
* [Falsy test cases as 2D arrays of bits](https://raw.githubusercontent.com/iatorm/arrowslits/master/arrowslits_false.txt)
* [All test cases in human-readable format](https://raw.githubusercontent.com/iatorm/arrowslits/master/arrowslits_pretty.txt)
  
[Answer]
# [Python 2](https://docs.python.org/2/), ~~142~~ ~~136~~ 135 bytes
-6 bytes thanks to ElPedro  
-1 byte thanks to TuukkaX
```
p=input()
z=p[2].index(1)
m=(p[1][z]-p[1][z+1]<1)*2-1
k=i=0
for b in p[3:]:x=p[2][::m].index(1)+i;k|=1in b[::m][x-2:x+8];i+=1
print 1-k
```
[Try it online!](https://tio.run/nexus/python2#vY5NC8IwDIbv/RU9bnaVZl6kM78k5DJUCGO1yIQy/O9TJ35cCoIi7yGB9@FJpogS4mkoSjVipJqXEra7VECpeiwiAdPI9j4N8AbKRW1BdSjo1P5w1K2WoCOtPPs0C8j7/mUx0nRnhCvTzgUlW/tk1tyIQVDxKGHQYLtpInLVLVC5XLiixw457slA3vTmcV8z@Ttz8zHzq3/@xfAF "Python 2 – TIO Nexus") or [Verify all test cases](https://tio.run/nexus/python2#7Z3dbtpAEIXv/RS@CxSofOhNRerbPkHvLKtqFJCsJBQlREJR3z0FkhYUsD27nh0bOEEikby7n3fP/KxtmLzeTmfxrLfoT6L4JV1k4/xzMb@drnroR/FD2ltkyLOXfPT2e4D8G/qfxiNE8V1apEkUz34/xjdxMY8X2ZdJPlltx8gmk4fdQIPi@u5PinWbm@2BbDUaT1aDr/l1MUjXIy0ei/kyxujudflzOX1aDmfbX3G6HnbxvOz1o@itydWPx@dpvDn2dBVtwMUG/NZpff6zXrFr@v3X/dNh29l@29ds/ZMMNy8Mk7JXPsz@/Y2ydv/boHykvXGSxm3KOdsj4jZa52PVZt1oTw3JSBLFQMWCKwaRYhC1SehjHfExPVWpmI5ix@ZVPdLeilTQUDsOFdNRrF4NCGigYqaKQcV/qFhXfExTVSqmkcdKIqBs7OHBbsWhFzxYidcZavXC@1whmNlHm3Lt1f3V6Havj1YPZxq8etUrTaun1VtZvevLweZ9z3Ho4SkqrMSMlZBlztqPN9Xv7hZaFdtCs2gbZF0SyyWDwS2uN5oZmpEcVxG0DmawZtmj7N2cRdsgixksxAvGs3vPt4Y8WKtHHnmBrz/9rhj9r0F1eLQX8si7DN5uBwPTCGrLU7imp8WQd5Y7mMZX/o73ICx4tBfyyLu0HUzAu@yNZhtotyNk4xxUJpvs1tgSH9K6R3N859QOm7ZGNtlkn85TM7Q0c7TIFu7xaOlkX9iOTfdd4IOts2lrZJNNtvqObbNly@pqgRyNVVVXsVVzqj12OGbVVXNtjDQ/Vr4LLjvT6s9INZ/huawoRH4EQW0OVkoJ28anGlFdJGE1IhvFpBW/6n2MtW2sfCwR@obEx0DFgioGkY9B1CZhHjOMihBERTSOnFTMJo/p@SEVs8tjen5IxXQUK3lao1DxC1SsAxW/IK6qRx/rSuXKRFy5kj4WXrF6/5FUbQN9zNzHoJKj6GM2PqZVz5c@1p08pumHVCx0HtP0QyqWqFeHlenTWDG/WKr1bDxgnUy/b8EpfQqbvdz3Ag403zt9OPm1p9WfotX71nmFZ69zW3vZpzH9qq7R6q1ivfSJgEO8l/wfClo9rb5VqxfvvMOeo3tOachy/t4z6yGS5RgRy7@toVkvJTSLtkEWWWFYp5GZYbiKYGYmi5mZmZkssk4sM8NoZo1qdjmvIszmRUtkZg6SP81ZtA2yyLq8zNyI5pWZQesgi5mZmZksstrOzHn@Fw "Python 2 – TIO Nexus")
### Checking orientation (east/west):
[![west_east](https://i.stack.imgur.com/87ak1.png)](https://i.stack.imgur.com/87ak1.png)  
Using `z=p[2].index(1)` to get the first square on 3rd row (represented by the red square), and then `m=(p[1][z]-p[1][z+1]<1)*2-1` to subtract the value on the right (green) from the one on the left (blue), this way all the 4 gliders states that are going to southwest result in `1` (top row in the image), while the ones going to southeast result in `0` or `-1`.  
Then convert : `1 -> -1` and `0,-1 -> 1` to be used on parameter to reverse the lists when dealing with west ones. This way the gliders going southwest are threated the same as the one going southeast.
### Glider movement
[![gliding](https://i.stack.imgur.com/zyH0G.gif)](https://i.stack.imgur.com/zyH0G.gif)  
This is the movement that the glider going southeast do, it has a "ladder" pattern, and the leftmost block on 3rd line is constant to every pattern. Using it as starting point, the surrounding 3 blocks on left and right, and the middle 4 blocks are checked for the presence of `1`s (that would be the wall).  
[![arrowslits](https://i.stack.imgur.com/9wkEI.png)](https://i.stack.imgur.com/9wkEI.png)  
[![arrowslits_path](https://i.stack.imgur.com/L3Brg.png)](https://i.stack.imgur.com/L3Brg.png)
[Answer]
# Octave , ~~123~~ ~~122~~ 108 bytes
Thanks to @LuisMendo saved 2 bytes
```
B=A=input("");B(1:3,:)=0;do;until nnz((A=A&(s=conv2(A,(m=-1:1)|m','same'))>1&s<4|~A&s==3)-B)-5;any(A(end,:))
```
[Try it online!](https://tio.run/nexus/octave#vY7dCoJAEIVfJbzQGdiFnawbtwnW1xAvJL0QcgxWg0J6dfuBopuFoIhzM3A@vjlzzo5bOYwDRBHaHChLVYZsbN3bUYZ2vxA5Azh2MXje9XJcglPQsaaMcOoSlfiqaxLELcV@s5ouLvbMKeoc9dpWcgIHjdQ3Kc5zURh1DykTSmmL500h7sVQ2PTmMV8z4T@P5mPmV3v@xZRX "Octave – TIO Nexus")
Or
[Verify all test cases](https://tio.run/nexus/octave#7Z3BTttAEIbvPIXVA7ElI3mgvSR1JXPgCXpDPUSQVBHERjhpVUL66tRJgEaA7dn17NhJfixCEu/u591/ZmdtJ8Pv4X06SX962Xj8NJ6nV7NJlnpZfOEnweDIK37O4@T5iU/9s7AfxNHm9XW2@TtPZ5NbL00ffD@Jk2M/j6@y9Nepn4T@ND6hPgWP017Yy4fTUS8IvtFx/vXz49/kOI/js@DkPDj5smkni4fpHz/xR@l1QSnoxZOjp9kon@Ve7C163@/nI2/9shd6vYvhbf7ycjk4SuJJejef@Z8@FRXH2b13U9Sh/unmSCf5nb8uurhZBuu3VkUeViXS@XR06yevO17LX6zfXDwsg82O1dEUv0@LxeVlFK42CqOy7cfg8uU5lZV7LUPlLW21EzUuU85Z72GXkToerTJFoS01OC1xFCMo5lwxYilGrDIRfKwjPianKhSTUeyjflW3tDUiFTSqbQeKyShWrwYxaATFVBUjEf@BYl3xMUlVoZhEHCuZAXlth@9WKwa1yIIVWR2hVC167isxevbWpkxrdX80ul3rrdWTMY2satUrDauH1WtZvelmYPO2xxhaeIoIK1JjRWCps7bnm@pHcwutmttcs2AbYB0SyySCkdm83qhn1IxkOIoE60AEaxY9yh7VWbANsBDBXGyk3LvneKvII231wAPP8fmn3Rmj/TmoDA/2Ah54h8H7v4Ih1RlUlydwTg@LAW8vVzCNz/wNr0Fo8GAv4IF3aCsYh1fZG/XW0WqHyaZ9UBlssFtjc3xI6hrNxyundtiwNbDBBnt37ppRSz2nFtnMNR4sHewDW7HJPjJ8sHU2bA1ssMEWX7EtB@tML2R@j63qLLaqT7X73rdZddZcO0eq7ytfBZcdafVnpJr3cF9GlFh@RIzcHMiU4raMTTaiupkE2Yh0FONm/Kr3MeS20fKxiOkbHB8jKOZUMWL5GLHKRIhjirMiMWZFajxzQjGdOCbnh1BML47J@SEUk1Gs5G6NQMYvgmIdyPhF7Kx68LGuZK6M2Jkr4WPuFav3H07WNoKPqfsYicQo@JiOj0nl84WPdSeOSfohFHMdxyT9EIpF4tlhefo0VsxuLpW6N@4wT6bdt@CEPoWNWuZrAQOa7ZU@2vmxh9XvotXb5nkly1r7Nva8T2PaZV2D1WvN9dw7AgbzPef/UMDqYfWtWj175e32GM1jSkOW8feekQ8RLMMZsfzbGpL5UlyzYBtggeWGtRuRmRRHkRCZwUJkRmQGC6wdi8yk1LNGObuMR5HU@gVLRGR2Ej/VWbANsMA6vMjciGYVmQnWARYiMyIzWGC1HZmXy38 "Octave – TIO Nexus")
Thanks to Rod preparing test cases.
```
B=A=input("");
B(1:3,:)=0;
do
until nnz((A=A&(s=conv2(A,(m=-1:1)|m','same'))>1&s<4|~A&s==3)-B)-5
any(A(end,:))
```
Previous answer:
```
B=A=input("");
B(1:3,:)=0;
while nnz(A~=B)==5
    s=conv2(A,(m=-1:1)|m','same');
    x=~A;
    A&=~A|~(s<2|s>3);
    A|=x&s==3;
end;
any(A(end,:))
```
First extract wall pattern as variable `B`.  
Do GoL simulation until the wall pattern and the simulated pattern have more/less than 5 different cells.  
If the glider has received the last row the function returns true.
[Answer]
## [Retina](https://github.com/m-ender/retina), ~~101~~ ~~93~~ 91 bytes
Byte count assumes ISO 8859-1 encoding.
```
O$#^`.(?=(.*¶)*(?<=#_.\2.+##.(.*¶)\D+))
$#1
¶(?>_(_)*#+_+¶_+¶(?<1>_+¶)*)(?>(?<-1>.)+)_{11}
```
[Try it online!](https://tio.run/nexus/retina#7VpLjqMwEN37Gq9HgqApid5mCJvez2J6GTW5x2iulQPkYhkiWmqg/CdJp0ghuhVsP0zV8yvbUKej2Zr3Ax32nflz2LZN02xb86Pof59/v@DjQEXbFLQ5HctN0f5q0NH@lSqAhsL9W1WW5gW1OR2LdtcVXblB1VWn4@WvR9S7y49yU/a1/eXPekdlVXZ/6/rf@UxEoPFhLv@AWcmkYGhDoZIJpr@wlcTcJ6uk9@JgCW/HbYNE28Bt4yyBVsJblLVCbPvqbtZueJZJG0CmbcwSMCTk2oYwS2vhLc5aGXobj0SyV8FZBSeKaFFVf@dpKKPPIm/V1R/j2lVf3ocLCXcVs1u9n@l912F3PgVQdl7CKMpBkVjUME5mp9Oh0wGXilqrDx8e5dKYQ1mB/oCsp8TTcharkPGZi9Jx/2Aai5hv8nB5bAO5FioucRb1TI/eeTQCpzw8Je4zxiBvjGbiwvO9cni/GBNcAjjWEek45eGZY0za2t3fc0rkMenbjStYreglaM5QTIQZxacFaGVM0bfao2FB/1iEtgU95fybYlvkyRlcilbGFJ0W2@DcuU3nWePpedRyOj@zMZl9NYvD4/vO3k8F@7zTs4JzxbI6sJoclpl19kwrGbbZcsYYb2LzcyyccN4gzzZw3ri6QEL1Bs4bVxdoFXqLYlKs3qKYFGLbeNsTzBnDKnLGYMv1k8obY8mWoymSN8YST4yDZN4QVpdQ3mLyhlejtzgmJeotjkkp85vLpKBtnuEas4tPyu70fMCLefv9oNmdcC9rfatC3NqAdXvfl0DryZLFvQywvAT1JMGJzWwGubcGnl0D1PvX8L41kKe/h3V9jTY5IM2hdI3FyaeRuAyXVJR6XhTqJnpG1lNC9ax6VtTt9IyM/gJpYoZyYMpZhJ4DEs1FqeefWs8BmEmem5Uz1bOiYo// "Retina – TIO Nexus")
Certainly not optimal yet.
[Answer]
# [APL (Dyalog Unicode)](https://www.dyalog.com/), 47 [bytes](https://github.com/abrudz/SBCS)
```
{p←0⍪⍣3⊢3↓⍵⋄1∊⊢⌿({≢⍸⍵}⌺3 3∊¨3+0,¨⊢)⍣{5≠≢⍸p≠⍺}⍵}
```
[Try it online!](https://tio.run/##SyzI0U2pTMzJT/9fYviobcKjtomP@qZ6Bfv7qUdHG@iAoKGOAS4YqxMNYxviUgdXY4jbJCRzDChWg9sesAzRaqjlHnqpiVXnKjEiOQqpCaFBS1/78CYsmthHNzhq36h9ZOQ/Q4J5AlkNBeSA2DeaXkbtG7VvZNgHbNKk4WiVYhYxhJ2J1DTBo8ZwtFVK3VZpmhFxUUgYGtI1xZLYrqTALpJbsPTMiaN2DUG7iG9ZUbcFSGu7RtPGqF2jdtGqtfW/ugBYVRs86l31qHex8aOuRcaP2iY/6t36qLvF8FFHF1DgUc9@jepHnYse9e4Aitc@6tllrGAMlDq0wljbQOfQCqASTaDeatNHnQsgygpArN5dtSDl/9NALYHevkddzYfWG0OaBMFBzkAyxMMz@H@aQokhV5rCo569YLrECMoB0WlQGTCdBpVJMwIA "APL (Dyalog Unicode) – Try It Online")
Uses the idea from [rahnema1's Octave answer](https://codegolf.stackexchange.com/a/112280/78410):
> 
> Do GoL simulation until the wall pattern and the simulated pattern have more/less than 5 different cells. If the glider has received the last row the function returns true.
> 
> 
> 
The GoL simulation part is from [the APLcart entry](https://aplcart.info/?q=game%20of%20life#).
### How it works
```
{
  ⍝ ⍵←initial GoL pattern
  p←0⍪⍣3⊢3↓⍵  ⍝ Extract the wall pattern
         3↓⍵  ⍝ Remove first 3 rows
    0⍪⍣3⊢     ⍝ Prepend a zero row three times
  p←          ⍝ Assign to p
  1∊⊢⌿({≢⍸⍵}⌺3 3∊¨3+0,¨⊢)⍣{5≠≢⍸p≠⍺}⍵  ⍝ Run the simulation and check
      ({≢⍸⍵}⌺3 3∊¨3+0,¨⊢)          ⍵  ⍝ Run GoL on the input pattern
                         ⍣{       }   ⍝ until
                             ≢⍸p≠⍺    ⍝ the difference between the pattern and p
                           5≠         ⍝ is not 5
    ⊢⌿  ⍝ Extract the last row
  1∊    ⍝ Check if it has at least one alive cell
}
```
]