Rule 110: Difference between revisions

Jump to navigation Jump to search
117 bytes added ,  21:05, 10 September 2022
m
Text replacement - "</source>" to "</syntaxhighlight>"
m (Examples category)
m (Text replacement - "</source>" to "</syntaxhighlight>")
Line 24: Line 24:
<source lang="apl">
<source lang="apl">
⎕IO←0
⎕IO←0
</source>
</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
</source>
</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}
</source>
</syntaxhighlight>


<source lang="apl">
<source lang="apl">
Line 49: Line 49:
0
0
       etc...
       etc...
</source>
</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.
</source>
</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:
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
        
        
</source>
</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}
</source>
</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⍣⍵)⍺}
</source>
</syntaxhighlight>
And the grand finale...
And the grand finale...


Line 84: Line 84:
└─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘
└─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘
        
        
</source>
</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│
└─────────────────────┘
└─────────────────────┘
</source>
</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¨⍳⍵}
</source>
</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:
                            
                            
  *******    * ***    ** *
  *******    * ***    ** *
</source>
</syntaxhighlight>


Beautiful.
Beautiful.
Line 187: Line 187:
rule110←{⍵ 1⍴(board ⍵)∘gen¨⍳⍵}
rule110←{⍵ 1⍴(board ⍵)∘gen¨⍳⍵}
↑{⍵⌷' *'}¨¨rule110 25
↑{⍵⌷' *'}¨¨rule110 25
</source>
</syntaxhighlight>


[[Category:Examples]]
[[Category:Examples]]

Navigation menu