ConwayLife.com - A community for Conway's Game of Life and related cellular automata
Home  •  LifeWiki  •  Forums  •  Download Golly

A small modification of dr

For scripts to aid with computation or simulation in cellular automata.

A small modification of dr

Postby Sokwe » September 10th, 2014, 5:35 am

Presented here is a small modification of Dean Hickerson's drifter search which, I think, aids in finding symmetric oscillators. Dean's program maintains two grids of cells: the state of the current generation and the state of the background. Normally, the background is required to be stable and is checked for stability whenever it is changed. This modification causes some pre-set cells to not be checked for stability.

I added 3 new states for the read command, namely '2', '3', and '4'. They work in the same way as '.', 'o', and '?' respectively, but they also flag the background as "DONTCHECK". I generally start a search using this modification by picking a symmetry type and filling the center of the pattern with 4s. Here is an example input file:
; Looks for billiard tables with 180-degree rotational symmetry.
; The 4s in the read command cause the background of the central 9 cells
; to not be checked for consistency.  The variable v127 is set to 1 so
; that the cells marked with 4s are not considered when checking the
; bounds on changed cells.
c18
h9
w9
v127 1
rot180symm
r39 39
444
444
444!
skipstable
skipfizzle

Note: searches of this type should generally have variable 127 set to 1. This causes the cells marked by '2', '3', and '4' to not be counted when checking the bounds on changed cells (that is, cells that are different from the background).

The modified code is contained in an attached zip file, along with the dr documentation and the knownrotors file. The knownrotors file is (mostly) complete up to oscillators found on Sep. 10, 2014.
Attachments
dr2.zip
(114.3 KiB) Downloaded 427 times
-Matthias Merzenich
Sokwe
Moderator
 
Posts: 1388
Joined: July 9th, 2009, 2:44 pm

Re: A small modification of dr

Postby codeholic » October 20th, 2014, 4:25 pm

Would you please also share the modified source? I've got a different OS.
Ivan Fomichev
User avatar
codeholic
Moderator
 
Posts: 1141
Joined: September 13th, 2011, 8:23 am
Location: Hamburg, Germany

Re: A small modification of dr

Postby Sokwe » October 20th, 2014, 11:30 pm

codeholic wrote:Would you please also share the modified source? I've got a different OS.

Oh no! I thought it was already in there. :oops:
Attachments
dr2.c
(76.01 KiB) Downloaded 382 times
-Matthias Merzenich
Sokwe
Moderator
 
Posts: 1388
Joined: July 9th, 2009, 2:44 pm

Re: A small modification of dr

Postby Scorbie » January 9th, 2015, 10:15 am

Although this thread wasn't active for a while, I would like to raise some questions while working with dr, as I hope that somebody might be interested as future reference.

1) N.B. for Cygwin users: I'm not sure why, but compiling dr(2) with Cygwin might not work. At least it doesn't work in my system. When it reads from the input file, the program would go something like "EOF or illegal character taken." I don't think this is a big thing because there is a solution: not to use Cygwin.

2) N.B. A basic thing:
The output is rather large, so putting it in a file would be the best. Trying this in the cmd line:
dr (or dr2) < input-file > output-file
would do that without modifying the source code.
And of course, compiling the source yourself with optimization flags would make the program faster.

3) symmetries doesn't seem to copy 0&1 cells properly. I had this input once:
c18
h3
w10
horsymm
v127 1
r34 40
o.o....?
o.o.0oo?
o..o1..o
o..1o..o
?oo0.o.o
?..??o.?!
d0 34 40 39 47
D0 36 43 39 44
D0 p35 44
D0 p36 42
D0 p37 45
skipstable
skipfizzle
if you run this (on the console would suffice) it copies '1' as 'o' and '0' as '.'
4) And here's a mystery. I had tried to find a phase-shifting oscilator inspired by this p12 and p17 by Sokwe (and a p12 turnover agar from randomagar):
x = 51, y = 25, rule = B3/S23
9bo25bo$9b3o22bobo$12bo22bo2b2o$7b5o2bo24bo$6bo5b3o18b6o$5bobo3bo5bo
14bo6b3o$6bo5bo3bobo13b3o3bo3bob2o$7b5obobobobo19bo2bobobo$3b2o6bobobo
3bo12b7obobobobo2bo$4bo2b3o2b2obo3bob2o8bo6bobobo3bobobo$2bobobo2bo5bo
3bobo9bo2b3o2b2obo3bo2bo$bobobob2o5b2obobobo6b2obobo2bo5bo3bo$bobo3bo
5bo2bobobo7bobobob2o5b2obobobo$2obo3bob2o2b3o2bo11bo3bo5bo2bobob2o$3bo
3bobobo6b2o7bo2bo3bob2o2b3o2bo$3bobobobob5o10bobobo3bobobo6bo$4bobo3bo
5bo10bo2bobobobob7o$5bo5bo3bobo12bobobo2bo$8b3o5bo14b2obo3bo3b3o$8bo2b
5o19b3o6bo$10bo27b6o$11b3o23bo$13bo23b2o2bo$40bobo$41bo!

And here's my attempt, but both dr and dr2 fails to find either of those patterns. Wonder why.
c50
h15
w15
rot90symm
r36 36
??????o.
....o.o.
oooo.1o.
?.1...o.
?o.....o
?.o...1.
?.o1.oooo
?.o.o....
?.o!
d0 37 36 37 39
d0 38 36 38 38
d0 p39 37
skipstable
skipfizzle


EDIT^2: And one of my goals in GOL scripting is to write a program that optimizes the stator from a given rotor. I wish that It would also cover bellman's mkstill. (But not in the near future, I suppose)

EDIT: the attatchment is the list of variables used in dr, in case someone missed it.
Attachments
dr.variables.txt
(3.34 KiB) Downloaded 313 times
Best wishes to you, Scorbie
User avatar
Scorbie
 
Posts: 1368
Joined: December 7th, 2013, 1:05 am

Re: A small modification of dr

Postby Sokwe » January 9th, 2015, 5:30 pm

Scorbie wrote:I'm not sure why, but compiling dr(2) with Cygwin might not work. At least it doesn't work in my system. When it reads from the input file, the program would go something like "EOF or illegal character taken." I don't think this is a big thing because there is a solution: not to use Cygwin.

I don't know about running under cygwin, but with the normal executable there are some errors that occur when commands are written in a certain order in the input file. It could be related to that, but I'm not sure. I haven't had time to track down why these errors occur.

Scorbie wrote:symmetries doesn't seem to copy 0&1 cells properly.

Symmetries only copy the stable background pattern. As I recall, it's not difficult to modify the source to get it to copy the initial "1" and "0" cells, but I'm away from my normal computer right now, and it's been long enough since I worked with dr that I don't remember exactly how to do it.

Scorbie wrote:I had tried to find a phase-shifting oscilator inspired by this p12 and p17 by Sokwe (and a p12 turnover agar from randomagar)... And here's my attempt, but both dr and dr2 fails to find either of those patterns...

Any drifter must "flow out" from the initial perturbation (i.e., the "0" and "1" cells). The regions where the p4 and p8 oscillators are must initially be stable, and I think that with your input file there just isn't a natural way to start up the p4 or p8 oscillators without the whole thing falling apart. Also, since your input file doesn't include "2", "3", or "4" cells, dr2 should behave exactly the same as dr.
-Matthias Merzenich
Sokwe
Moderator
 
Posts: 1388
Joined: July 9th, 2009, 2:44 pm

Re: A small modification of dr

Postby Scorbie » January 9th, 2015, 9:52 pm

Thanks for the quick response!
Sokwe wrote:but with the normal executable there are some errors that occur when commands are written in a certain order in the input file
Yeah, I heard you say that before and I always follow the order of your example on the top of this thread.
Sokwe wrote:Symmetries only copy the stable background pattern. As I recall, it's not difficult to modify the source to get it to copy the initial "1" and "0" cells, but I'm away from my normal computer right now, and it's been long enough since I worked with dr that I don't remember exactly how to do it.
Yeah, I'll figure it out sooner or later.
Sokwe wrote:Any drifter must "flow out" from the initial perturbation (i.e., the "0" and "1" cells). The regions where the p4 and p8 oscillators are must initially be stable, and I think that with your input file there just isn't a natural way to start up the p4 or p8 oscillators without the whole thing falling apart. Also, since your input file doesn't include "2", "3", or "4" cells, dr2 should behave exactly the same as dr.
Real thanks for this one! I originally tried with 4 cells instead of ? cells, and that also did not work. I'll try to add 1s and 0s. Thanks!
Best wishes to you, Scorbie
User avatar
Scorbie
 
Posts: 1368
Joined: December 7th, 2013, 1:05 am

Re: A small modification of dr

Postby Scorbie » January 10th, 2015, 4:35 am

Scorbie wrote:Real thanks for this one! I originally tried with 4 cells instead of ? cells, and that also did not work. I'll try to add 1s and 0s. Thanks!
Urgh...It gives me false positives. Have you seen it giving false rotors? Cause this is the first time.
Attachments
report.txt
input file and false positive rotors.
(2.01 KiB) Downloaded 344 times
Best wishes to you, Scorbie
User avatar
Scorbie
 
Posts: 1368
Joined: December 7th, 2013, 1:05 am

Re: A small modification of dr

Postby simsim314 » January 10th, 2015, 5:21 am

Scorbie wrote:N.B. for Cygwin users: I'm not sure why, but compiling dr(2) with Cygwin might not work.


gcc compilation works like a charm. You're referring to run-time issues...

Scorbie wrote:When it reads from the input file, the program would go something like "EOF or illegal character taken.


I had two issues and solved them pretty easily (after that dr2 worked fine):

1. Have knownrotors file in the same directory as the executable.
2. Have the working directory from where I run dr2.exe to be set to the executing folder.

At first I would open a command line and run dr2.exe from some other directory. And it complained it can't find knownrotors file.

Other than that the sample from documentation worked great and found the results mentioned.
User avatar
simsim314
 
Posts: 1545
Joined: February 10th, 2014, 1:27 pm

Re: A small modification of dr

Postby Sokwe » January 10th, 2015, 6:02 am

Scorbie wrote:Urgh...It gives me false positives. Have you seen it giving false rotors? Cause this is the first time.

I think that's a problem with dr2. If you start with any '2', '3', or '4' cells, you can get output that is interpreted as a semifizzle even though it's an oscillator. Therefore I forced dr2 to treat semifizzles as oscillators so that it wouldn't miss valid output. When using dr2, I almost always set up the search using only '.', 'o', and '4'. If you are using only '.', 'o', '0', and '1' in your initial pattern then you should use dr (instead of dr2). I'll try to fix this issue when I get some time.
-Matthias Merzenich
Sokwe
Moderator
 
Posts: 1388
Joined: July 9th, 2009, 2:44 pm

Re: A small modification of dr

Postby Sokwe » January 12th, 2015, 3:37 pm

Scorbie wrote:It gives me false positives.

Like I said before, I think that the presence of the '1' cells is causing the problem. Notice that in the output for the second pattern, after six generations all of the '1' cells are off, and all other cells are in their original state. I think the following input should accomplish what you want:
c50
h15
w15
rot90symm
v127 1
d2 36 36 44 44
r36 36
444344o.4
....o.o.4
oooo.oo.4
4.o...o.3
4o.....o4
3.o...o.4
4.oo.oooo
4.o.o....
4.o443444!
d0 37 36 37 39
d0 38 36 38 38
d0 p39 37
skipstable
skipfizzle

All I did was change '1' cells to 'o' and add the line "d2 36 36 44 44" before the initial pattern is read. This extra line causes all of the initial cells to be labeled DONTCHECK which in this particular case doesn't cause any problems because almost all of the boundary cells in your initial pattern are DONTCHECK cells. Note that it is important to set the DONTCHECK cells before giving the input pattern. When an input pattern is given, it adds the cells one at a time to the background and then checks each such cell and all of its neighbours for consistency. If some of its neighbors aren't already flagged as DONTCHECK, it can cause errors.

I am curious why your output has '1' where the initial '3' cells are. I feel like it should be 'o' instead (I thought I made it so that '3' was equivalent to 'o' but also flagged the cell as DONTCHECK).
-Matthias Merzenich
Sokwe
Moderator
 
Posts: 1388
Joined: July 9th, 2009, 2:44 pm

Re: A small modification of dr

Postby Scorbie » January 13th, 2015, 12:37 am

Sokwe wrote:Note that it is important to set the DONTCHECK cells before giving the input pattern.
Wow. Didn't know that! (Thought the initial background always had to be stable)

EDIT: tried using params with your script. It found your p12 but sadly couldn't find your p17. Maybe there's something else that I missed.(also replaced the 3 with 2s but that didn't find anything)

EDIT2: Not sure if this helps much, but these are the tools I use for dr:
rotorviewer.rule
@RULE rotorviewer

@TABLE

# rules:
#
# Golly rule-table format.
# Each rule: C,N,NE,E,SE,S,SW,W,NW,C'
# N.B. Where the same variable appears multiple times in a transition,
# it takes the same value each time.
#
# Default for transitions not listed: no change
#
# States:
# N.B. Initially I intended this rule to "stabilize" patterns into rotor with stator patterns.
# Didn't turn out well, and states 0 and 1 (and possibly 2 and 3) are obsolete now.
# 0: empty cell
# 1: simple ON cell
# 2: always OFF cell
# 3: always ON cell
# 4: dr's 0 cell
# 5: dr's @ cell
# 6: dr's 1 cell
# 7: dr's A cell
# 8: dr's 2 cell
# 9: dr's B cell
#10: dr's 3 cell
#11: dr's C cell
n_states:12
neighborhood:Moore
symmetries:rotate8
var x1={0,2,4,6,8,10}
var x2={0,2,4,6,8,10}
var x3={0,2,4,6,8,10}
var x4={0,2,4,6,8,10}
var x5={0,2,4,6,8,10}
var x6={0,2,4,6,8,10}
var x7={0,2,4,6,8,10}
var o1={1,3,5,7,9,11}
var o2={1,3,5,7,9,11}
var o3={1,3,5,7,9,11}
var o4={1,3,5,7,9,11}
var a1={0,1,2,3,4,5,6,7,8,9,10,11}
var a2={0,1,2,3,4,5,6,7,8,9,10,11}
var a3={0,1,2,3,4,5,6,7,8,9,10,11}
var a4={0,1,2,3,4,5,6,7,8,9,10,11}
var a5={0,1,2,3,4,5,6,7,8,9,10,11}
var a6={0,1,2,3,4,5,6,7,8,9,10,11}
var a7={0,1,2,3,4,5,6,7,8,9,10,11}
var x1'={0,1,2,4,6,8,10}
var x2'={0,1,2,4,6,8,10}
var x3'={0,1,2,4,6,8,10}
var x4'={0,1,2,4,6,8,10}
var x5'={0,1,2,4,6,8,10}
var x6'={0,1,2,4,6,8,10}
var x7'={0,1,2,4,6,8,10}
var x8'={0,1,2,4,6,8,10}
var o1'={3,5,7,9,11}
var o2'={3,5,7,9,11}
var o3'={3,5,7,9,11}
var o4'={3,5,7,9,11}
#var v={0,1}
#var n0={4,5}
#var n1={6,7}
# The commented ones are for 0 and 1 cells.
#0,x1,x2,x3,x4,x5,o1,o2,o3,1
#0,x1,x2,x3,x4,o1,x5,o2,o3,1
#0,x1,x2,x3,x4,o1,o2,x5,o3,1
#0,x1,x2,x3,o1,x4,x5,o2,o3,1
#0,x1,x2,x3,o1,x4,o2,x5,o3,1
#0,x1,x2,x3,o1,o2,x4,x5,o3,1
#0,x1,x2,o1,x3,x4,o2,x5,o3,1
#1,x1,x2,x3,x4,x5,x6,x7,a1,0
#1,a1,a2,a3,a4,o1,o2,o3,o4,0
#1,x1,a1,a2,o1,x2,o2,o3,o4,0
#1,x1,a1,a2,o1,o2,x2,o3,o4,0
#1,x1,x2,x3,o1,o2,o3,x4,o4,0
#1,x1,x2,o1,x3,x4,o2,o3,o4,0
#1,x1,x2,o1,x3,o2,x4,o3,o4,0
#1,x1,x2,o1,x3,o2,o3,x4,o4,0
#1,x1,x2,o1,o2,x3,x4,o3,o4,0
#1,x1,x2,o1,o2,x3,o3,x4,o4,0
#1,x1,o1,x2,o2,x3,o3,x4,o4,0
4,x1',x2',x3',x4',x5',o1',o2',o3',5
4,x1',x2',x3',x4',o1',x5',o2',o3',5
4,x1',x2',x3',x4',o1',o2',x5',o3',5
4,x1',x2',x3',o1',x4',x5',o2',o3',5
4,x1',x2',x3',o1',x4',o2',x5',o3',5
4,x1',x2',x3',o1',o2',x4',x5',o3',5
4,x1',x2',o1',x3',x4',o2',x5',o3',5
5,x1',x2',x3',x4',x5',x6',x7',a1,4
5,a1,a2,a3,a4,o1',o2',o3',o4',4
5,x1',a1,a2,o1',x2',o2',o3',o4',4
5,x1',a1,a2,o1',o2',x2',o3',o4',4
5,x1',x2',x3',o1',o2',o3',x4',o4',4
5,x1',x2',o1',x3',x4',o2',o3',o4',4
5,x1',x2',o1',x3',o2',x4',o3',o4',4
5,x1',x2',o1',x3',o2',o3',x4',o4',4
5,x1',x2',o1',o2',x3',x4',o3',o4',4
5,x1',x2',o1',o2',x3',o3',x4',o4',4
5,x1',o1',x2',o2',x3',o3',x4',o4',4
6,x1',x2',x3',x4',x5',x6',o1',o2',7
6,x1',x2',x3',x4',x5',o1',x6',o2',7
6,x1',x2',x3',x4',o1',x5',x6',o2',7
6,x1',x2',x3',o1',x4',x5',x6',o2',7
7,x1',x2',x3',x4',x5',x6',x7',x8',6
7,a1,a2,a3,a4,a5,o1',o2',o3',6
7,x1',a2,a3,a4,o1',x5',o2',o3',6
7,x1',a2,a3,a4,o1',o2',x5',o3',6
7,x1',a2,a3,o1',x4',x5',o2',o3',6
7,x1',a2,a3,o1',x4',o2',x5',o3',6
7,x1',a2,a3,o1',o2',x4',x5',o3',6
7,x1',a2,o1',x3',x4',o2',x5',o3',6
8,x1',x2',x3',x4',x5',x6',x7',o1',9
9,a1,a2,a3,a4,a5,a6,o1',o2',8
9,x1',a2,x3',a4,x5',o1',x6',o2',8
9,x1',x2',x3',x4',o1',x5',x6',o2',8
9,x1',x2',x3',o1',x4',x5',x6',o2',8
10,x1',x2',x3',x4',x5',x6',x7',x8',11
11,a1,a2,a3,a4,a5,a6,a7,o1',10
#v,a1,a2,a3,a4,a5,a6,a7,n0,2



@COLORS

0 48 48 48
1 255 255 255
2 96 96 96
3 192 192 192
4 96 96 96
5 192 192 192
6 88 88 107
7 177 177 196
8 84 115 84
9 168 199 168
10 115 84 84
11 199 168 168

@ICONS

XPM
/* width height num_colors chars_per_pixel */
"31 341 7 1"
/* colors */
"A c #FFFFFF"
"B c #606060"
"C c #C0C0C0"
". c #303030"
"E c #0000FF"
"F c #00FF00"
"G c #FF0000"
/* icon for state 1 */
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
/* icon for state 2 */
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
/* icon for state 3 */
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
/* icon for state 4 */
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBB....BB..BBBBBBBBBBBB"
"BBBBBBBBBBB....BB..BBBBBBBBBBBB"
"BBBBBBBBBBB..BB....BBBBBBBBBBBB"
"BBBBBBBBBBB..BB....BBBBBBBBBBBB"
"BBBBBBB....BBBBBBBB....BBBBBBBB"
"BBBBBBB....BBBBBBBB....BBBBBBBB"
"BBBBBBB..BBBBBBBBBB..BBBBBBBBBB"
"BBBBBBB..BBBBBBBBBB..BBBBBBBBBB"
"BBBBBBBBB..BBBBBBBBBB..BBBBBBBB"
"BBBBBBBBB..BBBBBBBBBB..BBBBBBBB"
"BBBBBBB....BBBBBBBB....BBBBBBBB"
"BBBBBBB....BBBBBBBB....BBBBBBBB"
"BBBBBBB..BBBBBBBBBB..BBBBBBBBBB"
"BBBBBBB..BBBBBBBBBB..BBBBBBBBBB"
"BBBBBBBBB..BBBBBBBBBB..BBBBBBBB"
"BBBBBBBBB..BBBBBBBBBB..BBBBBBBB"
"BBBBBBB....BBBBBBBB....BBBBBBBB"
"BBBBBBB....BBBBBBBB....BBBBBBBB"
"BBBBBBB..BBBBBBBBBB..BBBBBBBBBB"
"BBBBBBB..BBBBBBBBBB..BBBBBBBBBB"
"BBBBBBBBB..BBBBBBBBBB..BBBBBBBB"
"BBBBBBBBB..BBBBBBBBBB..BBBBBBBB"
"BBBBBBB....BBBBBBBB....BBBBBBBB"
"BBBBBBB....BBBBBBBB....BBBBBBBB"
"BBBBBBBBBBB....BB..BBBBBBBBBBBB"
"BBBBBBBBBBB....BB..BBBBBBBBBBBB"
"BBBBBBBBBBB..BB....BBBBBBBBBBBB"
"BBBBBBBBBBB..BB....BBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
/* icon for state 5 */
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCC....CC..CCCCCCCCCCCC"
"CCCCCCCCCCC....CC..CCCCCCCCCCCC"
"CCCCCCCCCCC..CC....CCCCCCCCCCCC"
"CCCCCCCCCCC..CC....CCCCCCCCCCCC"
"CCCCCCC....CCCCCCCC....CCCCCCCC"
"CCCCCCC....CCCCCCCC....CCCCCCCC"
"CCCCCCC..CCCCCCCCCC..CCCCCCCCCC"
"CCCCCCC..CCCCCCCCCC..CCCCCCCCCC"
"CCCCCCCCC..CCCCCCCCCC..CCCCCCCC"
"CCCCCCCCC..CCCCCCCCCC..CCCCCCCC"
"CCCCCCC....CCCCCCCC....CCCCCCCC"
"CCCCCCC....CCCCCCCC....CCCCCCCC"
"CCCCCCC..CCCCCCCCCC..CCCCCCCCCC"
"CCCCCCC..CCCCCCCCCC..CCCCCCCCCC"
"CCCCCCCCC..CCCCCCCCCC..CCCCCCCC"
"CCCCCCCCC..CCCCCCCCCC..CCCCCCCC"
"CCCCCCC....CCCCCCCC....CCCCCCCC"
"CCCCCCC....CCCCCCCC....CCCCCCCC"
"CCCCCCC..CCCCCCCCCC..CCCCCCCCCC"
"CCCCCCC..CCCCCCCCCC..CCCCCCCCCC"
"CCCCCCCCC..CCCCCCCCCC..CCCCCCCC"
"CCCCCCCCC..CCCCCCCCCC..CCCCCCCC"
"CCCCCCC....CCCCCCCC....CCCCCCCC"
"CCCCCCC....CCCCCCCC....CCCCCCCC"
"CCCCCCCCCCC....CC..CCCCCCCCCCCC"
"CCCCCCCCCCC....CC..CCCCCCCCCCCC"
"CCCCCCCCCCC..CC....CCCCCCCCCCCC"
"CCCCCCCCCCC..CC....CCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
/* icon for state 6 */
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBEEEEBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
/* icon for state 7 */
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEEEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEEEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEECCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEECCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEEEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEEEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEEEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEEEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEECCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEECCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEEEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEEEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEEEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEEEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEECCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEECCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEEEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCEEEECCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
/* icon for state 8 */
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBFFFFBBFFBBBBBBBBBBBB"
"BBBBBBBBBBBFFFFBBFFBBBBBBBBBBBB"
"BBBBBBBBBBBFFBBFFFFBBBBBBBBBBBB"
"BBBBBBBBBBBFFBBFFFFBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBFFFFBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBFFFFBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBFFBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBFFBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBFFBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBFFBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBFFFFBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBFFFFBBBBBBBB"
"BBBBBBBBBBBFFFFBBFFBBBBBBBBBBBB"
"BBBBBBBBBBBFFFFBBFFBBBBBBBBBBBB"
"BBBBBBBBBBBFFBBFFFFBBBBBBBBBBBB"
"BBBBBBBBBBBFFBBFFFFBBBBBBBBBBBB"
"BBBBBBBFFFFBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBFFFFBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBFFBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBFFBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBFFBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBFFBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBFFFFBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBFFFFBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBFFFFBBFFBBBBBBBBBBBB"
"BBBBBBBBBBBFFFFBBFFBBBBBBBBBBBB"
"BBBBBBBBBBBFFBBFFFFBBBBBBBBBBBB"
"BBBBBBBBBBBFFBBFFFFBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
/* icon for state 9 */
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCFFFFCCFFCCCCCCCCCCC"
"CCCCCCCCCCCCFFFFCCFFCCCCCCCCCCC"
"CCCCCCCCCCCCFFCCFFFFCCCCCCCCCCC"
"CCCCCCCCCCCCFFCCFFFFCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCFFFFCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCFFFFCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCFFCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCFFCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCFFCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCFFCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCFFFFCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCFFFFCCCCCCC"
"CCCCCCCCCCCCFFFFCCFFCCCCCCCCCCC"
"CCCCCCCCCCCCFFFFCCFFCCCCCCCCCCC"
"CCCCCCCCCCCCFFCCFFFFCCCCCCCCCCC"
"CCCCCCCCCCCCFFCCFFFFCCCCCCCCCCC"
"CCCCCCCCFFFFCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCFFFFCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCFFCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCFFCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCFFCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCFFCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCFFFFCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCFFFFCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCFFFFCCFFCCCCCCCCCCC"
"CCCCCCCCCCCCFFFFCCFFCCCCCCCCCCC"
"CCCCCCCCCCCCFFCCFFFFCCCCCCCCCCC"
"CCCCCCCCCCCCFFCCFFFFCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
/* icon for state 10 */
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
"BBBBBBBBBBBBGGGGBBGGBBBBBBBBBBB"
"BBBBBBBBBBBBGGGGBBGGBBBBBBBBBBB"
"BBBBBBBBBBBBGGBBGGGGBBBBBBBBBBB"
"BBBBBBBBBBBBGGBBGGGGBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBGGGGBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBGGGGBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBGGBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBGGBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBGGBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBGGBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBGGGGBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBGGGGBBBBBBB"
"BBBBBBBBBBBBGGGGBBGGBBBBBBBBBBB"
"BBBBBBBBBBBBGGGGBBGGBBBBBBBBBBB"
"BBBBBBBBBBBBGGBBGGGGBBBBBBBBBBB"
"BBBBBBBBBBBBGGBBGGGGBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBGGGGBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBGGGGBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBGGBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBGGBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBGGBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBGGBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBGGGGBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBGGGGBBBBBBB"
"BBBBBBBBBBBBGGGGBBGGBBBBBBBBBBB"
"BBBBBBBBBBBBGGGGBBGGBBBBBBBBBBB"
"BBBBBBBBBBBBGGBBGGGGBBBBBBBBBBB"
"BBBBBBBBBBBBGGBBGGGGBBBBBBBBBBB"
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
/* icon for state 11 */
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
"CCCCCCCCCCCCGGGGCCGGCCCCCCCCCCC"
"CCCCCCCCCCCCGGGGCCGGCCCCCCCCCCC"
"CCCCCCCCCCCCGGCCGGGGCCCCCCCCCCC"
"CCCCCCCCCCCCGGCCGGGGCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCGGGGCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCGGGGCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCGGCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCGGCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCGGCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCGGCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCGGGGCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCGGGGCCCCCCC"
"CCCCCCCCCCCCGGGGCCGGCCCCCCCCCCC"
"CCCCCCCCCCCCGGGGCCGGCCCCCCCCCCC"
"CCCCCCCCCCCCGGCCGGGGCCCCCCCCCCC"
"CCCCCCCCCCCCGGCCGGGGCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCGGGGCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCGGGGCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCGGCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCGGCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCGGCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCGGCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCGGGGCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCGGGGCCCCCCC"
"CCCCCCCCCCCCGGGGCCGGCCCCCCCCCCC"
"CCCCCCCCCCCCGGGGCCGGCCCCCCCCCCC"
"CCCCCCCCCCCCGGCCGGGGCCCCCCCCCCC"
"CCCCCCCCCCCCGGCCGGGGCCCCCCCCCCC"
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"

XPM
/* width height num_colors chars_per_pixel */
"15 165 7 1"
/* colors */
"A c #FFFFFF"
"B c #606060"
"C c #C0C0C0"
". c #303030"
"E c #0000FF"
"F c #00FF00"
"G c #FF0000"
/* icon for state 1 */
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA"
/* icon for state 2 */
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBBBBBBBBB"
/* icon for state 3 */
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCCCCCCCCC"
/* icon for state 4 */
"BBBBBBBBBBBBBBB"
"BBBBBB..B.BBBBB"
"BBBBBB.B..BBBBB"
"BBBB..BBBB..BBB"
"BBBB.BBBBB.BBBB"
"BBBBB.BBBBB.BBB"
"BBBB..BBBB..BBB"
"BBBB.BBBBB.BBBB"
"BBBBB.BBBBB.BBB"
"BBBB..BBBB..BBB"
"BBBB.BBBBB.BBBB"
"BBBBB.BBBBB.BBB"
"BBBB..BBBB..BBB"
"BBBBBB..B.BBBBB"
"BBBBBB.B..BBBBB"
/* icon for state 5 */
"CCCCCCCCCCCCCCC"
"CCCCCC..C.CCCCC"
"CCCCCC.C..CCCCC"
"CCCC..CCCC..CCC"
"CCCC.CCCCC.CCCC"
"CCCCC.CCCCC.CCC"
"CCCC..CCCC..CCC"
"CCCC.CCCCC.CCCC"
"CCCCC.CCCCC.CCC"
"CCCC..CCCC..CCC"
"CCCC.CCCCC.CCCC"
"CCCCC.CCCCC.CCC"
"CCCC..CCCC..CCC"
"CCCCCC..C.CCCCC"
"CCCCCC.C..CCCCC"
/* icon for state 6 */
"BBBBBBBBBBBBBBB"
"BBBBBBBEEBBBBBB"
"BBBBBBBBEBBBBBB"
"BBBBBBBEBBBBBBB"
"BBBBBBBEEBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBEEBBBBBB"
"BBBBBBBBEBBBBBB"
"BBBBBBBEBBBBBBB"
"BBBBBBBEEBBBBBB"
"BBBBBBBBBBBBBBB"
"BBBBBBBEEBBBBBB"
"BBBBBBBBEBBBBBB"
"BBBBBBBEBBBBBBB"
"BBBBBBBEEBBBBBB"
/* icon for state 7 */
"CCCCCCCCCCCCCCC"
"CCCCCCCEECCCCCC"
"CCCCCCCCECCCCCC"
"CCCCCCCECCCCCCC"
"CCCCCCCEECCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCEECCCCCC"
"CCCCCCCCECCCCCC"
"CCCCCCCECCCCCCC"
"CCCCCCCEECCCCCC"
"CCCCCCCCCCCCCCC"
"CCCCCCCEECCCCCC"
"CCCCCCCCECCCCCC"
"CCCCCCCECCCCCCC"
"CCCCCCCEECCCCCC"
/* icon for state 8 */
"BBBBBBBBBBBBBBB"
"BBBBBBFFBFBBBBB"
"BBBBBBFBFFBBBBB"
"BBBBBBBBBBFFBBB"
"BBBBBBBBBBFBBBB"
"BBBBBBBBBBBFBBB"
"BBBBBBBBBBFFBBB"
"BBBBBBFFBFBBBBB"
"BBBBBBFBFFBBBBB"
"BBBBFFBBBBBBBBB"
"BBBBFBBBBBBBBBB"
"BBBBBFBBBBBBBBB"
"BBBBFFBBBBBBBBB"
"BBBBBBFFBFBBBBB"
"BBBBBBFBFFBBBBB"
/* icon for state 9 */
"CCCCCCCCCCCCCCC"
"CCCCCCFFCFCCCCC"
"CCCCCCFCFFCCCCC"
"CCCCCCCCCCFFCCC"
"CCCCCCCCCCFCCCC"
"CCCCCCCCCCCFCCC"
"CCCCCCCCCCFFCCC"
"CCCCCCFFCFCCCCC"
"CCCCCCFCFFCCCCC"
"CCCCFFCCCCCCCCC"
"CCCCFCCCCCCCCCC"
"CCCCCFCCCCCCCCC"
"CCCCFFCCCCCCCCC"
"CCCCCCFFCFCCCCC"
"CCCCCCFCFFCCCCC"
/* icon for state 10 */
"BBBBBBBBBBBBBBB"
"BBBBBGGBGBBBBBB"
"BBBBBGBGGBBBBBB"
"BBBBBBBBBGGBBBB"
"BBBBBBBBBGBBBBB"
"BBBBBBBBBBGBBBB"
"BBBBBBBBBGGBBBB"
"BBBBBGGBGBBBBBB"
"BBBBBGBGGBBBBBB"
"BBBBBBBBBGGBBBB"
"BBBBBBBBBGBBBBB"
"BBBBBBBBBBGBBBB"
"BBBBBBBBBGGBBBB"
"BBBBBGGBGBBBBBB"
"BBBBBGBGGBBBBBB"
/* icon for state 11 */
"CCCCCCCCCCCCCCC"
"CCCCCGGCGCCCCCC"
"CCCCCGCGGCCCCCC"
"CCCCCCCCCGGCCCC"
"CCCCCCCCCGCCCCC"
"CCCCCCCCCCGCCCC"
"CCCCCCCCCGGCCCC"
"CCCCCGGCGCCCCCC"
"CCCCCGCGGCCCCCC"
"CCCCCCCCCGGCCCC"
"CCCCCCCCCGCCCCC"
"CCCCCCCCCCGCCCC"
"CCCCCCCCCGGCCCC"
"CCCCCGGCGCCCCCC"
"CCCCCGCGGCCCCCC"

XPM
/* width height num_colors chars_per_pixel */
"7 77 7 1"
/* colors */
"A c #FFFFFF"
"B c #606060"
"C c #C0C0C0"
". c #303030"
"E c #0000FF"
"F c #00FF00"
"G c #FF0000"
/* icon for state 1 */
"AAAAAAA"
"AAAAAAA"
"AAAAAAA"
"AAAAAAA"
"AAAAAAA"
"AAAAAAA"
"AAAAAAA"
/* icon for state 2 */
"BBBBBBB"
"BBBBBBB"
"BBBBBBB"
"BBBBBBB"
"BBBBBBB"
"BBBBBBB"
"BBBBBBB"
/* icon for state 3 */
"CCCCCCC"
"CCCCCCC"
"CCCCCCC"
"CCCCCCC"
"CCCCCCC"
"CCCCCCC"
"CCCCCCC"
/* icon for state 4 */
"BBBBBBB"
"BB...BB"
"BB.B.BB"
"BB.B.BB"
"BB.B.BB"
"BB...BB"
"BBBBBBB"
/* icon for state 5 */
"CCCCCCC"
"CC...CC"
"CC.C.CC"
"CC.C.CC"
"CC.C.CC"
"CC...CC"
"CCCCCCC"
/* icon for state 6 */
"BBBBBBB"
"BBBEBBB"
"BBBEBBB"
"BBBEBBB"
"BBBEBBB"
"BBBEBBB"
"BBBBBBB"
/* icon for state 7 */
"CCCCCCC"
"CCCECCC"
"CCCECCC"
"CCCECCC"
"CCCECCC"
"CCCECCC"
"CCCCCCC"
/* icon for state 8 */
"BBBBBBB"
"BBFFFBB"
"BBBBFBB"
"BBFFFBB"
"BBFBBBB"
"BBFFFBB"
"BBBBBBB"
/* icon for state 9 */
"CCCCCCC"
"CCFFFCC"
"CCCCFCC"
"CCFFFCC"
"CCFCCCC"
"CCFFFCC"
"CCCCCCC"
/* icon for state 10 */
"BBBBBBB"
"BBGGGBB"
"BBBBGBB"
"BBGGGBB"
"BBBBGBB"
"BBGGGBB"
"BBBBBBB"
/* icon for state 11 */
"CCCCCCC"
"CCGGGCC"
"CCCCGCC"
"CCGGGCC"
"CCCCGCC"
"CCGGGCC"
"CCCCCCC"

And rotorviewer.py. This gets rotor string (only the part with 0123@ABC) from the clipboard and opens it with rotorviewer.rule
import golly as g
g.new("Rotor Viewer")
g.setrule("rotorviewer")
pattern = g.getclipstr()
patlen = len(pattern)
x=0; y=0
state = {'.':0,'0':4,'1':6,'2':8,'3':10,'@':5,'A':7,'B':9,'C':11}
try:
   for i in xrange(patlen):
      if pattern[i] == ' ':
         x=0;y+=1;
      else:
         g.setcell(x,y,state[pattern[i]])
         x+=1
   g.fit()
except:
   g.warn("Error in clipboard string.")

And rotorextractor.py for extracting rotor files from an oscillator to the file 'rotorextracted.txt', at the same directory as rotorextractor.py
I think one could change the source code a little bit to save the rotor text to the clipboard.
import golly as g
import os

g.autoupdate(True)
rotorfilepath = os.path.join(os.getcwd(), "rotorextracted.txt")

# Get input
if not (g.getalgo() in ["QuickLife", "HashLife"] or g.getrule()=="B3/S23"):
    g.exit("Rotor can only viewed in Lifelike rules.")
try:
    period = g.getstring("Enter the period of the oscilator.")
except:
    g.exit()
try:
    period = int(period)
except:
    g.exit("Period is not an integer: " + str(period))
if period <= 0:
    g.exit("Period should be a positive integer.")
if period == 1:
    g.exit("Still lifes do not have rotors.")

inithash = g.hash(g.getrect())

# Get celllist in every gen and store it as a list of tuples(coordinates of cells)
cellshistory = []   # list of alive cell coords in every generation
cells = set()       # set of cells that were alive in at least one generation
g.setstep(0)
for gen in xrange(period):
    g.setname("Gen " + str(gen))
    currcelllist = g.getcells(g.getrect())
    currcells = set(zip(currcelllist[::2], currcelllist[1::2]))
    cells |= currcells
    cellshistory.append(currcells)
    # Subperiod check
    if g.hash(g.getrect()) == inithash and gen > 0:
        if cellshistory[gen]==cellshistory[0]:
            if gen == 1:
                g.exit("Still life detected. No rotors.")
            g.note("Subperiod detected: " + str(gen))
            period = gen
            break
    g.step()
g.setname("Gen " + str(period))
if g.hash(g.getrect()) != inithash:
    g.exit("Error: Period is not " + str(period))

# Get a dict with rotorcellcoords:stator neighbors.
# First, get all the rotor cells as keys.
rotorcells_statornays = {}
for cell in cells:
    for gen in xrange(1,period):
        if (cell in cellshistory[gen]) != (cell in cellshistory[0]):
            rotorcells_statornays[cell] = 0
            break

# Then, save the number of stator neighbors as the values of the dict.
for cell in rotorcells_statornays:
    x,y = cell
    neighbors = [(x-1,y-1),(x-1,y),(x-1,y+1),(x,y-1),(x,y+1),(x+1,y-1),(x+1,y),(x+1,y+1)]
    for neighbor in neighbors:
        # Stators are alive constant cells.
        if neighbor in cells and neighbor not in rotorcells_statornays:
            rotorcells_statornays[cell] += 1

# Get rotor size:
rotorxmin = min(cell[0] for cell in rotorcells_statornays)
rotorxmax = max(cell[0] for cell in rotorcells_statornays)
rotorymin = min(cell[1] for cell in rotorcells_statornays)
rotorymax = max(cell[1] for cell in rotorcells_statornays)
rotorxrange = xrange(rotorxmin, rotorxmax+1)
rotoryrange = xrange(rotorymin, rotorymax+1)
rotorrect = [(x,y) for x in rotorxrange for y in rotoryrange]
# Get the character representation of cells in rotorrect for all gens.
chrhistory = []
for gen in xrange(period):
    currchr = {}
    for cell in rotorrect:
        if cell not in rotorcells_statornays:
            currchr[cell] = '.'
        elif cell in cellshistory[gen]:
            currchr[cell] = chr(ord('@') + rotorcells_statornays[cell])
        else:
            currchr[cell] = chr(ord('0') + rotorcells_statornays[cell])
    chrhistory.append(currchr)

# Make the rotor strings for all gens based on the rotor character.
# Take the fastest string in ASCII order.
rotorstrings = []
if len(rotorxrange) >= len(rotoryrange):
    rotorstrings.extend([
        min(' '.join(''.join(chrhistory[gen][(x,y)]\
            for x in rotorxrange) for y in rotoryrange) for gen in xrange(period)),
        min(' '.join(''.join(chrhistory[gen][(x,y)]\
            for x in rotorxrange) for y in reversed(rotoryrange)) for gen in xrange(period)),
        min(' '.join(''.join(chrhistory[gen][(x,y)]\
            for x in reversed(rotorxrange)) for y in rotoryrange) for gen in xrange(period)),
        min(' '.join(''.join(chrhistory[gen][(x,y)]\
            for x in reversed(rotorxrange)) for y in reversed(rotoryrange)) for gen in xrange(period))
    ])
if len(rotoryrange) >= len(rotorxrange):
    rotorstrings.extend([
        min(' '.join(''.join(chrhistory[gen][(x,y)]
            for y in rotoryrange) for x in rotorxrange) for gen in xrange(period)),
        min(' '.join(''.join(chrhistory[gen][(x,y)]\
            for y in rotoryrange) for x in reversed(rotorxrange)) for gen in xrange(period)),
        min(' '.join(''.join(chrhistory[gen][(x,y)]\
            for y in reversed(rotoryrange)) for x in rotorxrange) for gen in xrange(period)),
        min(' '.join(''.join(chrhistory[gen][(x,y)]\
            for y in reversed(rotoryrange)) for x in reversed(rotorxrange)) for gen in xrange(period))
    ])
rotorstring = min(rotorstrings)

# Print the rotorstring to a file.
rulestring = "R" + g.getrule()
periodstring = "p" + str(period)
rotornumstring = "r" + str(len(rotorcells_statornays))
if len(rotorxrange)<len(rotoryrange):
    boxstring = str(len(rotorxrange))+"x"+str(len(rotoryrange))
else:
    boxstring = str(len(rotoryrange))+"x"+str(len(rotorxrange))
rotorfile = open(rotorfilepath, "w")
rotorfile.write(" ".join([rulestring, periodstring, rotornumstring, boxstring, rotorstring]))
rotorfile.close()
g.exit("Rotor successfully written at " + rotorfilepath)
Best wishes to you, Scorbie
User avatar
Scorbie
 
Posts: 1368
Joined: December 7th, 2013, 1:05 am

Re: A small modification of dr

Postby Scorbie » January 18th, 2015, 4:48 am

Sorry for constantly giving questions... This isn't a time-consuming one, I think.
I thought that dr(and dr2) calculates change count by counting changed cells.
It says that var[116] prohibits changecounts from gen 0-18 to be from 5c/9: 1344465331344465331.
But when I count the change counts from this 5c/9 signal, it's 23444344.
Did I miss anything?
x = 63, y = 65, rule = B3/S23
3$55b2obo$54bo2b2o$52bo2bo$48bo2bob2ob5o$48b4o2bo3bo2bo$45bo6bobobob2o
bo$45b5o2bob4obob2o$43b2o5bobo6bo$42bobob2obo2bob4obob2o$42bo2bobobob
2obo2bobo2bo$39b2obo4bobo3bo2bo2b2o$39bo2b2o2b2ob4o4b2o$41bo3bo6bobo3b
o$38bo3b3ob5obob4o$38b4o2bobo4bobo$35bo6bobo3bo2bo3bo$35b5o2bob4obobo
2b2o$33b2o5bobo6bob2o$32bobob2obo2bob4obo$32bo2bobobob2obo2bobo$29b2ob
o4bobo3bo2bo2b2o$29bo2b2o2b2ob4o4b2o$31bo3bo6bobo3bo$28bo3b3ob5obob4o$
28b4o2bobo4bobo$25bo6bobo3bo2bo3bo$25b5o2bob4obobo2b2o$23b2o5bobo6bob
2o$22bobob2obo2bob4obo$22bo2bobobob2obo2bobo$19b2obo4bobo3bo2bo2b2o$
19bo2b2o2b2ob4o4b2o$21bo3bo6bobo3bo$18bo3b3ob5obob4o$18b4o2bobo4bobo$
15bo6bobo3bo2bo3bo$15b5o2bob4obobo2b2o$13b2o5bobo6bob2o$12bobob2obo2bo
b4obo$12bo2bobobob2obo2bobo$9b2obo4bobo3bo2bo2b2o$9bo2b2o2b2ob4o4b2o$
11bo3bo6bobo3bo$8bo3b3ob5obob4o$8b4o2bobo4bobo$5bo6bobo3bo2bo3bo$5b5o
2bob4obobo2b2o$3b2o5bobo6bob2o$bo2bob2obo2bob4obo$b2o2bobobob2obo2bobo
$7bobo3bo2bo2b2o$6b2ob4o4b2o$5bo6bobo3bo$4bob5obob4o$4bobo4bobo$3b2o3b
o2bo3bo$2bo2b3obobo2b2o$3bo5bob2o$4b3obo$6b2o!

Thanks in advance,
Scorbie
Best wishes to you, Scorbie
User avatar
Scorbie
 
Posts: 1368
Joined: December 7th, 2013, 1:05 am

Re: A small modification of dr

Postby Sokwe » January 18th, 2015, 10:01 am

Scorbie wrote:I thought that dr(and dr2) calculates change count by counting changed cells.

dr keeps track of two patterns during its search: The current generation of the active pattern and a stable background pattern. The change count measures the number of cells in the current generation that are different from the background pattern. For example, if the current pattern is
.....
.oo..
.o.o.
.....

and the background pattern is
.....
.oo..
.oo..
.....

then the change count is 2.

Scorbie wrote:It says that var[116] prohibits changecounts from gen 0-18 to be from 5c/9: 1344465331344465331.
But when I count the change counts from this 5c/9 signal, it's 23444344. Did I miss anything?

If you run the pattern that you posted to generation 7 then the change count will be 1, and will progress with the sequence 1344465331344465331....
-Matthias Merzenich
Sokwe
Moderator
 
Posts: 1388
Joined: July 9th, 2009, 2:44 pm

Re: A small modification of dr

Postby Scorbie » January 18th, 2015, 10:25 am

Oh my god. Thanks a lot for telling me that. I had done the search all wrong!!! (what were I thinking!)
Best wishes to you, Scorbie
User avatar
Scorbie
 
Posts: 1368
Joined: December 7th, 2013, 1:05 am

Re: A small modification of dr

Postby glider_rider » February 5th, 2015, 8:47 pm

I'm having trouble running dr2 on my computer. More specifically, I'm unsure how to get it to use an input file. How do I do this, or am I doing something entirely wrong?

Thanks!
Nico Brown
User avatar
glider_rider
 
Posts: 87
Joined: February 20th, 2013, 5:41 pm
Location: CA

Re: A small modification of dr

Postby dvgrn » February 5th, 2015, 9:35 pm

glider_rider wrote:I'm having trouble running dr2 on my computer. More specifically, I'm unsure how to get it to use an input file. How do I do this, or am I doing something entirely wrong?

This is mentioned, somewhat cryptically for anyone that hasn't met command redirection operators before, a little way back in this thread:

Scorbie wrote:2) N.B. A basic thing:
The output is rather large, so putting it in a file would be the best. Trying this in the cmd line:
dr (or dr2) < input-file > output-file
would do that without modifying the source code.

dr < input-file takes the contents of input-file and sends it to the dr program, as if it was being typed from the keyboard.

dr > output-file sends to output-file whatever dr would otherwise print to standard output.

Scorbie's syntax does both of these. Very useful stuff, this input-output redirection business.
User avatar
dvgrn
Moderator
 
Posts: 5222
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: A small modification of dr

Postby gmc_nxtman » August 21st, 2015, 10:42 am

How do I get it to search for spaceship eaters? I'm more interested in catalysts than oscillators.
User avatar
gmc_nxtman
 
Posts: 1146
Joined: May 26th, 2015, 7:20 pm

Re: A small modification of dr

Postby Sokwe » August 22nd, 2015, 9:24 pm

gmc_nxtman wrote:How do I get it to search for spaceship eaters? I'm more interested in catalysts than oscillators.


dr will find oscillators as a natural part of most searches. It doesn't look for the oscillators specifically, but since they turn up in the search anyway, it's nice to have them in the output in case something new appears. If you're looking for catalysts, then you should only look at the results that are labeled "fizzle".

I would generally think that Bellman is better for finding catalysts, although there might be times when dr does better.
-Matthias Merzenich
Sokwe
Moderator
 
Posts: 1388
Joined: July 9th, 2009, 2:44 pm

Re: A small modification of dr

Postby Extrementhusiast » July 6th, 2018, 3:59 pm

Is there any way to turn skipstable off? Running the following short search:
r40 40
...
.1o
o..!
c3
h3
w3

...produces 143 lines of output, whereas adding skipstable onto the end of that produces 144 lines of output; the only difference is the insertion of "Skipping stable outcomes" as a new line between lines 10 and 11. Both cases miss this "obvious" restabilization that falls within the boundaries of the search:
x = 7, y = 10, rule = B3/S23
3bo$b5o$o5bo$3ob3o$3bo$3obo$o2b2o$bo$2b3o$4bo!

(If you do decide to change things, just the new .exe file's fine. It should be a quick fix, but you never know with coding....)

EDIT: Taking a cursory glance at the dr2.c file myself, I see no immediate reason why skipstable should behave like this.
I Like My Heisenburps! (and others)
User avatar
Extrementhusiast
 
Posts: 1735
Joined: June 16th, 2009, 11:24 pm
Location: USA

Re: A small modification of dr

Postby Macbi » January 29th, 2019, 8:13 am

I'm trying to modify LLS so that it has similar features to dr (being able to rule out patterns which have changed too much from a fixed background), and I'm trying to run some speed comparisons. In particular I'm interested in whether LLS would be faster at finding 2c/3 elbows. Does anyone have a copy of the dr input that Dean Hickerson used to find the patterns in Golly's signal-turn.rle? Or an input for a similar search? How long do they take to run?

On a related note, approximately how long does it take Bellman to find the Snark? I would run it myself to find out, but based on the documentation I don't understand it well enough that I would know when the search had been successful!
User avatar
Macbi
 
Posts: 581
Joined: March 29th, 2009, 4:58 am

Re: A small modification of dr

Postby dvgrn » January 29th, 2019, 12:44 pm

Macbi wrote:Does anyone have a copy of the dr input that Dean Hickerson used to find the patterns in Golly's signal-turn.rle? Or an input for a similar search? How long do they take to run?

I don't think that any of those details are available without re-running dr and re-finding that elbow. See this posting for some details that might be useful in duplicating the search:

Dean Hickerson wrote:That was way back in 1997, and I don't remember exactly how I found it. I probably did hundreds of searches starting with the single 2c/3 signal, with different values of the parameters max width, max height, and max change count. Plus lots of experiments in which I added other parameters using the "var" array. Since the signal splits into two, one of which fizzles out (in two possible ways), I'd guess that I used the var[112] or var[113] parameter.

Given that a state-of-the-art personal computer in 1997 would have been a single-core machine running at 150-300MHz or so, I suspect that a similar search would be a lot easier to run these days. As usual, getting results might not be as much of a problem as sorting through a huge number of results to find any good stuff amid all the fizzles.

Since dr reports whatever continuations of a signal it can find, my sense is that you'd probably duplicate a fair fraction of Golly's Patterns/Life/Signal-Circuitry/signal-turns-and-fizzles.rle in the course of re-running a dr search for the single-to-double 2c/3 elbow.

I've just been starting to look into setting up a double-to-single 2c/3 signal LLS search, as it happens -- omniperiodicity might be in the air this year. It looks to me like the most likely method is to set up a queue of many thousands of searches with slightly different parameters, sorted so that "fast but hopeless" searches are run first, and gradually segueing into the "slow but hopeful" ones. But I'm still a total newbie at LLS, so would definitely appreciate any advice.
User avatar
dvgrn
Moderator
 
Posts: 5222
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: A small modification of dr

Postby 2718281828 » February 8th, 2019, 10:51 am

Is there a ntdr2 version? I mean for searching in non-totalistic rules? I see in the code that a modification is implemented for 'just friends' - so I think 'the architecture' allows for it.
User avatar
2718281828
 
Posts: 514
Joined: August 8th, 2017, 5:38 pm


Return to Scripts

Who is online

Users browsing this forum: No registered users and 2 guests