Nakano, the new Oscillizer

For scripts to aid with computation or simulation in cellular automata.
Post Reply
User avatar
Freywa
Posts: 877
Joined: June 23rd, 2011, 3:20 am
Location: Singapore
Contact:

Nakano, the new Oscillizer

Post by Freywa » July 4th, 2021, 1:30 pm

Frustrated that Jason Summers's Oscillizer is no longer online? I've written a replacement called Nakano.

To use the program (which is written in Python and requires lifelib, Pillow and NumPy):

Code: Select all

>>> from nakano import n
>>> # an apgcode is also acceptable below
>>> n("""x = 55, y = 46, rule = B3/S23
... bo4b2o16bo$obo2bobo15bobo$bo4bo17bo2$33bo$24bo8bo$23bobo$12b2o9b2o8bo$
... 8b3ob7o13b3o$7bobo5b5o11b2ob2o$6b2o2b3o4bob2o14b2o$7b2o2b2o4b2o2bo9b3o
... 2b2o$8bo2b2o4b2o2b2o8b2obobo$9b2obo4b3o2b2o6bo3b2o$10b5o5bobo8bob5o$
... 11b7ob3o10b5obo$16b2o16b2o3bo$33bobob2o8b2o$32b2o2b3o8bo$33b2o10bobo$
... 25bo8b2ob2o6b2o4bo$26b2o7b3o12bobo$19b2o4b2o9bo11b3obo$20bo26bo4b2o$
... 17b3o27bob2o3bo$17bo28b2obob4o$44bo4bo$41b2o3b2o3bob2o$34bo5b4o3b3o4bo
... $35bo7bobo2b2ob2o$33b3o12bo2bo$42b2o3bobobo$43bo4bobo$43bo5bo4$41bobo$
... 42b2o$42bo3$46b2o$46bo$47b3o$49bo!
... """)
p33 oscillator
Cell periods:
p33 – 657
p3 – 39
p1 – 66
Population 183–275, average 225.52
696 rotor cells (657 full-period), 66 stator cells, 762 total
Volatility 0.9134 (0.8622 strict)
Heat 93–197, average 141.39
Temperature 0.1856 (0.2032 rotor)
Bounding box 55×46 = 2530
p33 – ffffff
p3 – 1c92cd
p1 – 000000
This produces the following image at osc.png (which can be changed using the outfn= keyword argument and scaled with scale=):
osc.png
osc.png (5.04 KiB) Viewed 2380 times
It corresponds to Martin's improvement to the p33 gun:

Code: Select all

x = 55, y = 46, rule = B3/S23
bo4b2o16bo$obo2bobo15bobo$bo4bo17bo2$33bo$24bo8bo$23bobo$12b2o9b2o8bo$
8b3ob7o13b3o$7bobo5b5o11b2ob2o$6b2o2b3o4bob2o14b2o$7b2o2b2o4b2o2bo9b3o
2b2o$8bo2b2o4b2o2b2o8b2obobo$9b2obo4b3o2b2o6bo3b2o$10b5o5bobo8bob5o$
11b7ob3o10b5obo$16b2o16b2o3bo$33bobob2o8b2o$32b2o2b3o8bo$33b2o10bobo$
25bo8b2ob2o6b2o4bo$26b2o7b3o12bobo$19b2o4b2o9bo11b3obo$20bo26bo4b2o$
17b3o27bob2o3bo$17bo28b2obob4o$44bo4bo$41b2o3b2o3bob2o$34bo5b4o3b3o4bo
$35bo7bobo2b2ob2o$33b3o12bo2bo$42b2o3bobobo$43bo4bobo$43bo5bo4$41bobo$
42b2o$42bo3$46b2o$46bo$47b3o$49bo!
Nakano also supports spaceships, for which it doesn't give a period map but still prints out relevant statistics:

Code: Select all

>>> n("xq4_w19q0q91zme85c8c58emzbb4okeko4bbzwhqh0hqh") # non-monotonic spaceship 1
c/4o spaceship
Population 66–81, average 73.25
Heat 60–77, average 67.50
Bounding box 13×21 = 273

Code: Select all

x = 11, y = 20, rule = B3/S23
2b2o3b2o$4bobo2$3b2ob2o$4bobo$3bo3bo$2o7b2o$2ob2ob2ob2o$b2ob3ob2o$o9b
o$2o7b2o$2o3bo3b2o$2bob3obo$2obobobob2o$3b2ob2o$2bobobobo$3bo3bo2$3bo
3bo$2b3ob3o!
And oscillators and spaceships in isotropic rules without B0 – the rule can be given in the RLE or in the rule= keyword argument:

Code: Select all

>>> n("""x = 3, y = 6, rule = B2k37/S1e2an3-k6n78
... bo$2bo$3o3$b2o!
... """) # https://conwaylife.com/forums/viewtopic.php?f=11&t=2693&start=75#p69541
c/34d spaceship
Population 6–17, average 10.59
Heat 4–16, average 10.82
Bounding box 7×7 = 49

Code: Select all

x = 3, y = 6, rule = B2k37/S1e2an3-k6n78
bo$2bo$3o3$b2o!

Code: Select all

>>> n("xp94_w32acz4s0gyf33zw1104ahhha4y562sgz33ydo8zyg113", rule="b38s23", outfn="pedestrian-ak94.png")
p94 oscillator
Cell periods:
p94 – 288
p1 – 28
Population 48–86, average 63.62
288 rotor cells (288 full-period), 28 stator cells, 316 total
Volatility 0.9114 (0.9114 strict)
Heat 6–51, average 23.53
Temperature 0.0745 (0.0817 rotor)
Bounding box 25×26 = 650
p94 – ffffff
p1 – 000000
pedestrian-ak94.png
pedestrian-ak94.png (1.81 KiB) Viewed 2380 times

Code: Select all

x = 25, y = 22, rule = B38/S23
2bo$2b3o$5bo$4b2o2$23b2o$23b2o$2o$bo$bobo$2b2o3b3o$6bo3bo10b2o$5bo5bo
9bobo$6bo3bo12bo$7b3o13b2o$2o$2o2$19b2o$19bo$20b3o$22bo!
Feel free to play around with this little gem of a program!
Last edited by Freywa on July 31st, 2021, 10:07 am, edited 3 times in total.
Princess of Science, Parcly Taxel

Code: Select all

x = 31, y = 5, rule = B2-a/S12
3bo23bo$2obo4bo13bo4bob2o$3bo4bo13bo4bo$2bo4bobo11bobo4bo$2bo25bo!

hotdogPi
Posts: 1586
Joined: August 12th, 2020, 8:22 pm

Re: Nakano, the new Oscillizer

Post by hotdogPi » July 4th, 2021, 5:54 pm

I don't have lifelib. Can you get the strict volatilities of the p196, p312, p486, p576, and p2700 and add them to the wiki? (Oscillizer never supported periods above 300.)
User:HotdogPi/My discoveries

Periods discovered: 5-16,⑱,⑳G,㉑G,㉒㉔㉕,㉗-㉛,㉜SG,㉞㉟㊱㊳㊵㊷㊹㊺㊽㊿,54G,55G,56,57G,60,62-66,68,70,73,74S,75,76S,80,84,88,90,96
100,02S,06,08,10,12,14G,16,17G,20,26G,28,38,47,48,54,56,72,74,80,92,96S
217,486,576

S: SKOP
G: gun

User avatar
Freywa
Posts: 877
Joined: June 23rd, 2011, 3:20 am
Location: Singapore
Contact:

Re: Nakano, the new Oscillizer

Post by Freywa » July 4th, 2021, 11:00 pm

hotdogPi wrote:
July 4th, 2021, 5:54 pm
I don't have lifelib. Can you get the strict volatilities of the p196, p312, p486, p576, and p2700 and add them to the wiki? (Oscillizer never supported periods above 300.)
Done – and I added the strict volatilities of Dean Hickerson's p15240 and p40894 PRNG oscillators as well.
Princess of Science, Parcly Taxel

Code: Select all

x = 31, y = 5, rule = B2-a/S12
3bo23bo$2obo4bo13bo4bob2o$3bo4bo13bo4bo$2bo4bobo11bobo4bo$2bo25bo!

User avatar
yujh
Posts: 3066
Joined: February 27th, 2020, 11:23 pm
Location: I'm not sure where I am, so please tell me if you know
Contact:

Re: Nakano, the new Oscillizer

Post by yujh » July 10th, 2021, 3:38 am

Uh, how can I use the program as I'm a windows user? (with WSL and python3.9 and 3.8 and Pillow, Numpy installed)
Rule modifier

B34kz5e7c8/S23-a4ityz5k
b2n3-q5y6cn7s23-k4c8
B3-kq6cn8/S2-i3-a4ciyz8
B3-kq4z5e7c8/S2-ci3-a4ciq5ek6eik7

Bored of Conway's Game of Life? Try Pedestrian Life -- not pedestrian at all!

User avatar
Freywa
Posts: 877
Joined: June 23rd, 2011, 3:20 am
Location: Singapore
Contact:

Re: Nakano, the new Oscillizer

Post by Freywa » July 10th, 2021, 10:49 pm

yujh wrote:
July 10th, 2021, 3:38 am
Uh, how can I use the program as I'm a windows user? (with WSL and python3.9 and 3.8 and Pillow, Numpy installed)
Like any other Python script of course.
Princess of Science, Parcly Taxel

Code: Select all

x = 31, y = 5, rule = B2-a/S12
3bo23bo$2obo4bo13bo4bob2o$3bo4bo13bo4bo$2bo4bobo11bobo4bo$2bo25bo!

Sokwe
Moderator
Posts: 2643
Joined: July 9th, 2009, 2:44 pm

Re: Nakano, the new Oscillizer

Post by Sokwe » July 11th, 2021, 3:40 am

yujh wrote:
July 10th, 2021, 3:38 am
Uh, how can I use the program as I'm a windows user? (with WSL and python3.9 and 3.8 and Pillow, Numpy installed)
You will also need to install lifelib. Opening a terminal and running

Code: Select all

pip install --user --upgrade python-lifelib
should work, I think.

Once you've downloaded and extracted Shinjuku, you need to open the Shinjuku-master directory in a terminal. You may be able to do this by navigating to the directory in your file manager, right clicking on it, and selecting something like "open in terminal". Alternatively, you can open a terminal and use the cd command to move to the correct directory.

Once you have the Shinjuku directory open in a terminal, type "python" and press enter. This starts the python shell. Now run the command

Code: Select all

from shinjuku.nakano import n
To run Nakano
  1. type

    Code: Select all

    n("""
  2. paste the RLE of the pattern you want to analyse
  3. type

    Code: Select all

    """)
  4. press enter
For example, I tried it with the following capped p24 gun:

Code: Select all

x = 40, y = 31, rule = B3/S23
5b2ob2o15b2ob2o$5b2obo17bob2o$8bo4b3o3b3o4bo$8b2o3bo7bo3b2o$13b2obobob
2o$3bobo9b2ob2o13bo$b3ob3o24b2o$o7bo22b2o$ob6o22bo$7bo21bob4o$bo2bo7b
3o5b3o5bobo4bo$2bobo2b2o3bo2b2ob2o2bo4b2obob2obo2b2o$3bo3b3o3b3o3b3o4b
2o2bob2obob2o$7b3o4bo5bo9bo4bobo$7b3o21b4obo$7b3o25bo$7b2o24b2o$7bo24b
2o$5bobobo22bo$4bobob2o13bo$4bobo6b2ob2o6b2o$5b2o4b3obob3o3b2o$10bo4bo
4bo$9bobob2o2b2obo$9bobo3b2o2bo$8b2obob2o2b2o10b2o$6bo2bobo4bo12bobo$
6b2o2b2ob4o14bo$12bo18b2o$12bobo$13b2o!
Here's what my terminal looks like:

Code: Select all

>>> from shinjuku.nakano import n
>>> n("""x = 40, y = 31, rule = B3/S23
... 5b2ob2o15b2ob2o$5b2obo17bob2o$8bo4b3o3b3o4bo$8b2o3bo7bo3b2o$13b2obobob
... 2o$3bobo9b2ob2o13bo$b3ob3o24b2o$o7bo22b2o$ob6o22bo$7bo21bob4o$bo2bo7b
... 3o5b3o5bobo4bo$2bobo2b2o3bo2b2ob2o2bo4b2obob2obo2b2o$3bo3b3o3b3o3b3o4b
... 2o2bob2obob2o$7b3o4bo5bo9bo4bobo$7b3o21b4obo$7b3o25bo$7b2o24b2o$7bo24b
... 2o$5bobobo22bo$4bobob2o13bo$4bobo6b2ob2o6b2o$5b2o4b3obob3o3b2o$10bo4bo
... 4bo$9bobob2o2b2obo$9bobo3b2o2bo$8b2obob2o2b2o10b2o$6bo2bobo4bo12bobo$
... 6b2o2b2ob4o14bo$12bo18b2o$12bobo$13b2o!
... """)
Instruction set AVX1 detected
checking p1
checking p2
checking p3
checking p4
checking p6
checking p8
checking p12
checking p24
p24 oscillator
Cell periods:
p24 - 229
p12 - 132
p6 - 23
p4 - 44
p2 - 5
p1 - 111
Population 211-296, average 242.92
433 rotor cells (229 full-period), 111 stator cells, 544 total
Volatility 0.7960 (0.4210 strict)
Heat 72-191, average 115.33
Temperature 0.2120 (0.2664 rotor)
Bounding box 42x31 = 1302
p24 - ffffff
p12 - 1c92cd
p6 - 0ab87b
p4 - e86075
p2 - f8f290
p1 - 000000
This also generated the file osc.png in the shinjuku-master directory:
osc.png
osc.png (4.44 KiB) Viewed 2132 times
-Matthias Merzenich

User avatar
Freywa
Posts: 877
Joined: June 23rd, 2011, 3:20 am
Location: Singapore
Contact:

Re: Nakano, the new Oscillizer

Post by Freywa » July 29th, 2021, 2:20 pm

Nakano now computes the mod, symmetry and temporal symmetry of input patterns; the output format is essentially the same as that used in DRH's oscillator stamp collection with apgsearch symmetry codes in place of the old custom notation. For example, 2.2.6 has mod 1 and ".c+c" (C2_1 with temporal D4_+1) symmetry:

Code: Select all

>>> n("xp2_g8j1cdj8gz01cb38c1")
p2 oscillator
Symmetry C2_1 (temporal D4_+1), mod 1
Cell periods:
p2 – 8
p1 – 24
Population 28–28, average 28.00
8 rotor cells (8 full-period), 24 stator cells, 32 total
Volatility 0.2500 (0.2500 strict)
Heat 8–8, average 8.00
Temperature 0.2500 (1.0000 rotor)
Bounding box 9×9 = 81
p2 – ffffff
p1 – 000000

Code: Select all

x = 9, y = 9, rule = B3/S23
4bo$3bobo$2o2bo2b2o$o4b2obo$2b2ob2o$ob2o4bo$2o2bo2b2o$3bobo$4bo!
The p196 pi-heptomino hassler has C2_4 symmetry and D4_x4 symmetry, which would be ".kxk" in DRH notation:

Code: Select all

>>> n("xp196_yfccy28e1e88gzyeks8y2330311zyqoozwggzw11y6ggzg88c0ccy2132z0117871y233")
p196 oscillator
Symmetry C2_4 (temporal D4_x4), mod 98
Cell periods:
p196 – 448
p98 – 38
p1 – 38
Population 66–128, average 95.33
486 rotor cells (448 full-period), 38 stator cells, 524 total
Volatility 0.9275 (0.8550 strict)
Heat 2–84, average 32.78
Temperature 0.0625 (0.0674 rotor)
Bounding box 34×34 = 1156
p196 – ffffff
p98 – 1c92cd
p1 – 000000
osc.png
osc.png (3.1 KiB) Viewed 1984 times
For reference I quote the relevant section of the stamp collection's comments with equivalent symmetry codes:

Code: Select all

#C The 'period' of an oscillator (or spaceship) is the smallest positive
#C integer P for which generation P of the object is congruent to and in
#C the same orientation as generation 0.  The 'mod' of an oscillator (or
#C spaceship) is the smallest positive integer M for which generation M
#C of the object is congruent to generation 0, but not necessarily in the
#C same orientation.  The quotient q=P/M is always either 1, 2, or 4.  To
#C specify both P and M, we often write "period P.M" or "period P/q".
#C
#C There are 43 types of symmetry that an oscillator can have, taking into
#C account both the symmetry of a single generation and the change of
#C orientation (if any) M generations later.  There are 16 types of
#C symmetry that a pattern can have in a single generation.  Each of these
#C is given a one or two character name, as follows:
#C 
#C    n   no symmetry [C1]
#C 
#C    -c  mirror symmetry across a horizontal axis through cell centers [D2_+1]
#C    -e  mirror symmetry across a horizontal axis through cell edges [D2_+2]
#C 
#C    /   mirror symmetry across one diagonal [D2_x]
#C 
#C    .c  180 degree rotational symmetry about a cell center [C2_1]
#C    .e  180 degree rotational symmetry about a cell edge [C2_2]
#C    .k  180 degree rotational symmetry about a cell corner [C2_4]
#C 
#C    +c  mirror symmetry across horizontal and vertical axes meeting
#C        at a cell center [D4_+1]
#C    +e  mirror symmetry across horizontal and vertical axes meeting
#C        at a cell edge [D4_+2]
#C    +k  mirror symmetry across horizontal and vertical axes meeting
#C        at a cell corner [D4_+4]
#C 
#C    xc  mirror symmetry across 2 diagonals meeting at a cell center [D4_x1]
#C    xk  mirror symmetry across 2 diagonals meeting at a cell corner [D4_x4]
#C 
#C    rc  90 degree rotational symmetry about a cell center [C4_1]
#C    rk  90 degree rotational symmetry about a cell corner [C4_4]
#C 
#C    *c  8-fold symmetry about a cell center [D8_1]
#C    *k  8-fold symmetry about a cell corner [D8_4]
#C 
#C For a period P/1 object, specifying the symmetry of generation 0 tells
#C us all there is to know about the oscillator's symmetry.  For a period
#C P/2 or P/4 object, we also need to know how gen M is related to gen 0.
#C For the P/2 case, gen M can be either a mirror image of gen 0, a 180
#C degree rotation of it, or a 90 degree rotation of it if the pattern
#C has 180 degree rotational symmetry.  For the P/4 case gen M must be a
#C 90 degree rotation of gen 0.  In any case, if we merge all gens which
#C are multiples of M, the resulting pattern will have more symmetry than
#C the original oscillator.  We describe the complete symmetry class of
#C the oscillator by appending the one or two character description of
#C the union's symmetry to that of gen 0's symmetry.  For example, if
#C gen 0 has 180 degree rotational symmetry about a cell center, and
#C gen M is obtained by reflecting gen 0 across a diagonal, then the
#C union of gens 0 and M is symmetric across both diagonals, so its
#C symmetry class is denoted ".cxc".
#C 
#C The 43 possible symmetry types are:
#C 
#C    period/mod = 1:  nn    -c-c  -e-e  //    .c.c  .e.e  .k.k  +c+c
#C                     +e+e  +k+k  xcxc  xkxk  rcrc  rkrk  *c*c  *k*k
#C 
#C    period/mod = 2:  n-c   n-e   n/    n.c   n.e   n.k
#C                     -c+c  -c+e  -e+e  -e+k
#C                     /xc   /xk
#C                     .c+c  .cxc  .crc  .e+e  .k+k  .kxk  .krk
#C                     +c*c  +k*k  xc*c  xk*k  rc*c  rk*k
#C 
#C    period/mod = 4:  nrc   nrk
#C 
#C The collection includes examples of all of these with mod=1, and many
#C with larger periods.
x = 191, y = 249, rule = B3/S23
98b2o$99bo23b2o8b2o32bo$82bo16bobo9b2o10b2o7bo32b3o$13b3o19bo45bo2bo
15b2o9bo23bo28bo$11bo22bobo41bo2bo2bo24bobo19b2obo29b2o$11bo4bo16bobob
o39bobobobob2o17bo4b2o20b2o51bo$12bo20bo3bo18bo8bo12bo2bo2bo18bob2o47b
3o26bobo$14b2o14b2obobobob2o14bob3o2b3obo14bo5bo15bo3bo47bo26bobobo$
15bo14bobo5bobo15bo2bo2bo2bo16b5o17b2obo54bo16bo2bo3bo2bo$15bo17b5o21b
o2bo37b2o4bo54b3o14bobob2ob2obobo$15bo19bo48bo14bobo28b2o47bo2bo3bo2bo
$83bobo13bo9b2o17bob2o20b2o28bobobo$84bo13b2o9bobo15bo25bo29bobo$111bo
18bo7b2o10b3o31bo$111b2o15b2o8b2o10bo5$61b2o$13bo48bo$12bobo47bobo$12b
obo45b2obobo$8b2ob2ob2ob2o11b2o6b2o19bobobobo61b2o$8bo4bo4bo10bobo6bob
o17bobo2bo2b2o14b3o42bobo29bo$9b3o3b3o11bo10bo16bo5bo4bo11bo45bo4bo5bo
20bobo$11bobobo10b2obo10bob2o12bo7b4o11bobobo18bobo2bo19bobob2o2b2ob2o
17bobobo$26b2obobo2b2o2bobob2o11bo12b3o9bo2bo3bo14b3obob2o17bo3bo7bo
17bo3bo21b2o$29bobobo2bobobo13bo5bo5b2o2bo7bo5b2obo13bo6bo27bobo16b2o
2bo2b2o18bo2bo$29bobobo2bobobo12bobo3bobo3bobo10bob2o5bo14bo5b2o44bo4b
o4bo16bo4bo$26b2obobo2b2o2bobob2o6bo2b2o5bo5bo11bo3bo2bo41bo7b3o15bobo
b2ob2obobo14bo6bo$11bobobo10b2obo10bob2o6b3o12bo16bobobo14b2o5bo17b3o
7bo17bo4bo4bo15bo6bo$9b3o3b3o11bo10bo12b4o7bo20bo16bo6bo45b2o2bo2b2o
17bo4bo$8bo4bo4bo10bobo6bobo11bo4bo5bo17b3o17b2obob3o16bobo29bo3bo20bo
2bo$8b2ob2ob2ob2o11b2o6b2o13b2o2bo2bobo40bo2bobo15bo7bo3bo20bobobo21b
2o$12bobo40bobobobo62b2ob2o2b2obobo21bobo$12bobo40bobob2o65bo5bo4bo21b
o$13bo42bobo75bobo$58bo76b2o$58b2o25$112b2o$112b2o3$56b2o20bo6b2o$9b2o
5b2o32bob2obobo15b4o3bo4b2o25bo$9bo7bo32b2obobo20bo3bo30bobo18b2o$6b2o
bo7bob2o13b2o18b2o24bo29bo3bo15bo2bo$6bo2b2o5b2o2bo13b2ob2o38bo6b2o25b
3o$7b2o6bo2b2o19bo16bo4b2o15b2o4bobo4b2o16b2o3b2o14bo2bo$9b3o4b2o16b2o
19bo3bo2bo21b3o6bo37bo2bo$9bo4bo2bo16bo20bo4b2o28bo41bobo$10b7o15bo2bo
3b2o15bobo31bo3bo38bo$32bo3b5o19b2o22b2o4bo3b4o$12b3o17bo28bo22b2o6bo
39b2o$11bo3bo44bo71b2o$11b2ob2o44b2o4$111b2o$111b2o6$32bo7bo$31bobo5bo
bo14bo3bo$32bo7bo14bobobobo$55bobobobo$56bobobo$58bo16bo20bo$9bo5bo41b
o2bo14bo20bo$8bobo3bobo40bo16bobo5bo6bo5bobo$8bo2bobo2bo16bo5bo17bo3bo
13bo4b2ob2o2b2ob2o4bo$10bo3bo18bo5bo17bo3bo13bo20bo$10b2ob2o17bobo3bob
o16bo17bo7b2o2b2o7bo$33bo5bo17bo2bo14bo20bo$33bo5bo18bo15bobo5bo6bo5bo
bo$56bobobo14bo4b2o8b2o4bo$55bobobobo13bo20bo$32bo7bo14bobobobo$31bobo
5bobo14bo3bo$32bo7bo10$35b2o$13bo21b2o$13bobo$12bobo$14bo21bo$35b3o$
12bo6bo14bo2bo$8b2obobo3b2o9b2o5b2o$8b2o2bobo4b2o7b2o$13bobo2bo$14bo
26b2o$3bo4b2o23b2o5bob2o2b2o$3bobo2bobo2b2o19bo5bobo3b2o$2bobo4b2o2b2o
20b2o4bo$4bo31bo2$9bo$7b2o$9b2o28b2o$8bo30b2o2$159bo$158bobo$149b2o7bo
bo$149b2o6b2ob3o$77b2o15b2o67bo$77b2o15b2o61b2ob3o$105b2o10b2o38b2obo$
51b2o52b2o10b2o29b2o$51b2o96b2o26bo$105bo12bo29b2o26bob2o$104bobo10bob
o60b2o$54b2o36bo11bo2bo8bo2bo57b2o$10bo24bo19b2o8b2o24bobo11bo2bo6bo2b
o60b3o$9bobo21b2obo28b2o24bobo66b2o$6b2o2bo2b2o16bo4bo55bo12bo2bo3bo2b
o2bo41b2o24b3o$6bob2o4bo15b3o23bobo29bo16b2o4bobo3b2o57b2ob3o2b2o$8b2o
b2o42bo3bo24b2obobo24bo57b7o$6bo4b2obo17b3o19bo3bo24bo6bo22bo67b7o$6b
2o2bo2b2o13bo4bo19bo3bo24bo6bo20bo63b2o2b3ob2o$9bobo16bob2o22bobo26bob
ob2o20bo22b2o37b3o$10bo18bo54bo20b2o3bobo4b2o13b2o$46b2o32bo24bo2bo2bo
3bo2bo59b3o$46b2o8b2o21bobo99b2o$57b2o20bobo23bo2bo6bo2bo59b2o$80bo23b
o2bo8bo2bo24b2o34b2obo$104bobo10bobo23b2o37bo$60b2o43bo12bo25b2o$60b2o
71bob2o$105b2o10b2o12b3ob2o$105b2o10b2o11bo$77b2o15b2o35b3ob2o6b2o$77b
2o15b2o37bobo7b2o$133bobo$134bo6$2b2o11b2o$2b2o11b2o$bo2bo9bo2bo$2bobo
9bobo64b2o3b4o62bo$32b2o47b2o2bo4bo22b2o25b3o7bobo$b3o11b3o13bo2bo44b
2obo2bo3bobo21bobo29bo4bobo$bo2bo9bo2bo13b4o19b2ob2o20b3o4bo3bobo15bo
4bob2o24b2obob2o$o2bo11bo2bo10bobo2bobo16bob2o2bo32bo14b2o5bo29bo4b2o$
b2o13b2o10bo8bo15b2o4bo32bo13bo2bo36bo4bo$28bo8bo16bo3bo21b2o7bo2bo13b
3o34bo4bobo$b2o13b2o11bobo2bobo16bo4b2o19bo2bo7b2o51bobo4bo$o2bo11bo2b
o12b4o18bo2b2obo19bo36b3o23bo4bo$bo2bo9bo2bo13bo2bo19b2ob2o20bo35bo2bo
24b2o4bo$b3o11b3o14b2o45bobo3bo4b3o17bo5b2o28b2obob2o$80bobo3bo2bob2o
15b2obo4bo24bobo4bo$2bobo9bobo64bo4bo2b2o18bobo29bobo7b3o$bo2bo9bo2bo
64b4o3b2o19b2o29bo$2b2o11b2o$2b2o11b2o29$34b2o3b2o$33bo7bo$36bobo$34b
2o3b2o$3bo$3b3o$6bo9b2o$5b2o9bo31b3o$14bobo30b3o$8b2o4b2o24bo$7bo2bo
16b3o9b3o$10bo17b3o$7bo2bo36b3o$9bo38b3o2$3b2o23b3o$2bobo22b3o9b3o$2bo
9b2o26bo$b2o9bo$13b3o$15bo21b2o3b2o$39bobo$36bo7bo$37b2o3b2o!
Princess of Science, Parcly Taxel

Code: Select all

x = 31, y = 5, rule = B2-a/S12
3bo23bo$2obo4bo13bo4bob2o$3bo4bo13bo4bo$2bo4bobo11bobo4bo$2bo25bo!

User avatar
Freywa
Posts: 877
Joined: June 23rd, 2011, 3:20 am
Location: Singapore
Contact:

Re: Nakano, the new Oscillizer

Post by Freywa » July 31st, 2021, 5:58 am

As of this commit Nakano now computes the minrule and maxrule with respect to both isotropic and outer-totalistic rulespaces and prints the apgcode, which means that Nakano is a super-Oscillizer, with all features of the old program and then some.

Code: Select all

>>> from shinjuku.nakano import n
>>> n("""x = 41, y = 29, rule = B3/S23
... 12boo$12boobo15bo$16bo13bobo$8bo4bo11bo$7bobo4boboo5b3o4bo7boo$16boo4b
... o7boo6bobo$9bo12boo3b5o3boobobo$8boo17booboo3bobobo$8b5o17bo6bo$boo5b
... ooboo22bobbo$obo6bo28bo$oboboo28bo3bo$bobobo12b3o8bobobbo3bo$3bo14bobo
... 8bobbo5bo$bbobbo3bobo6b3o8bobo3bobbo$bbo5bobbo25bo$bbo3bobbobo23bobobo
... $bbo3bo28boobobo$bbo28bo6bobo$bbobbo22booboo5boo$3bo6bo17b5o$bobobo3b
... ooboo17boo$oboboo3b5o3boo12bo$obo6boo7bo4boo$boo7bo4b3o5boobo4bobo$15b
... o11bo4bo$8bobo13bo$9bo15boboo$27boo!""")
p96 oscillator – xp96_0ggy142ky0oggy1gk2gb3wg8gz34jc2mx7f266x23y011xoo8usy1ggzwvwg608k0sy4sksy2g0hxm2cj43zcis346wgo0ggyc302106gwvzy3g3n1110g0ooy0ckgg0664vex643siczy41xcd042y41y0242
Symmetry C1 (temporal C2_1), mod 48
Cell periods:
p96 – 114
p48 – 1
p12 – 56
p8 – 84
p4 – 56
p3 – 88
p2 – 12
p1 – 72
Population 177–240, average 210.77
411 rotor cells (114 full-period), 72 stator cells, 483 total
Volatility 0.8509 (0.2360 strict)
Heat 115–196, average 162.33
Temperature 0.3361 (0.3950 rotor)
Bounding box 41×33 = 1353
Rules B3/S23-k – B34q5c6ci/S234cy6i7e (OT B3/S23)
p96 – ffffff
p48 – 1c92cd
p12 – 0ab87b
p8 – e86075
p4 – f8f290
p3 – ba4117
p2 – d91e9b
p1 – 000000
osc.png
osc.png (4.68 KiB) Viewed 1932 times
For auditing purposes here's the little script I wrote to generate the mooreconfs array:

Code: Select all

#!/usr/bin/env python3
import numpy as np

# 0,
# 1c, 1e, 2c, 2e, 2k, 2a, 2i,
# 2n, 3c, 3e, 3k, 3a, 3i, 3n,
# 3y, 3q, 3j, 3r, 4c, 4e, 4k,
# 4a, 4i, 4n, 4y, 4q, 4j, 4r,
# 4t, 4w, 4z, 5c, 5e, 5k, 5a,
# 5i, 5n, 5y, 5q, 5j, 5r, 6c,
# 6e, 6k, 6a, 6i, 6n, 7c, 7e,
# 8

# B0 required = 1
# B0 forbidden = -1
# S0 required = 2
# S0 forbidden = -2
# B1c required = 3
# B1c forbidden = -3
# S1c required = 4
# S1c forbidden = -4, etc.

arrays = ("00000000", 
          "10000000", "01000000",
          "10100000", "01010000", "10001000", "11000000", "00011000", "10000001",
          "10100100", "01011000", "10001010", "11010000", "11100000", "10110000", "10100010", "11000001", "11001000", "11000010",
          "10100101", "01011010", "10110010", "11110000", "10111000", "11100100", "10101100", "11010001", "11001010", "11011000", "11100010", "11001001", "11000011",
          "01011011", "10100111", "01110101", "00101111", "00011111", "01001111", "01011101", "00111110", "00110111", "00111101",
          "01011111", "10101111", "01110111", "00111111", "11100111", "01111110",
          "01111111", "10111111",
          "11111111")
table = [-1] * 256

for (k, neigh) in enumerate(arrays):
    b = [int(c) for c in neigh]
    A = np.array([[b[0], b[1], b[2]],
                  [b[3], 0,    b[4]],
                  [b[5], b[6], b[7]]])
    for m in range(4):
        rA = np.rot90(A, m).flatten() @ (128, 64, 32, 16, 0, 8, 4, 2, 1)
        table[rA] = k
        rA = np.rot90(A, m).T.flatten() @ (128, 64, 32, 16, 0, 8, 4, 2, 1)
        table[rA] = k
print(table)
Edit: Nakano has been moved to its own repository!
Princess of Science, Parcly Taxel

Code: Select all

x = 31, y = 5, rule = B2-a/S12
3bo23bo$2obo4bo13bo4bob2o$3bo4bo13bo4bo$2bo4bobo11bobo4bo$2bo25bo!

Post Reply