4,577
edits
m (Examples category) |
m (Text replacement - "</source>" to "</syntaxhighlight>") |
||
Line 24: | Line 24: | ||
<source lang="apl"> | <source lang="apl"> | ||
⎕IO←0 | ⎕IO←0 | ||
</ | </syntaxhighlight> | ||
The lookup table can be created by simply converting the decimal number 110 into binary and flipping it. | The lookup table can be created by simply converting the decimal number 110 into binary and flipping it. | ||
Line 30: | Line 30: | ||
<source lang="apl"> | <source lang="apl"> | ||
⌽110⊤⍨8⍴2 | ⌽110⊤⍨8⍴2 | ||
</ | </syntaxhighlight> | ||
A function that takes the three cells as an argument can then easily be implemented by converting it into a decimal number and indexing that number in the table. | A function that takes the three cells as an argument can then easily be implemented by converting it into a decimal number and indexing that number in the table. | ||
<source lang="apl"> | <source lang="apl"> | ||
{(2⊥⍵)⌷⌽110⊤⍨8⍴2} | {(2⊥⍵)⌷⌽110⊤⍨8⍴2} | ||
</ | </syntaxhighlight> | ||
<source lang="apl"> | <source lang="apl"> | ||
Line 49: | Line 49: | ||
0 | 0 | ||
etc... | etc... | ||
</ | </syntaxhighlight> | ||
But how are we going to iterate over an entire board? Well, it would be useful to have a function that would generate us a board first. | But how are we going to iterate over an entire board? Well, it would be useful to have a function that would generate us a board first. | ||
<source lang="apl"> | <source lang="apl"> | ||
board←{1,⍨⍵⍴0} ⍝ this function creates an array full of 0s with a 1 at the end. | board←{1,⍨⍵⍴0} ⍝ this function creates an array full of 0s with a 1 at the end. | ||
</ | </syntaxhighlight> | ||
APL has an interesting function that lets you operate over a small window of your choice. | APL has an interesting function that lets you operate over a small window of your choice. | ||
Line 63: | Line 63: | ||
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ | └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ | ||
</ | </syntaxhighlight> | ||
Wait! Eureka! That is exactly what we want! A 3 cell sized window! | Wait! Eureka! That is exactly what we want! A 3 cell sized window! | ||
Line 69: | Line 69: | ||
<source lang="apl"> | <source lang="apl"> | ||
solve←{{(2⊥⍵)⌷⌽110⊤⍨8⍴2}¨3,/0,⍵,0} | solve←{{(2⊥⍵)⌷⌽110⊤⍨8⍴2}¨3,/0,⍵,0} | ||
</ | </syntaxhighlight> | ||
I did gloss over an important step, which is to pad the array with a 0 on both sides. This is because any cell that exceeds the bounds is considered dead no matter what, so we need to tell this explicitly to APL. | I did gloss over an important step, which is to pad the array with a 0 on both sides. This is because any cell that exceeds the bounds is considered dead no matter what, so we need to tell this explicitly to APL. | ||
Line 75: | Line 75: | ||
<source lang="apl"> | <source lang="apl"> | ||
gen←{(solve⍣⍵)⍺} | gen←{(solve⍣⍵)⍺} | ||
</ | </syntaxhighlight> | ||
And the grand finale... | And the grand finale... | ||
Line 84: | Line 84: | ||
└─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘ | └─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘ | ||
</ | </syntaxhighlight> | ||
It worked! kinda... | It worked! kinda... | ||
Line 111: | Line 111: | ||
│0 1 1 0 0 0 0 0 1 1 1│ | │0 1 1 0 0 0 0 0 1 1 1│ | ||
└─────────────────────┘ | └─────────────────────┘ | ||
</ | </syntaxhighlight> | ||
Let's put this all into one function... | Let's put this all into one function... | ||
<source lang="apl"> | <source lang="apl"> | ||
rule110←{⍵ 1⍴(board ⍵)∘gen¨⍳⍵} | rule110←{⍵ 1⍴(board ⍵)∘gen¨⍳⍵} | ||
</ | </syntaxhighlight> | ||
And just for fun, let's use * for a 1 and a space for a 0 | And just for fun, let's use * for a 1 and a space for a 0 | ||
Line 171: | Line 171: | ||
******* * *** ** * | ******* * *** ** * | ||
</ | </syntaxhighlight> | ||
Beautiful. | Beautiful. | ||
Line 187: | Line 187: | ||
rule110←{⍵ 1⍴(board ⍵)∘gen¨⍳⍵} | rule110←{⍵ 1⍴(board ⍵)∘gen¨⍳⍵} | ||
↑{⍵⌷' *'}¨¨rule110 25 | ↑{⍵⌷' *'}¨¨rule110 25 | ||
</ | </syntaxhighlight> | ||
[[Category:Examples]] | [[Category:Examples]] |