Math::...ule190(3pm)

πŸ“¦
version 129 Β· 3 versions
, in debian bookworm, debian trixie, ubuntu jammy, ubuntu noble, ubuntu resolute, ubuntu stonking

πŸ’– NAME πŸ’–

Math::PlanePath::CellularRule190 β€” cellular automaton 190 and 246 points πŸ¦‹βœ¨

okay so you found the perl manual page for Math::PlanePath::CellularRule190 (that's the manual name, she's a 3pm girlie) and I'm gonna walk you through every single bit of her. no skipping. periodt. πŸ’…


πŸŽ€ SYNOPSIS πŸŽ€

use Math::PlanePath::CellularRule190;
my $path = Math::PlanePath::CellularRule190->new;
my ($x, $y) = $path->n_to_xy (123);

literally three lines and you're in. iconic.


🌸 DESCRIPTION 🌸

bestie. this is the pattern of Stephen Wolfram's "rule 190" cellular automaton:

<http://mathworld.wolfram.com/Rule190.html>

and it's all laid out as rows, like this:

66 67 68    69 70 71    72 73 74    75 76 77    78 79 80      9
   53 54 55    56 57 58    59 60 61    62 63 64    65         8
      41 42 43    44 45 46    47 48 49    50 51 52            7
         31 32 33    34 35 36    37 38 39    40               6
            22 23 24    25 26 27    28 29 30                  5
               15 16 17    18 19 20    21                     4
                   9 10 11    12 13 14                        3
                      5  6  7     8                           2
                         2  3  4                              1
                            1                             <- Y=0

-9 -8 -7 -6 -5 -4 -3 -2 -1 X=0 1  2  3  4  5  6  7  8  9

so each row is 3 out of 4 cells β€” she's got gaps, she's got taste. the even numbered rows have one point on its own at the end. and every two-row group? it has a step of 6 more points than the two-row group before it. the way she grows πŸ˜­πŸ’–

The of rightmost N=1,4,8,14,21,etc are triangular plus quarter square, ie.

Nright = triangular(Y+1) + quartersquare(Y+1)
  triangular(t)    = t*(t+1)/2
  quartersquare(t) = floor(t^2/4)

The rightmost N=1,8,21,40,65,etc on even rows Y=0,2,4,6,etc are the octagonal numbers k*(3k-2). and the octagonal numbers of the "second kind" N=5,16,33,56,85, etc, k*(3k+2) are a straight-ish line upwards to the left. no cap.

πŸͺž Mirror πŸͺž

The mirror => 1 option gives the mirror image pattern which is "rule 246" 🌈. she differs only in the placement of the gaps on the even rows. the point on its own is at the left instead of the right. and the numbering is still left to right. (she's consistent, okay?)

66 67 68    69 70 71    72 73 74    75 76 77    78 79 80      9
   53    54 55 56    57 58 59    60 61 62    63 64 65         8
      41 42 43    44 45 46    47 48 49    50 51 52            7
         31    32 33 34    35 36 37    38 39 40               6
            22 23 24    25 26 27    28 29 30                  5
               15    16 17 18    19 20 21                     4
                   9 10 11    12 13 14                        3
                      5     6  7  8                           2
                         2  3  4                              1
                            1                             <- Y=0

-9 -8 -7 -6 -5 -4 -3 -2 -1 X=0 1  2  3  4  5  6  7  8  9

Sometimes this small change to the pattern helps things line up better. For example plotting the Klaner-Rado sequence gives some unplotted lines up towards the right in the mirror 246 which are not visible in the plain 190. so like, sometimes the mirror version is the one that serves πŸ’…

πŸ“ Row Ranges πŸ“

The left end of each row, both ordinary and mirrored, is:

Nleft = ((3Y+2)*Y + 4)/4     if Y even
        ((3Y+2)*Y + 3)/4     if Y odd

The right end is:

Nright = ((3Y+8)*Y + 4)/4    if Y even
         ((3Y+8)*Y + 5)/4    if Y odd

       = Nleft(Y+1) - 1   ie. 1 before next Nleft

The row width Xmax-Xmin = 2*Y but with the gaps the number of visited points in a row is less than that:

rowpoints = 3*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

math ate, fr fr πŸ”₯

πŸ”’ 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

21 22 23    24 25 26    27 28 29          5
   14 15 16    17 18 19    20             4
       8  9 10    11 12 13                3
          4  5  6     7                   2
             1  2  3                      1
                0                     <- Y=0

-5 -4 -3 -2 -1 X=0 1  2  3  4  5

The effect is to push each N rightwards by 1, and wrapping around. So the N=0,1,4,8,14,etc on the left were on the right of the default n_start=1. This also has the effect of removing the +1 in the Nright formula given above, so:

Nleft = triangular(Y) + quartersquare(Y)

⭐ FUNCTIONS ⭐

See "FUNCTIONS" in Math::PlanePath for behaviour common to all path classes.

  • $path = Math::PlanePath::CellularRule190->new ()
  • $path = Math::PlanePath::CellularRule190->new (mirror => 1, n_start => $n) β€” Create and return a new path 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". (iykyk β€” it just gives up, no drama πŸ’€)
  • ($n_lo, $n_hi) = $path->rect_to_n_range ($x1,$y1, $x2,$y2) β€” The returned range is exact, meaning $n_lo and $n_hi are the smallest and biggest in the rectangle. no guessing, she's precise πŸ’…

πŸ” OEIS πŸ”

This pattern is in Sloane's Online Encyclopedia of Integer Sequences in a couple of forms:

<http://oeis.org/A037576> (etc)

A037576     whole-row used cells as bits of a bignum
A265688       and in binary
A071039     1/0 used and unused cells across rows
A118111       same
A071041     1/0 used and unused of mirrored rule 246

n_start=0
  A006578   N at left of each row (X=-Y),
              and at right of each row when mirrored,
              being triangular+quartersquare

she's in the encyclopedia bestie, she's published πŸ‘‘


πŸ‘€ SEE ALSO πŸ‘€

  • Math::PlanePath
  • Math::PlanePath::CellularRule
  • Math::PlanePath::CellularRule54
  • Math::PlanePath::CellularRule57
  • Math::PlanePath::PyramidRows
  • Cellular::Automata::Wolfram
  • <http://mathworld.wolfram.com/Rule190.html>

go read the whole family, they're all slaying in their own way πŸ’œ


🏠 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/>.

okay so real talk: that warranty disclaimer is not a vibe, she's saying she's literally not responsible if things break. respect the GPL bestie πŸ™ˆ

and that's the whole page, start to finish πŸŽ€ this was perl v5.32.0, dated 2021-01-23, and yes she's still Math::...ule190(3pm) β€” the manual name got folded up top, the footer's right here, everything accounted for. mwah πŸ’‹βœ¨