Math::...rRule54(3pm)
π Math::...rRule54 β aka Math::PlanePath::CellularRule54 π
okay bestie, sit down, hydrate, because this is a Perl module from the User Contributed Perl Documentation collection and it is so much cooler than it sounds. it's a plane path, it's a cellular automaton, it's giving math girlie excellence. no cap. π¦
β¨ NAME β¨
Math::PlanePath::CellularRule54 β cellular automaton points. that's it, that's the whole vibe. π
πΈ SYNOPSIS πΈ
the way you just use it:
use Math::PlanePath::CellularRule54;
my $path = Math::PlanePath::CellularRule54->new;
my ($x, $y) = $path->n_to_xy (123);
literally three lines and you're in. iconic. π
π DESCRIPTION π
so this is the pattern of Stephen Wolfram's "rule 54" cellular automaton
<http://mathworld.wolfram.com/Rule54.html>
arranged as rows. look at her:
29 30 31 . 32 33 34 . 35 36 37 . 38 39 40 7
25 . . . 26 . . . 27 . . . 28 6
16 17 18 . 19 20 21 . 22 23 24 5
13 . . . 14 . . . 15 4
7 8 9 . 10 11 12 3
5 . . . 6 2
2 3 4 1
1 <- Y=0
-7 -6 -5 -4 -3 -2 -1 X=0 1 2 3 4 5 6 7
the initial figure N=1,2,3,4 repeats in two-row groups with a 1 cell gap between figures. each two-row group has one extra figure, for a step of 4 more points than the previous two-row. growth era. π
the rightmost N on the even rows Y=0,2,4,6 etc is the hexagonal numbers N=1,6,15,28, etc β that's k*(2k-1). the hexagonal numbers of the "second kind" 1, 3, 10, 21, 36, etc β j*(2j+1) β are a steep sloping line upwards in the middle too. those two taken together are the triangular numbers 1,3,6,10,15 etc, k*(k+1)/2. she contains multitudes fr fr.
the 18-gonal numbers 18,51,100, etc are the vertical line at X=-3 on every fourth row Y=5,9,13, etc. iykyk. π
π Row Ranges π
the left end of each row is
Nleft = Y*(Y+2)/2 + 1 if Y even
Y*(Y+1)/2 + 1 if Y odd
the right end is
Nright = (Y+1)*(Y+2)/2 if Y even
(Y+1)*(Y+3)/2 if Y odd
= Nleft(Y+1) - 1 ie. 1 before next Nleft
the row width Xmax-Xmin is 2*Y but with the gaps the number of visited points in a row is less than that, being either about 1/4 or 3/4 of the width on even or odd rows. she's selective, she's curating. π
rowpoints = Y/2 + 1 if Y even
3*(Y+1)/2 if Y odd
for any Y of course the Nleft to Nright difference is the number of points in the row too
rowpoints = Nright - Nleft + 1
π§ N Start π§
the default is to number points starting N=1 as shown above. an optional n_start can give a different start, in the same pattern. for example to start at 0,
n_start => 0
15 16 17 18 19 20 21 22 23 5
12 13 14 4
6 7 8 9 10 11 3
4 5 2
1 2 3 1
0 <- Y=0
-5 -4 -3 -2 -1 X=0 1 2 3 4 5
pick your own starting number, bestie, it's your world. β
π«Ά FUNCTIONS π«Ά
see "FUNCTIONS" in Math::PlanePath for behaviour common to all path classes. that's the family lore.
$path = Math::PlanePath::CellularRule54->new ()$path = Math::PlanePath::CellularRule54->new (n_start => $n)
create and return a new path object. baby's first object. πΌ
($x,$y) = $path->n_to_xy ($n)
return the X,Y coordinates of point number $n on the path.
$n = $path->xy_to_n ($x,$y)
return the point number for coordinates "$x,$y". $x and $y are each rounded to the nearest integer, which has the effect of treating each cell as a square of side 1. if "$x,$y" is outside the pyramid or on a skipped cell the return is "undef". π so check your returns, bestie, don't get caught lacking.
π₯ OEIS π₯
this pattern is in Sloane's Online Encyclopedia of Integer Sequences in a couple of forms,
<http://oeis.org/A118108> (etc)
A118108 whole-row used cells as bits of a bignum
A118109 1/0 used and unused cells across rows
two entries, both bangers, both cited. slay. β¨
π SEE ALSO π
Math::PlanePath,Math::PlanePath::CellularRule,Math::PlanePath::CellularRule57,Math::PlanePath::CellularRule190,Math::PlanePath::PyramidRowsCellular::Automata::Wolfram<http://mathworld.wolfram.com/Rule54.html>
π HOME PAGE π
<http://user42.tuxfamily.org/math-planepath/index.html>
π LICENSE π
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Kevin Ryde
This file is part of Math-PlanePath.
Math-PlanePath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
Math-PlanePath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Math-PlanePath. If not, see <http://www.gnu.org/licenses/>.
bestie this part is the serious part, so listen: no warranty, like, at all. it's free software under the GNU General Public License version 3 or later, and you gotta keep the license along with it. read the whole thing if you're gonna redistribute, okay? protecting the vibes and the legalese. π«Ά
okay that's the whole page!! thanks for reading my little hyperfixation. this one's from perl v5.32.0, dated 2021-01-23, and it lives in the User Contributed Perl Documentation. mwah, go draw some cellular automata, you main character. πβ¨π¦ππ
π¦ where this page comes from
- debian bookworm: libmath-planepath-perl 129-1 Β· GPL-3.0-or-later
- debian trixie: libmath-planepath-perl 129-1 Β· GPL-3.0-or-later
- ubuntu jammy: libmath-planepath-perl 129-1 Β· GPL-3.0-or-later
- ubuntu noble: libmath-planepath-perl 129-1 Β· GPL-3.0-or-later
- ubuntu resolute: libmath-planepath-perl 129-1 Β· GPL-3.0-or-later
- ubuntu stonking: libmath-planepath-perl 129-1 Β· GPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms