<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://conwaylife.com/w/index.php?action=history&amp;feed=atom&amp;title=Tutorials%2FCoding_Life_simulators%2Feightfold_reducer</id>
	<title>Tutorials/Coding Life simulators/eightfold reducer - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://conwaylife.com/w/index.php?action=history&amp;feed=atom&amp;title=Tutorials%2FCoding_Life_simulators%2Feightfold_reducer"/>
	<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;action=history"/>
	<updated>2026-10-28T02:57:32Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=173224&amp;oldid=prev</id>
		<title>HotdogPi: Undo revision 173216 by WhiteHawk (talk) LifeWiki:Style_guide</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=173224&amp;oldid=prev"/>
		<updated>2026-06-07T20:14:02Z</updated>

		<summary type="html">&lt;p&gt;Undo revision &lt;a href=&quot;/wiki/Special:Diff/173216&quot; title=&quot;Special:Diff/173216&quot;&gt;173216&lt;/a&gt; by &lt;a href=&quot;/wiki/Special:Contributions/WhiteHawk&quot; title=&quot;Special:Contributions/WhiteHawk&quot;&gt;WhiteHawk&lt;/a&gt; (&lt;a href=&quot;/wiki/User_talk:WhiteHawk&quot; title=&quot;User talk:WhiteHawk&quot;&gt;talk&lt;/a&gt;) &lt;a href=&quot;/wiki/LifeWiki:Style_guide&quot; title=&quot;LifeWiki:Style guide&quot;&gt;LifeWiki:Style_guide&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:14, 7 June 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot;&gt;Line 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;You would imagine that this article would be very short, and would explain only that if you would like to exhaustively search states in an isotropic rule, you should iterate over all 2**n**2 states and check for each whether it&amp;#039;s the minimum&amp;lt;ref group=&amp;quot;n&amp;quot;&amp;gt;We can use integer comparisons to find the minimum if you are making a bitwise program, but if each cell is instead stored as an array element, most programming languages implement lexicographical comparisons (ie. check the first element of each against each other, then if they&amp;#039;re equal defer to the second and third, and so on), we will be referring to this when describing values as larger or smaller than others.&amp;lt;/ref&amp;gt; of its eight orientations. However, we have a more efficient convention that has more interesting properties, that may seem at first to be unnecessarily complicated but by the end you will realise to be a more natural way.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;You would imagine that this article would be very short, and would explain only that if you would like to exhaustively search states in an isotropic rule, you should iterate over all 2**n**2 states and check for each whether it&amp;#039;s the minimum&amp;lt;ref group=&amp;quot;n&amp;quot;&amp;gt;We can use integer comparisons to find the minimum if you are making a bitwise program, but if each cell is instead stored as an array element, most programming languages implement lexicographical comparisons (ie. check the first element of each against each other, then if they&amp;#039;re equal defer to the second and third, and so on), we will be referring to this when describing values as larger or smaller than others.&amp;lt;/ref&amp;gt; of its eight orientations. However, we have a more efficient convention that has more interesting properties, that may seem at first to be unnecessarily complicated but by the end you will realise to be a more natural way.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;We divide the square state into &quot;layers,&quot; which will hereafter refer to collections of cells of the same displacement (under symmetry) from the origin, and count over each of the cells in these in binary (each layer carrying the 1 onto the beginning of the next upon overflowing, and returning to the outermost layer upon the one-carrying finishing), with the layers of lowest precedence being on the outside (from the corners to the cells at the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;centers &lt;/del&gt;of the edges, then again for the edges of the (n-2)*(n-2) square inside, repeating until terminating in the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;center&lt;/del&gt;).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;We divide the square state into &quot;layers,&quot; which will hereafter refer to collections of cells of the same displacement (under symmetry) from the origin, and count over each of the cells in these in binary (each layer carrying the 1 onto the beginning of the next upon overflowing, and returning to the outermost layer upon the one-carrying finishing), with the layers of lowest precedence being on the outside (from the corners to the cells at the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;centres &lt;/ins&gt;of the edges, then again for the edges of the (n-2)*(n-2) square inside, repeating until terminating in the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;centre&lt;/ins&gt;).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This all seems very arbitrary, however for each layer we store the cumulative intersection of the &amp;quot;symmetries&amp;quot; of those preceding it (further inwards).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This all seems very arbitrary, however for each layer we store the cumulative intersection of the &amp;quot;symmetries&amp;quot; of those preceding it (further inwards).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>HotdogPi</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=173216&amp;oldid=prev</id>
		<title>WhiteHawk at 20:12, 7 June 2026</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=173216&amp;oldid=prev"/>
		<updated>2026-06-07T20:12:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:12, 7 June 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot;&gt;Line 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;You would imagine that this article would be very short, and would explain only that if you would like to exhaustively search states in an isotropic rule, you should iterate over all 2**n**2 states and check for each whether it&amp;#039;s the minimum&amp;lt;ref group=&amp;quot;n&amp;quot;&amp;gt;We can use integer comparisons to find the minimum if you are making a bitwise program, but if each cell is instead stored as an array element, most programming languages implement lexicographical comparisons (ie. check the first element of each against each other, then if they&amp;#039;re equal defer to the second and third, and so on), we will be referring to this when describing values as larger or smaller than others.&amp;lt;/ref&amp;gt; of its eight orientations. However, we have a more efficient convention that has more interesting properties, that may seem at first to be unnecessarily complicated but by the end you will realise to be a more natural way.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;You would imagine that this article would be very short, and would explain only that if you would like to exhaustively search states in an isotropic rule, you should iterate over all 2**n**2 states and check for each whether it&amp;#039;s the minimum&amp;lt;ref group=&amp;quot;n&amp;quot;&amp;gt;We can use integer comparisons to find the minimum if you are making a bitwise program, but if each cell is instead stored as an array element, most programming languages implement lexicographical comparisons (ie. check the first element of each against each other, then if they&amp;#039;re equal defer to the second and third, and so on), we will be referring to this when describing values as larger or smaller than others.&amp;lt;/ref&amp;gt; of its eight orientations. However, we have a more efficient convention that has more interesting properties, that may seem at first to be unnecessarily complicated but by the end you will realise to be a more natural way.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;We divide the square state into &quot;layers,&quot; which will hereafter refer to collections of cells of the same displacement (under symmetry) from the origin, and count over each of the cells in these in binary (each layer carrying the 1 onto the beginning of the next upon overflowing, and returning to the outermost layer upon the one-carrying finishing), with the layers of lowest precedence being on the outside (from the corners to the cells at the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;centres &lt;/del&gt;of the edges, then again for the edges of the (n-2)*(n-2) square inside, repeating until terminating in the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;centre&lt;/del&gt;).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;We divide the square state into &quot;layers,&quot; which will hereafter refer to collections of cells of the same displacement (under symmetry) from the origin, and count over each of the cells in these in binary (each layer carrying the 1 onto the beginning of the next upon overflowing, and returning to the outermost layer upon the one-carrying finishing), with the layers of lowest precedence being on the outside (from the corners to the cells at the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;centers &lt;/ins&gt;of the edges, then again for the edges of the (n-2)*(n-2) square inside, repeating until terminating in the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;center&lt;/ins&gt;).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This all seems very arbitrary, however for each layer we store the cumulative intersection of the &amp;quot;symmetries&amp;quot; of those preceding it (further inwards).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This all seems very arbitrary, however for each layer we store the cumulative intersection of the &amp;quot;symmetries&amp;quot; of those preceding it (further inwards).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>WhiteHawk</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=126409&amp;oldid=prev</id>
		<title>Confocal: /* External Links */ cat</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=126409&amp;oldid=prev"/>
		<updated>2023-03-10T08:10:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;External Links: &lt;/span&gt; cat&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:10, 10 March 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l436&quot;&gt;Line 436:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 436:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Tutorials]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Tutorials]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Algorithms]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Confocal</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=124673&amp;oldid=prev</id>
		<title>HotdogPi: Category:Tutorials</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=124673&amp;oldid=prev"/>
		<updated>2023-02-10T17:59:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/wiki/Category:Tutorials&quot; title=&quot;Category:Tutorials&quot;&gt;Category:Tutorials&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:59, 10 February 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l434&quot;&gt;Line 434:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 434:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==External Links==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==External Links==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/DroneBetter/ChessPieceVision/blob/main/eightfold%20reducer.py the program]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/DroneBetter/ChessPieceVision/blob/main/eightfold%20reducer.py the program]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Tutorials]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>HotdogPi</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=121705&amp;oldid=prev</id>
		<title>Confocal: an attempted (continued) fix (hopefully) for the &lt;pre&gt; indentation splitting (by adding linebreaks around)</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=121705&amp;oldid=prev"/>
		<updated>2023-01-03T06:42:32Z</updated>

		<summary type="html">&lt;p&gt;an attempted (continued) fix (hopefully) for the &amp;lt;pre&amp;gt; indentation splitting (by adding linebreaks around)&lt;/p&gt;
&lt;a href=&quot;https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;amp;diff=121705&amp;amp;oldid=121691&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Confocal</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=121691&amp;oldid=prev</id>
		<title>Confocal: attempt to add linebreaks outside &lt;pre&gt;layerPriorities&lt;/pre&gt; to see if that improves anything</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=121691&amp;oldid=prev"/>
		<updated>2023-01-02T18:29:57Z</updated>

		<summary type="html">&lt;p&gt;attempt to add linebreaks outside &amp;lt;pre&amp;gt;layerPriorities&amp;lt;/pre&amp;gt; to see if that improves anything&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:29, 2 January 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l87&quot;&gt;Line 87:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 87:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;self.instanceReflectionAllowednesses=tuple(tuple((i&amp;gt;&amp;gt;(8*l))&amp;amp;((1&amp;lt;&amp;lt;8)-1) for l in range(2**t)) for t,i in zip(self.typeLengths,(0xff104050203060108090c040a02080f001114010010101108101401020202010020242102202021080028010202020200301011102030201020103012202020304104440241004400404044080808040051040500111401004104440a0208050061040402002664080960440202020600101011002010211020101102002220108180840202008408808084080808080091040102001691080990810808080900a0208502022201080808840a02080a0020101100202020102010211202220020c040444080c040408080c048808080c04040440080404400808044480880804080404400808044408080804808088080f0104500203061008090c40a02080ff,0xffff,0xff50a0f0031122030c44880c0f50a0ff,0xff1144502203661188990c44a02288ff)))&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;self.instanceReflectionAllowednesses=tuple(tuple((i&amp;gt;&amp;gt;(8*l))&amp;amp;((1&amp;lt;&amp;lt;8)-1) for l in range(2**t)) for t,i in zip(self.typeLengths,(0xff104050203060108090c040a02080f001114010010101108101401020202010020242102202021080028010202020200301011102030201020103012202020304104440241004400404044080808040051040500111401004104440a0208050061040402002664080960440202020600101011002010211020101102002220108180840202008408808084080808080091040102001691080990810808080900a0208502022201080808840a02080a0020101100202020102010211202220020c040444080c040408080c048808080c04040440080404400808044480880804080404400808044408080804808088080f0104500203061008090c40a02080ff,0xffff,0xff50a0f0031122030c44880c0f50a0ff,0xff1144502203661188990c44a02288ff)))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;self.instanceReflectionPriorities=tuple(tuple(tuple(j&amp;gt;&amp;gt;(self.typeBits[m]*l)&amp;amp;(self.typeLengths[m]-1) for l in range(8)) for j in i) for m,i in enumerate(((0,1635557,3959123,799370,12818092,4829193,5087304,10154067,15141658,6894081,7152192,12477633,6390865,13881882,16205448,2396160,5361783,569427,1889510,1635557,9122351,5169255,5943399,5927005,6361619,11362855,12402782,10055773,12822117,13353501,13869597,10154067,9089598,5365885,827482,1667820,4297242,7033404,7807100,5927019,14849716,13226556,16130611,10055787,12818092,13353515,13869611,13881882,2433051,5361783,3522743,569427,9089598,2433051,5419134,5361783,10892350,9032247,4755483,7430255,4297242,9089598,9380413,2433051,7687617,3438995,2892993,3959123,4555976,5437313,5945800,6186817,13511624,11364801,12138945,10315585,15403353,15419208,15935304,12477633,267475,1111390,3950485,799370,6493543,340107,1979285,1700629,12945877,9205070,4985538,8152396,6390410,13091029,15930691,5058625,296154,1111411,1886122,1893731,8881523,2838843,294984,1958698,15075242,2101320,12130272,8152417,13076266,12825386,13600097,5087304,571767,841015,1357111,1635557,6460734,2773239,3547390,569427,10589502,8966391,7611191,5796581,10720500,8827070,4554842,5361783,11415432,2635393,7950145,6056715,10980634,9166024,7810824,6187713,6620808,13229825,14003976,10316481,15141658,15420104,15936200,16205448,2102931,3177118,3951829,3700949,8624798,4646943,295425,1701973,14818517,2101761,13938372,7895692,14883484,14891093,15665804,6894081,2131610,846524,3686186,799825,8624819,2204697,7572145,3831338,15076586,14797930,6850128,10283672,6390865,12826730,15665825,6922760,4299582,841911,1358007,1373862,6461630,4638270,5412414,3265591,10590398,10831415,11339902,2634259,12818092,4297242,13338220,9089598,4757184,7396802,7687617,2892993,9346960,2434752,7744968,5884865,11415432,11358081,4757184,7687617,6620808,13254472,11415432,4757184,2895333,2907604,3423700,3959123,6721428,646604,3550659,1927499,10850196,8970115,9743811,2892993,15109395,6362753,11411330,7687617,6623148,2907618,3423714,3955098,6721442,4374433,5414360,828616,10850210,10833816,11607960,7654864,15141658,14887705,6620808,11415432,585,571767,2895333,799370,4299582,38043,296154,1635557,6623148,2102931,2361042,3959123,6390865,12818092,15141658,0),(0,0),(0,13158,52377,21760,23055,10011,36174,23055,42480,29361,55524,42480,85,13158,52377,0),(0,10011,29361,13158,36174,23055,5140,10011,55524,16705,42480,29361,52377,36174,55524,0))))&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;self.instanceReflectionPriorities=tuple(tuple(tuple(j&amp;gt;&amp;gt;(self.typeBits[m]*l)&amp;amp;(self.typeLengths[m]-1) for l in range(8)) for j in i) for m,i in enumerate(((0,1635557,3959123,799370,12818092,4829193,5087304,10154067,15141658,6894081,7152192,12477633,6390865,13881882,16205448,2396160,5361783,569427,1889510,1635557,9122351,5169255,5943399,5927005,6361619,11362855,12402782,10055773,12822117,13353501,13869597,10154067,9089598,5365885,827482,1667820,4297242,7033404,7807100,5927019,14849716,13226556,16130611,10055787,12818092,13353515,13869611,13881882,2433051,5361783,3522743,569427,9089598,2433051,5419134,5361783,10892350,9032247,4755483,7430255,4297242,9089598,9380413,2433051,7687617,3438995,2892993,3959123,4555976,5437313,5945800,6186817,13511624,11364801,12138945,10315585,15403353,15419208,15935304,12477633,267475,1111390,3950485,799370,6493543,340107,1979285,1700629,12945877,9205070,4985538,8152396,6390410,13091029,15930691,5058625,296154,1111411,1886122,1893731,8881523,2838843,294984,1958698,15075242,2101320,12130272,8152417,13076266,12825386,13600097,5087304,571767,841015,1357111,1635557,6460734,2773239,3547390,569427,10589502,8966391,7611191,5796581,10720500,8827070,4554842,5361783,11415432,2635393,7950145,6056715,10980634,9166024,7810824,6187713,6620808,13229825,14003976,10316481,15141658,15420104,15936200,16205448,2102931,3177118,3951829,3700949,8624798,4646943,295425,1701973,14818517,2101761,13938372,7895692,14883484,14891093,15665804,6894081,2131610,846524,3686186,799825,8624819,2204697,7572145,3831338,15076586,14797930,6850128,10283672,6390865,12826730,15665825,6922760,4299582,841911,1358007,1373862,6461630,4638270,5412414,3265591,10590398,10831415,11339902,2634259,12818092,4297242,13338220,9089598,4757184,7396802,7687617,2892993,9346960,2434752,7744968,5884865,11415432,11358081,4757184,7687617,6620808,13254472,11415432,4757184,2895333,2907604,3423700,3959123,6721428,646604,3550659,1927499,10850196,8970115,9743811,2892993,15109395,6362753,11411330,7687617,6623148,2907618,3423714,3955098,6721442,4374433,5414360,828616,10850210,10833816,11607960,7654864,15141658,14887705,6620808,11415432,585,571767,2895333,799370,4299582,38043,296154,1635557,6623148,2102931,2361042,3959123,6390865,12818092,15141658,0),(0,0),(0,13158,52377,21760,23055,10011,36174,23055,42480,29361,55524,42480,85,13158,52377,0),(0,10011,29361,13158,36174,23055,5140,10011,55524,16705,42480,29361,52377,36174,55524,0))))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;The typeLengths tells you the number of cells in a layer of each type, and typeBits the log base 2 of this. For a layer with the type t, there are 2**typeLengths[t] possible states. We store in instanceReflectionAllowednesses, for each layer type, a list of states, and within each of these a symmetry byte describing whether each reflection makes them minimal or not (which can be determined in one of many ways but we use an empty state containing only the layer and compare lexicographically). In instanceReflectionPriorities, we similarly have a list of states for layers, except each state containing the rank of the result of each reflection in the sorted list of reflections. The idea is that we will be able to begin by going through the layers, beginning with an all-1s symmetry byte, and recursively bitwise AND it with each layer&#039;s corresponding instanceReflectionAllowednesses element, until we reach the end of the layers or a point at which doing so would make the symmetry byte zero, because all actions that would make the current layer minimal are ones we&#039;ve already disqualified in prior layers, so we switch to instead disqualifying those that don&#039;t lead to the resultant state&#039;s rank being minimal of those left allowed. The lists are decoded from integers that will be explained later.&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;The typeLengths tells you the number of cells in a layer of each type, and typeBits the log base 2 of this. For a layer with the type t, there are 2**typeLengths[t] possible states. We store in instanceReflectionAllowednesses, for each layer type, a list of states, and within each of these a symmetry byte describing whether each reflection makes them minimal or not (which can be determined in one of many ways but we use an empty state containing only the layer and compare lexicographically). In instanceReflectionPriorities, we similarly have a list of states for layers, except each state containing the rank of the result of each reflection in the sorted list of reflections. The idea is that we will be able to begin by going through the layers, beginning with an all-1s symmetry byte, and recursively bitwise AND it with each layer&#039;s corresponding instanceReflectionAllowednesses element, until we reach the end of the layers or a point at which doing so would make the symmetry byte zero, because all actions that would make the current layer minimal are ones we&#039;ve already disqualified in prior layers, so we switch to instead disqualifying those that don&#039;t lead to the resultant state&#039;s rank being minimal of those left allowed. The lists are decoded from integers that will be explained later.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;layerPriorities=(lambda layer,type: self.instanceReflectionPriorities[type][self.ORsum(l&amp;lt;&amp;lt;i for i,l in enumerate(layer))])&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;layerPriorities=(lambda layer,type: self.instanceReflectionPriorities[type][self.ORsum(l&amp;lt;&amp;lt;i for i,l in enumerate(layer))])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;def constructCellular(self,layers):&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;def constructCellular(self,layers):&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l99&quot;&gt;Line 99:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 101:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         return(tuple(output))&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         return(tuple(output))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;setLayers=(lambda self,state: (lambda layers: (layers,[self.ORsum(m&amp;lt;&amp;lt;i for i,m in enumerate(l)) for l in layers]))([list(map((lambda l: state&amp;gt;&amp;gt;self.BIAS+l%boardWidth*self.cellWidth+l//boardWidth*self.COLSHIFT&amp;amp;1) if self.bitwise else state.__getitem__,l)) for l in unreflectedLayerIndices]))&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;setLayers=(lambda self,state: (lambda layers: (layers,[self.ORsum(m&amp;lt;&amp;lt;i for i,m in enumerate(l)) for l in layers]))([list(map((lambda l: state&amp;gt;&amp;gt;self.BIAS+l%boardWidth*self.cellWidth+l//boardWidth*self.COLSHIFT&amp;amp;1) if self.bitwise else state.__getitem__,l)) for l in unreflectedLayerIndices]))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;layerPriorities converts an input layer to a symmetry byte (with our little-endian indexing convention), and constructCellular converts a list of layers back into a state. setLayers converts a state to two lists, layers and layerNumbers (the latter being only generating an integer for indexing in the instance lists, the first step of layerPriorities, for our convenience). Now, onto the reflection functions.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;layerPriorities converts an input layer to a symmetry byte (with our little-endian indexing convention), and constructCellular converts a list of layers back into a state. setLayers converts a state to two lists, layers and layerNumbers (the latter being only generating an integer for indexing in the instance lists, the first step of layerPriorities, for our convenience). Now, onto the reflection functions.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Firstly, functions to change indexes to correspond with reflections through a single axis (where x is 0, y is 1 and the x=y line of symmetry is 2). These will go in the __init__ function, as you will see the reason for shortly.&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Firstly, functions to change indexes to correspond with reflections through a single axis (where x is 0, y is 1 and the x=y line of symmetry is 2). These will go in the __init__ function, as you will see the reason for shortly.&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Confocal</name></author>
	</entry>
	<entry>
		<id>https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=121686&amp;oldid=prev</id>
		<title>DroneBetter: Create (I don&#039;t know how to fix the indentation splitting &lt;pre&gt;&#039;s into multiple segments, the problem seems somewhat worse in this article (being that it&#039;s comprised of more indented parts and trees and such)), more explaining may be necessary later</title>
		<link rel="alternate" type="text/html" href="https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;diff=121686&amp;oldid=prev"/>
		<updated>2023-01-02T17:43:50Z</updated>

		<summary type="html">&lt;p&gt;Create (I don&amp;#039;t know how to fix the indentation splitting &amp;lt;pre&amp;gt;&amp;#039;s into multiple segments, the problem seems somewhat worse in this article (being that it&amp;#039;s comprised of more indented parts and trees and such)), more explaining may be necessary later&lt;/p&gt;
&lt;a href=&quot;https://conwaylife.com/w/index.php?title=Tutorials/Coding_Life_simulators/eightfold_reducer&amp;amp;diff=121686&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>DroneBetter</name></author>
	</entry>
</feed>