Q&A for ptbsearch

For scripts to aid with computation or simulation in cellular automata.
User avatar
codeholic
Moderator
Posts: 1142
Joined: September 13th, 2011, 8:23 am
Location: Hamburg, Germany

Q&A for ptbsearch

Post by codeholic » December 24th, 2014, 3:55 am

I tried to find the semi-snark (and perhaps something else) using ptbsearch. Here is the input file I used:

double.life

Code: Select all

bb.
bb.
.
.
.
.
.
.
.....a.
....aa.
....a.a.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.........................a.
........................aa.
........................a.a
Pattern list:

spartan.list

Code: Select all

...*!.***!*!zz!
..*z!.*.z!.*!**!
zz!*!.***!...*!
z*!z.*!..*!..**!
*!***!...*!..zz!
**!.*!.*.z!..*z!
..zz!...*!***!*!
..**!..*!z.*!z*!
.zz!z..z!.zz!
.z!z.z!z.z!.z!
.z!z.z!.z!
zz!zz!
..z!.z.z!z..z!.zz!
.z!z.z!z..z!.zz!
.zz!z..z!.z.z!..z!
.zz!z..z!z.z!.z!
zz!z.z!.z!
.zz!z.z!.z!
.z!z.z!.zz!
.z!z.z!zz!
zz!z.z!.zz!
.zz!z.z!zz!
I invoked ptb2 with:

Code: Select all

./ptb2 double.life spartan.list 160 4 20 0 >double.out
But survive gave no results:

Code: Select all

./survive a < double.out > double.survive
While I was expecting to get at least:

Code: Select all

x = 35, y = 40, rule = B3/S23
3bo$3b3o$6bo$5b2o6b2o$12bobo$13bo3$2o$2o6b2o$8b2o2$17b2o$17b2o2$2b2o$b
obo$bo11bo$2o10b2o$12bobo18$33bo$32b2o$32bobo!
What did I do or assume wrong?
Ivan Fomichev

User avatar
Scorbie
Posts: 1445
Joined: December 7th, 2013, 1:05 am

Re: Q&A for ptbsearch

Post by Scorbie » December 24th, 2014, 5:03 am

I'm just a rookie, but shouldn't you do survive b instead of survive a? I am very likely to be mistaken, though.


EDIT: oops, I must have known the other way around. Thanks Codeholic!
Last edited by Scorbie on December 24th, 2014, 7:41 pm, edited 1 time in total.
Best wishes to you, Scorbie

User avatar
codeholic
Moderator
Posts: 1142
Joined: September 13th, 2011, 8:23 am
Location: Hamburg, Germany

Re: Q&A for ptbsearch

Post by codeholic » December 24th, 2014, 4:00 pm

No, it should be "survive a", because the argument determines, what you want to exclude from the test.
Ivan Fomichev

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

Re: Q&A for ptbsearch

Post by Sokwe » December 25th, 2014, 9:28 pm

I have also had times when I didn't get results that I should have from ptbsearch. I think there might be an error somewhere in there, but I just haven't had the time to hunt it down.
-Matthias Merzenich

chris_c
Posts: 953
Joined: June 28th, 2014, 7:15 am

Re: Q&A for ptbsearch

Post by chris_c » April 26th, 2015, 6:49 pm

There was speculation in another thread about why simsim's B->B conduit was not found by ptbsearch some time ago so I thought I would investigate.

I was working on the version of the code found here. My conclusion is that ptbsearch (or this version of ptbsearch at least) is not very good at adding transparent catalysts if the transparent catalyst is not the last catalyst to be activated.

For example, let's look at simsim's B->B:

Code: Select all

x = 25, y = 24, rule = LifeHistory
17.2B$16.4B$16.4B$15.6B2.B$15.2B2A2B.B2A$11.B.3BA2BA3B2A$5.2B3.7B2A2B
.2B$2.D18B$.2D17B$2D18B$.2D17B$2.19B$5.B2.13B.B$8.12B.B2A$8.9BC4B2A$
9.7B3CB.2B$9.6B2C2BC$10.10B$14.6B$14.5B$14.6B$15.4B$15.4B$16.2B!
The beehive is last intact at generation 13 and then the second block becomes active at generation 30, thus our catalysts are damaged for 17 generations before the second block is added.

Now, let's look at the code.... the function placeNewPerturbor in analyze.c here has an input parameter "maxdamage" that specifies how long the current catalysts can be damaged for before giving up adding new ones.

In ptbsearch2.c we see that placeNewPerturbor is called with maxdamage = 5 so there is no hope that the second block gets placed.

Indeed, if we set maxdamge = 17 and recompile then ptbsearch is able to find simsim's conduit. I made some example input files and minimal command line settings in a commit here.

Other examples I looked at are Conduit 1:

Code: Select all

x = 22, y = 30, rule = LifeHistory
$13.B$12.3D$12.BDB$11.3D2B$11.5B$10.6B$10.6B$11.5B$11.6B$10.6B$10.7B$
11.6B$11.6B$11.6B$10.8B$9.8B$9.9B$9.9B$8.10B$8.3B2A5B$7.4B2A5B$7.11B$
2.2A.A7BA4B$2.A.2A2.4B3AB$9.2B2A2BA$11.3B$11.2B!
Here the block is intact at generation 1 and the interaction with the snake begins at generation 32. So maxdamage is required to be 31.

The final example is this R->H:

Code: Select all

x = 25, y = 24, rule = LifeHistory
2$5.2B2.2B2.B$3.D11B$.DBD12B2.B$B3D9B2AB.B2A$.D11B2A3B2A$3.14B.B$8.B.
7B$11.7B$11.8B$11.8B$10.8B.3B$10.12B$7.2B.11B2A$6.2A7BA5B2A$6.2AB.4B
3A3B.B$7.B2.3B.A5B$10.9B$9.4B$8.4B$7.4B$7.3B!
The first two catalysts are both alive at generation 24 and the interaction with the third block begins at generation 35. So maxdamage needs to be 11, I believe. I would appreciate it if anyone was willing to check the veracity of these examples.

Now, all this stuff with maxdamage felt a bit wrong: if a catalyst is supposed to be transparent then it shouldn't matter how long it is damaged for, and certainly 5 generations of damage is too low. So I implemented an alternative test: stop adding catalysts only if one of the permanent cells (i.e. a '*' cell) of a catalyst has died. My implementation of that is here. It seems to work on all of the above examples but it still definitely needs more testing. Does anyone have any suggestions for interesting searches to run?

Finally, my compiler gave a warning about an uninitialised variable in the function "restored" so I also made this patch.

User avatar
simsim314
Posts: 1766
Joined: February 10th, 2014, 1:27 pm

Re: Q&A for ptbsearch

Post by simsim314 » April 26th, 2015, 7:24 pm

chris_c wrote:Does anyone have any suggestions for interesting searches to run?
Well I would start from Herschel and see what comes up. It's also interesting to reproduce stuff like semi snark, and other known conduits. For starters new H->G would be nice, new conduit will be great.

Probably the most interesting searches are those that try to make spartan reflector like snark. Honey farm is well explored area but on the other hand all searching tools until now were limited by hardcoded maxdamage = 5. So there is definitely a potential there. One can try to start from Pi or any other G+SL interaction and search for some catalyst that brings back that SL.

Obviously spartan syringe is the perfect dream for any spartan circuitry.

* Great to see someone figuring out ptbsearch source-code issues, it's a very nice searching tool.

User avatar
Scorbie
Posts: 1445
Joined: December 7th, 2013, 1:05 am

Re: Q&A for ptbsearch

Post by Scorbie » May 4th, 2015, 10:20 pm

@chris_c I forked your project to make it compilable on Windows MinGW.
To windows users: if chris_c's source doesn't compile on windows try this fork

EDIT: @chris_c: I really like the change. perturbing a pi collision with this (which is in the readme)
EDIT2: Whoops, I used spartan.list instead of ptb2.list but that shouldn't be much of a problem.

Code: Select all

ptb2 picol.life spartan.list 80 2 20 0 > ptbs.out
gives fairly nice results, like these:

Code: Select all

x = 273, y = 19, rule = B3/S23
8b2o5bo45b2o5bo43b2o5bo44b2o5bo42b2o5bo50bo$8b2o4bobo44b2o4bobo42b2o4b
obo43b2o4bobo41b2o4bobo47b3o$15bo52bo50bo51bo49bo47bo$269b2o3$264b2o$
254b3o7b2o$6b3o50b3o48b3o49b3o35b2o10b3o41bo$8bo52bo50bo51bo36bo12bo
39b3o$6b3o50b3o48b3o49b3o36bobo8b3o$202b2o2$264b2o$264bo$52b2o48b2o48b
2o111b3o$bo49bobo47bobo47bobo113bo$obo48bo49bo49bo$2o48b2o48b2o48b2o!
EDIT: a simple catgl search gives this:

Code: Select all

x = 23, y = 39, rule = LifeHistory
10.B$9.3D$9.BDB$8.2B3D$8.5B$8.6B$8.6B$8.5B$7.6B$8.6B$7.7B$7.6B$7.6B$
4.5B2A3B.BA$3.2D4B2A4BA.A$2.DBD10B.A$.B2D12B$.13B$.14B$16B$.15B$.6B3C
8B$.8BC9B$2.3B.B3C8B$3.13B$2.16B$2.17B$3.17B$3.17B.B$2.AB2.15B2A$.A.A
3.14B2A$.2A5.14B$9.7B.5B$9.5B$10.4B$11.4B$10.4B$9.B2A2B$10.2A!
But I see that the search includes transparent catalysts reacting before the minimum generation (20 in this case), causng a lot of useless solutions.

EDIT2: and adding the last-gen feature as in catforce would certainly be nice.
Last edited by Scorbie on May 5th, 2015, 7:13 am, edited 2 times in total.
Best wishes to you, Scorbie

chris_c
Posts: 953
Joined: June 28th, 2014, 7:15 am

Re: Q&A for ptbsearch

Post by chris_c » May 5th, 2015, 6:17 am

Scorbie wrote:@chris_c I forked your project to make it compilable on Windows MinGW.
To windows users: if chris_c's source doesn't compile on windows try this fork
Thanks. I'll add it to my branch once I get time.
Scorbie wrote: But I see that the search includes transparent catalysts reacting before the minimum generation (20 in this case), causng a lot of useless solutions.
I think I see what you mean but can you post a quick example just to make sure? And are you sure it only happens with transparent catalysts? The code that places catalysts doesn't seem to know anything about whether the catalyst is going to be transparent or not.
Scorbie wrote: Adding the last-gen feature as in catforce would be certainly nice.
Does this mean that the first interaction must begin on or before time last-gen? It shouldn't be too hard to add this.

User avatar
Scorbie
Posts: 1445
Joined: December 7th, 2013, 1:05 am

Re: Q&A for ptbsearch

Post by Scorbie » May 5th, 2015, 6:21 am

About the windows version, I recommend you to make sure that works on existing systems. (like Linux) Didn't do any harm, but just in case. I'm not even sure if this compiles on compilers other than mine. (64bit mingw)
chris_c wrote:Does this mean that the first interaction must begin on or before time last-gen? It shouldn't be too hard to add this.
Thanks a lot!! I was going to make the change myself, but I'm a real newbie in programming....
chris_c wrote:I think I see what you mean but can you post a quick example just to make sure? And are you sure it only happens with transparent catalysts? The code that places catalysts doesn't seem to know anything about whether the catalyst is going to be transparent or not.
Here. I'll post explanations later.

Code: Select all

x = 7, y = 12, rule = LifeHistory
3.2C$3.2C7$2C$2C2.A$2A2.A.A$2A2.2A!
EDIT: Okay. I'm back. Was in a rush at the moment.
Well, about the transparent catalysts, that was from my observations on several ptbsearch runs. If there was a hasty catalyst placement, it always came from transparent ones.

I think another possible feature is catforce's stable-interval...

EDIT3: No, I was right at the first time. Whoops...

Code: Select all

x = 20, y = 13, rule = B3/S23
3o$2bo$3o13bo$16b3o$19bo$18b2o2$8b2o$8b2o$14b2o$14bobo$16bo$16b2o!
And I do look at the results without running survive to check if there are notable results.
Last edited by Scorbie on May 5th, 2015, 6:52 am, edited 3 times in total.
Best wishes to you, Scorbie

chris_c
Posts: 953
Joined: June 28th, 2014, 7:15 am

Re: Q&A for ptbsearch

Post by chris_c » May 5th, 2015, 6:45 am

Scorbie wrote:Here. I'll post explanations later.

Code: Select all

x = 7, y = 12, rule = LifeHistory
3.2C$3.2C7$2C$2C2.A$2A2.A.A$2A2.2A!
Yeah that's the sort of thing I was thinking of.... catalysts being placed so that they already react at T=0. I don't think this bug has anything to do with transparent/non-transparent but I could be wrong.
Scorbie wrote: I think another possible feature is catforce's stable-interval...
What does this one do? Are you using the program 'survive' or are you just looking at output directly from ptbsearch? Survive makes sure that all catalysts survive until generation 500. I agree it would be useful if 500 was a user-defined parameter.

User avatar
Scorbie
Posts: 1445
Joined: December 7th, 2013, 1:05 am

Re: Q&A for ptbsearch

Post by Scorbie » May 5th, 2015, 6:55 am

Scorbie wrote: chris_c wrote:
Does this mean that the first interaction must begin on or before time last-gen? It shouldn't be too hard to add this.
Thanks a lot!! I was going to make the change myself, but I'm a real newbie in programming....
I meant yes...
chris_c wrote: Scorbie wrote:
I think another possible feature is catforce's stable-interval...
What does this one do? Are you using the program 'survive' or are you just looking at output directly from ptbsearch? Survive makes sure that all catalysts survive until generation 500. I agree it would be useful if 500 was a user-defined parameter.
Sorry for the confusion. I meant before survive. There are some (but not too many) unstable results that are wrecked a few gens after its catalysis.

By the way, I do think it would be nice if 500 was a user-defind parameter.

EDIT: @chris_c could you tell me how you handled the case where the transparent catalyst is the last one? It doesn't wait forever for any catalyst to be damaged, does it?
Best wishes to you, Scorbie

chris_c
Posts: 953
Joined: June 28th, 2014, 7:15 am

Re: Q&A for ptbsearch

Post by chris_c » May 5th, 2015, 7:15 am

Scorbie wrote: I meant yes...
Very good. Here is an attempt to implement that. When I say that it is completely untested I am not exaggerating!
Scorbie wrote:Sorry for the confusion. I meant before survive. There are some (but not too many) unstable results that are wrecked a few gens after its catalysis.
Right. I rarely look at the results directly from ptbsearch so I hadn't noticed this. I'll see what I can do.
Scorbie wrote:EDIT: @chris_c could you tell me how you handled the case where the transparent catalyst is the last one? It doesn't wait forever for any catalyst to be damaged, does it?
I think that once the last catalyst is placed it runs everything for another 50 generations (hard-coded) and checks whether everything is back in place. The code for that part is here.

User avatar
Scorbie
Posts: 1445
Joined: December 7th, 2013, 1:05 am

Re: Q&A for ptbsearch

Post by Scorbie » May 5th, 2015, 7:40 am

chris_c wrote: Scorbie wrote:
I meant yes...
Very good. Here is an attempt to implement that. When I say that it is completely untested I am not exaggerating!
I just had a test run but it includes reactions after last-gen. Can you have a look?
The project compiled well, and I ran with these parameters:

Code: Select all

ptb2 lwss.life spartan.list 30 1 5 1 9
And got this: (nice to see the transparent beehive, by the way!)

Code: Select all

x = 824, y = 160, rule = B3/S23
b2o48b2o48b2o47bo56b4o46b4o46b4o49b4o37b2o48b2o48b2o47bo58b4o46b4o46b
4o49b4o35b2o$b2o48b2o48b2o47b3o47b2o5bo3bo38b2o5bo3bo38b2o5bo3bo41b2o
5bo3bo36b2o48b2o48b2o47b3o47b2o7bo3bo36b2o7bo3bo36b2o7bo3bo39b2o7bo3bo
34b2o$153bo46b2o5bo42b2o5bo42b2o5bo45b2o5bo192bo46b2o7bo40b2o7bo40b2o
7bo43b2o7bo$152b2o54bo2bo46bo2bo46bo2bo49bo2bo187b2o56bo2bo46bo2bo46bo
2bo49bo2bo$2o4b4o40b2o4b4o40b2o4b4o290b2o6b4o38b2o6b4o38b2o6b4o288b2o
8b4o$2o4bo3bo39b2o4bo3bo39b2o4bo3bo90b2o48b2o48b2o49b2o46b2o6bo3bo37b
2o6bo3bo37b2o6bo3bo88b2o48b2o48b2o49b2o46b2o8bo3bo$6bo49bo49bo46b2o4b
4o38b2o48b2o48b2o50bo54bo49bo49bo44b2o6b4o36b2o48b2o48b2o50bo56bo$7bo
2bo46bo2bo46bo2bo42b2o4bo3bo186b3o56bo2bo46bo2bo46bo2bo40b2o6bo3bo184b
3o58bo2bo$159bo190bo210bo188bo$160bo2bo398bo2bo41$b2o48b2o47bo60b4o46b
4o46b4o49b4o33b2o48b2o48b2o47bo62b4o46b4o46b4o49b4o31b2o48b2o$b2o48b2o
47b3o47b2o9bo3bo34b2o9bo3bo34b2o9bo3bo37b2o9bo3bo32b2o48b2o48b2o47b3o
47b2o11bo3bo32b2o11bo3bo32b2o11bo3bo35b2o11bo3bo30b2o48b2o$103bo46b2o
9bo38b2o9bo38b2o9bo41b2o9bo188bo46b2o11bo36b2o11bo36b2o11bo39b2o11bo$
102b2o58bo2bo46bo2bo46bo2bo49bo2bo183b2o60bo2bo46bo2bo46bo2bo49bo2bo$
2o8b4o36b2o8b4o286b2o10b4o34b2o10b4o34b2o10b4o284b2o12b4o32b2o12b4o$2o
8bo3bo35b2o8bo3bo86b2o48b2o48b2o49b2o46b2o10bo3bo33b2o10bo3bo33b2o10bo
3bo84b2o48b2o48b2o49b2o46b2o12bo3bo31b2o12bo3bo$10bo49bo42b2o8b4o34b2o
48b2o48b2o50bo58bo49bo49bo40b2o10b4o32b2o48b2o48b2o50bo60bo49bo$11bo2b
o46bo2bo38b2o8bo3bo182b3o60bo2bo46bo2bo46bo2bo36b2o10bo3bo180b3o62bo2b
o46bo2bo$113bo186bo214bo184bo$114bo2bo398bo2bo41$b2o47bo64b4o46b4o46b
4o49b4o29b2o48b2o48b2o47bo66b4o46b4o46b4o49b4o27bo48bo50bo$b2o47b3o47b
2o13bo3bo30b2o13bo3bo30b2o13bo3bo33b2o13bo3bo28b2o48b2o48b2o47b3o47b2o
15bo3bo28b2o15bo3bo28b2o15bo3bo31b2o15bo3bo25bobo47b3o47bobo$53bo46b2o
13bo34b2o13bo34b2o13bo37b2o13bo184bo46b2o15bo32b2o15bo32b2o15bo35b2o
15bo30bo5b4o42bo47bo7b4o$52b2o62bo2bo46bo2bo46bo2bo49bo2bo179b2o64bo2b
o46bo2bo46bo2bo49bo2bo32bo3bo40b2o55bo3bo$2o12b4o282b2o14b4o30b2o14b4o
30b2o14b4o287bo101bo$2o12bo3bo82b2o48b2o48b2o49b2o46b2o14bo3bo29b2o14b
o3bo29b2o14bo3bo80b2o48b2o48b2o49b2o54bo2bo46b4o48bo2bo$14bo38b2o12b4o
30b2o48b2o48b2o50bo62bo49bo49bo36b2o14b4o28b2o48b2o48b2o50bo48b2o54bo
3bo39b2o$15bo2bo34b2o12bo3bo178b3o64bo2bo46bo2bo46bo2bo32b2o14bo3bo
176b3o50bo47bo6bo44bo$67bo182bo218bo180bo49b3o47bobo6bo2bo37b3o$68bo2b
o398bo2bo226bo50bo48bo41$o50bo48bo50bo48bo50bo48bo50bo48bo61b4o40bo57b
4o38bo59b4o36bo61b4o34bo$3o47bobo47b3o47bobo47b3o47bobo47b3o47bobo47b
3o59bo3bo33b2o3bobo56bo3bo31b2o3bobo58bo3bo29b2o3bobo60bo3bo27b2o3bobo
$3bo47bo9b4o38bo47bo11b4o36bo47bo13b4o34bo47bo15b4o32bo47bo4bo5bo37bob
o2bobo43bo4bo7bo35bobo2bobo43bo4bo9bo33bobo2bobo43bo4bo11bo31bobo2bobo
$2b2o57bo3bo36b2o59bo3bo34b2o61bo3bo32b2o63bo3bo30b2o46bobo2bobo5bo2bo
34bo4bo6b4o33bobo2bobo7bo2bo32bo4bo8b4o31bobo2bobo9bo2bo30bo4bo10b4o
29bobo2bobo11bo2bo28bo4bo12b4o$61bo101bo101bo101bo82b2o3bobo55bo3bo32b
2o3bobo57bo3bo30b2o3bobo59bo3bo28b2o3bobo61bo3bo$10b4o48bo2bo46b4o48bo
2bo46b4o48bo2bo46b4o48bo2bo46b4o34bo56bo42bo58bo40bo60bo38bo62bo$10bo
3bo37b2o58bo3bo35b2o60bo3bo33b2o62bo3bo31b2o64bo3bo91bo2bo98bo2bo98bo
2bo98bo2bo$bo8bo42bo47bo10bo40bo47bo12bo38bo47bo14bo36bo47bo16bo$obo8b
o2bo35b3o47bobo10bo2bo33b3o47bobo12bo2bo31b3o47bobo14bo2bo29b3o47bobo
16bo2bo$bo48bo50bo48bo50bo48bo50bo48bo50bo!
I'll run this with the original version and check if there's something different.
EDIT: Whoops, accidentally ran it with that extra parameter 9... But that doesn't make a difference, does it?
Here's the original result... which is more comprehensive than the fixed version! Curiouser and curiouser!
(By the way, you were right about the t=0 reaction thing. opaque catalysts also get in at t=0 which makes useless solutions. I remembered wrong.)

Code: Select all

x = 824, y = 363, rule = B3/S23
b2o48b2o48b2o47bo56b4o46b4o46b4o49b4o37b2o48b2o48b2o47bo58b4o46b4o46b
4o49b4o35b2o$b2o48b2o48b2o47b3o47b2o5bo3bo38b2o5bo3bo38b2o5bo3bo41b2o
5bo3bo36b2o48b2o48b2o47b3o47b2o7bo3bo36b2o7bo3bo36b2o7bo3bo39b2o7bo3bo
34b2o$153bo46b2o5bo42b2o5bo42b2o5bo45b2o5bo192bo46b2o7bo40b2o7bo40b2o
7bo43b2o7bo$152b2o54bo2bo46bo2bo46bo2bo49bo2bo187b2o56bo2bo46bo2bo46bo
2bo49bo2bo$2o4b4o40b2o4b4o40b2o4b4o290b2o6b4o38b2o6b4o38b2o6b4o288b2o
8b4o$2o4bo3bo39b2o4bo3bo39b2o4bo3bo90b2o48b2o48b2o49b2o46b2o6bo3bo37b
2o6bo3bo37b2o6bo3bo88b2o48b2o48b2o49b2o46b2o8bo3bo$6bo49bo49bo46b2o4b
4o38b2o48b2o48b2o50bo54bo49bo49bo44b2o6b4o36b2o48b2o48b2o50bo56bo$7bo
2bo46bo2bo46bo2bo42b2o4bo3bo186b3o56bo2bo46bo2bo46bo2bo40b2o6bo3bo184b
3o58bo2bo$159bo190bo210bo188bo$160bo2bo398bo2bo41$b2o48b2o47bo60b4o46b
4o46b4o49b4o33b2o48b2o48b2o47bo62b4o46b4o46b4o49b4o31b2o48b2o$b2o48b2o
47b3o47b2o9bo3bo34b2o9bo3bo34b2o9bo3bo37b2o9bo3bo32b2o48b2o48b2o47b3o
47b2o11bo3bo32b2o11bo3bo32b2o11bo3bo35b2o11bo3bo30b2o48b2o$103bo46b2o
9bo38b2o9bo38b2o9bo41b2o9bo188bo46b2o11bo36b2o11bo36b2o11bo39b2o11bo$
102b2o58bo2bo46bo2bo46bo2bo49bo2bo183b2o60bo2bo46bo2bo46bo2bo49bo2bo$
2o8b4o36b2o8b4o286b2o10b4o34b2o10b4o34b2o10b4o284b2o12b4o32b2o12b4o$2o
8bo3bo35b2o8bo3bo86b2o48b2o48b2o49b2o46b2o10bo3bo33b2o10bo3bo33b2o10bo
3bo84b2o48b2o48b2o49b2o46b2o12bo3bo31b2o12bo3bo$10bo49bo42b2o8b4o34b2o
48b2o48b2o50bo58bo49bo49bo40b2o10b4o32b2o48b2o48b2o50bo60bo49bo$11bo2b
o46bo2bo38b2o8bo3bo182b3o60bo2bo46bo2bo46bo2bo36b2o10bo3bo180b3o62bo2b
o46bo2bo$113bo186bo214bo184bo$114bo2bo398bo2bo41$b2o47bo64b4o46b4o46b
4o49b4o29b2o48b2o48b2o47bo66b4o46b4o46b4o49b4o27bo48bo50bo$b2o47b3o47b
2o13bo3bo30b2o13bo3bo30b2o13bo3bo33b2o13bo3bo28b2o48b2o48b2o47b3o47b2o
15bo3bo28b2o15bo3bo28b2o15bo3bo31b2o15bo3bo25bobo47b3o47bobo$53bo46b2o
13bo34b2o13bo34b2o13bo37b2o13bo184bo46b2o15bo32b2o15bo32b2o15bo35b2o
15bo30bo5b4o42bo47bo7b4o$52b2o62bo2bo46bo2bo46bo2bo49bo2bo179b2o64bo2b
o46bo2bo46bo2bo49bo2bo32bo3bo40b2o55bo3bo$2o12b4o282b2o14b4o30b2o14b4o
30b2o14b4o287bo101bo$2o12bo3bo82b2o48b2o48b2o49b2o46b2o14bo3bo29b2o14b
o3bo29b2o14bo3bo80b2o48b2o48b2o49b2o54bo2bo46b4o48bo2bo$14bo38b2o12b4o
30b2o48b2o48b2o50bo62bo49bo49bo36b2o14b4o28b2o48b2o48b2o50bo48b2o54bo
3bo39b2o$15bo2bo34b2o12bo3bo178b3o64bo2bo46bo2bo46bo2bo32b2o14bo3bo
176b3o50bo47bo6bo44bo$67bo182bo218bo180bo49b3o47bobo6bo2bo37b3o$68bo2b
o398bo2bo226bo50bo48bo41$o50bo48bo50bo48bo50bo48bo50bo48bo61b4o40bo57b
4o38bo59b4o36bo61b4o34bo$3o47bobo47b3o47bobo47b3o47bobo47b3o47bobo47b
3o59bo3bo33b2o3bobo56bo3bo31b2o3bobo58bo3bo29b2o3bobo60bo3bo27b2o3bobo
$3bo47bo9b4o38bo47bo11b4o36bo47bo13b4o34bo47bo15b4o32bo47bo4bo5bo37bob
o2bobo43bo4bo7bo35bobo2bobo43bo4bo9bo33bobo2bobo43bo4bo11bo31bobo2bobo
$2b2o57bo3bo36b2o59bo3bo34b2o61bo3bo32b2o63bo3bo30b2o46bobo2bobo5bo2bo
34bo4bo6b4o33bobo2bobo7bo2bo32bo4bo8b4o31bobo2bobo9bo2bo30bo4bo10b4o
29bobo2bobo11bo2bo28bo4bo12b4o$61bo101bo101bo101bo82b2o3bobo55bo3bo32b
2o3bobo57bo3bo30b2o3bobo59bo3bo28b2o3bobo61bo3bo$10b4o48bo2bo46b4o48bo
2bo46b4o48bo2bo46b4o48bo2bo46b4o34bo56bo42bo58bo40bo60bo38bo62bo$10bo
3bo37b2o58bo3bo35b2o60bo3bo33b2o62bo3bo31b2o64bo3bo91bo2bo98bo2bo98bo
2bo98bo2bo$bo8bo42bo47bo10bo40bo47bo12bo38bo47bo14bo36bo47bo16bo$obo8b
o2bo35b3o47bobo10bo2bo33b3o47bobo12bo2bo31b3o47bobo14bo2bo29b3o47bobo
16bo2bo$bo48bo50bo48bo50bo48bo50bo48bo50bo41$9b4o38bo48b2o59b2o48b4o
36bo48b2o59b2o38bo48b2o49bo48b2o49bo48b2o49bo48b2o50bo$9bo3bo37b3o47bo
59bo49bo3bo35b3o47bo59bo39b3o47bo49b3o47bo49b3o47bo49b3o47bo50b3o$9b2o
43bo46bobo55b4o46b3o42bo46bobo55bob4o39bo46bobo50bo46bobo50bo46bobo50b
o46bobo51bo$2b2o5b3obo39b2o47b2o55b2o2bo38b2o5bob2o2bo37b2o47b2o55b3o
3bo37b2o47b2o49b2o47b2o49b2o47b2o49b2o47b2o50b2o$bobo7bo97b4o46bo41bob
o7bo99b4o46bo101b4o98b4o98b4o98b4o$bo9b2o46b4o46bo3bo38b2o6bo2bo37bo9b
2o48b4o46bo3bo36b2o8bo2bo47b4o46bo3bo47b4o46bo3bo47b4o46bo3bo47b4o46bo
3bo36b4o$2o57bo3bo45bo41bobo46b2o59bo3bo45bo39bobo59bo3bo45bo51bo3bo
45bo51bo3bo45bo51bo3bo45bo40bo3bo$59bo42b2o6bo2bo37bo109bo40b2o8bo2bo
35bo61bo38b2o10bo2bo47bo36b2o12bo2bo47bo34b2o14bo2bo47bo32b2o16bo2bo
36bo$52b2o6bo2bo37bobo46b2o100b2o8bo2bo35bobo46b2o50b2o10bo2bo33bobo
48b2o12bo2bo31bobo48b2o14bo2bo29bobo48b2o16bo2bo27bobo48b2o7bo2bo$51bo
bo47bo149bobo47bo99bobo47bo49bobo47bo49bobo47bo49bobo47bo49bobo$51bo
48b2o149bo48b2o99bo48b2o49bo48b2o49bo48b2o49bo48b2o49bo$50b2o198b2o
148b2o98b2o98b2o98b2o98b2o39$2bo48bo48bo51bo49bo48bo48bo51bo49bo48bo
50bo49bo48bo50bo49bo48bo48b2o$2b3o46b3o46b3o8b2o39b3o47b3o46b3o46b3o8b
2o39b3o47b3o46b3o48b3o47b3o46b3o48b3o47b3o46b3o47bo$5bo48bo48bo7bo43bo
49bo48bo48bo7bo43bo49bo48bo50bo49bo48bo50bo49bo48bo46bobo$4b2o47b2o47b
2o5bobo42b2o48b2o47b2o47b2o5bobo42b2o48b2o47b2o49b2o48b2o47b2o49b2o48b
2o47b2o47b2o$109b2o198b2o497b4o$10b4o45b4o42b2ob4o50b4o46b4o45b4o40b2o
3b4o50b4o46b4o45b4o49b4o46b4o45b4o49b4o46b4o45b4o37b3obo$10bo3bo44bo3b
o41bob2o3bo49bo3bo45bo3bo44bo3bo39bobo2bo3bo49bo3bo45bo3bo44bo3bo48bo
3bo45bo3bo44bo3bo48bo3bo45bo3bo44bo3bo36b2obo$10bo48bo46b3o53bo49bo48b
o44b2o2bo53bo49bo48bo52bo49bo48bo52bo49bo48bo41bob2o$11bo2bo45bo2bo45b
o2bo39b2o9bo2bo46bo2bo45bo2bo45bo2bo37b2o11bo2bo46bo2bo45bo2bo34b2o13b
o2bo46bo2bo45bo2bo32b2o15bo2bo46bo2bo45bo2bo39b2o$2b2o48b2o97bobo48b2o
48b2o97bobo48b2o48b2o47bobo48b2o48b2o47bobo48b2o48b2o$bobo49bo97bo49bo
bo49bo97bo49bobo49bo47bo49bobo49bo47bo49bobo49bo$bo48b3o97b2o49bo48b3o
97b2o49bo48b3o47b2o49bo48b3o47b2o49bo48b3o$2o48bo149b2o48bo149b2o48bo
99b2o48bo99b2o48bo38$2o48b2o48b2o48b2o48b2o48b2o48b2o48b2o48b2o48b2o
48b2o48bo49b2o48b2o54b5o39bo49b2o$bo49bo9b2o38bo49bo49bo9b2o38bo49bo
49bo9b2o38bo49bo49bo48b3o48bo49bo53bobo3bo38b3o48bo$bobo47bobo7bo39bob
o47bobo47bobo7bo39bobo47bobo47bobo7bo39bobo47bobo47bobo49bo47bobo47bob
o51b3o45bo47bobo$2b2o48b2o5bobo40b2o48b2o48b2o5bobo40b2o48b2o48b2o5bob
o40b2o48b2o48b2o48b2o48b2o48b2o54b4o40b2o48b2o$8b4o46b4o48b4o46b4o45b
5o48b4o46b4o43b2ob4o48b4o48b4o48b4o87b4o89b2o5bobo99b4o$8bo3bo45bo3bo
46b2o3bo45bo3bo45bo3bo44b2obo3bo45bo3bo45bo3bo47bo3bo47bo3bo47bo3bo35b
4o47bo3bo45b4o40bo7bo48b4o47bo3bo$8bo49bo50b3o48bo49bo48bob2o49bo49bo
51bo51bo51bo39bo3bo46bo49bo3bo36b3o8b2o47bo3bo46bo$9bo2bo46bo2bo48bo2b
o46bo2bo46bo2bo46bobo2bo46bo2bo46bo2bo48bo2bo48bo2bo48bo2bo35bo51bo2bo
45bo40bo59bo51bo2bo$3b2o106b2o40b2o106b2o40b2o98b2o48b2o48b2o54bo2bo
41b2o54bo2bo97bo2bo39b2o$4bo149bo149bo99bo49bo49bo48b2o50bo48b2o97b2o
50bo$b3o147b3o147b3o97b3o47b3o47b3o50bo47b3o50bo98bo47b3o$bo149bo149bo
99bo49bo49bo49b3o48bo49b3o96b3o48bo$551bo100bo98bo38$2o54b2ob4o37bo49b
2o48b2o54b2o3b4o35bo49b2o48b2o48bo49b2o48b2o48bo49b2o$bo53bobobo3bo36b
3o48bo49bo53bobo3bo3bo34b3o48bo49bo48b3o48bo49bo48b3o48bo$bobo51b2o2bo
43bo47bobo47bobo51b2o4bo41bo47bobo47bobo49bo47bobo47bobo49bo47bobo$2b
2o55b2o2bo38b2o48b2o48b2o55b2obo2bo36b2o48b2o48b2o48b2o48b2o48b2o48b2o
48b2o$52b2o5bobo101b4o85b2o5bobo103b4o148b4o148b4o$11b4o38bo7bo50b4o
47bo3bo45b4o36bo7bo52b4o47bo3bo45b4o47b4o47bo3bo45b4o47b4o47bo3bo$11bo
3bo34b3o8b2o49bo3bo46bo49bo3bo32b3o8b2o51bo3bo46bo49bo3bo46bo3bo46bo
49bo3bo46bo3bo46bo$11bo38bo61bo51bo2bo45bo36bo63bo51bo2bo45bo50bo51bo
2bo45bo50bo51bo2bo$12bo2bo97bo2bo37b2o58bo2bo97bo2bo35b2o60bo2bo47bo2b
o33b2o62bo2bo47bo2bo31b2o$4b2o97b2o50bo48b2o97b2o50bo48b2o47b2o50bo48b
2o47b2o50bo$5bo98bo47b3o50bo98bo47b3o50bo48bo47b3o50bo48bo47b3o$2b3o
96b3o48bo49b3o96b3o48bo49b3o46b3o48bo49b3o46b3o48bo$2bo98bo100bo98bo
100bo48bo100bo48bo!
Best wishes to you, Scorbie

chris_c
Posts: 953
Joined: June 28th, 2014, 7:15 am

Re: Q&A for ptbsearch

Post by chris_c » May 5th, 2015, 8:07 am

Scorbie wrote:I just had a test run but it includes reactions after last-gen. Can you have a look?
It seems to be ok for me. One thing I noticed is that the Makefile is a bit odd. Can you remove all object files with "rm *o" and then do "make ptb2" just to make sure you are compiling the new code. (Sorry in advance if that is not the problem.)

User avatar
Scorbie
Posts: 1445
Joined: December 7th, 2013, 1:05 am

Re: Q&A for ptbsearch

Post by Scorbie » May 5th, 2015, 8:58 am

chris_c wrote:One thing I noticed is that the Makefile is a bit odd. Can you remove all object files with "rm *o" and then do "make ptb2" just to make sure you are compiling the new code. (Sorry in advance if that is not the problem.)
You mean the makefile from your repository is a bit odd, right? I couldn't compile with the Makefile so I made a batch script. (Hence, no object files.) (Please tell me if mine's odd. The Makefile in my repo is different from yours. I used Sokwe's version.)
By the way, did I make any mistakes in the search?
These input params:

Code: Select all

ptb2 lwss.life spartan.list 30 1 5 1 9
mean that the first catalyst reacts between gen 5 and gen 9 && all catalyst react before gen 30, right?
The results here seem to be reacting after gen 9.
Best wishes to you, Scorbie

chris_c
Posts: 953
Joined: June 28th, 2014, 7:15 am

Re: Q&A for ptbsearch

Post by chris_c » May 5th, 2015, 9:17 am

Scorbie wrote: By the way, did I make any mistakes in the search?
These input params:

Code: Select all

ptb2 lwss.life spartan.list 30 1 5 1 9
mean that the first catalyst reacts between gen 5 and gen 9 && all catalyst react before gen 30, right?
The results here seem to be reacting after gen 9.
That all sounds correct to me. My lwss.life file is like this:

Code: Select all

****!*...*!*!.*..*!
My ptb file is like this:

Code: Select all

...*!.***!*!zz!
..*z!.*.z!.*!**!
zz!*!.***!...*!
z*!z.*!..*!..**!
*!***!...*!..zz!
**!.*!.*.z!..*z!
..zz!...*!***!*!
..**!..*!z.*!z*!
.zz!z..z!.zz!
.z!z.z!z.z!.z!
zz!zz!
*z!*z!
z*!z*!
**!zz!
zz!**!
.z!z.*!.**!
.z!*.z!**!
.**!z.*!.z!
**!*.z!.z!
My command line is this:

Code: Select all

./ptb2 lwss.life myptb.list 30 1 5 1 9
My output is this:

Code: Select all

x = 653, y = 169, rule = B3/S23
9b4o68bo78b2o89b2o69bo79bo78bo78b2o78b2o$9bo3bo67b3o77bo89bo70b3o77b3o
76b3o77bo79bo$10bo73bo76bobo86b3o72bo79bo78bo76bobo77bobo$2b2o5b3obo
69b2o77b2o86bo2bo70b2o78b2o77b2o77b2o78b2o$bobo7bo157b4o76bo318b4o76b
4o$bo9b2o76b4o76bo3bo68b2o6bo2bo76b4o76b4o75b4o75b3obo75bo3bo$2o87bo3b
o75bo71bobo86bo3bo75bo3bo74bo3bo74b2obo76bo$89bo72b2o6bo2bo67bo88bo79b
o78bo79bob2o76bo2bo$82b2o6bo2bo67bobo76b2o80b2o7bo2bo76bo2bo75bo2bo77b
2o70b2o$81bobo77bo159bobo78b2o78b2o160bo$81bo78b2o159bo79bobo79bo157b
3o$80b2o238b2o79bo78b3o158bo$400b2o78bo68$2o78bo79b2o78b2o90b4o70bo73b
o80b2o78b2o$bo9b2o67b3o78bo79bo90bo3bo63b2o3bobo72b3o78b2o78b2o$bobo7b
o71bo77bobo77bobo77bo4bo5bo67bobo2bobo75bo$2b2o5bobo70b2o78b2o78b2o76b
obo2bobo5bo2bo64bo4bo6b4o65b2o$8bob2o157b4o147b2o3bobo85bo3bo142b2o4b
4o70b2o4b4o$8bo3bo75b4o77bo3bo75b4o73bo86bo146b2o4bo3bo69b2o4bo3bo$8bo
79bo3bo76bo79bo3bo160bo2bo65b2o4b4o73bo79bo$9bo2bo75bo81bo2bo75bo233b
2o4bo3bo73bo2bo76bo2bo$89bo2bo71b2o84bo2bo235bo$83b2o80bo78b2o244bo2bo
$84bo77b3o80bo$81b3o78bo79b3o$81bo160bo68$10b4o73b4o76b4o$3b2o5bo3bo
65b2o5bo3bo68b2o5bo3bo$3b2o5bo69b2o5bo72b2o5bo$11bo2bo73bo2bo76bo2bo2$
2b2o77b2o78b2o$3bo77b2o78b2o$3o$o!
Everything reacts by generation 9. Strange.

I will have a look Sokwe's version of the code. Thanks for the link.

EDIT: And if I change the command line to "./ptb2 lwss.life myptb.list 30 1 5 1 13" I seem to get around double the number of results and everything reacting by generation 13.

EDIT2: Sokwe's version is byte-for-byte identical to the "Initial commit" in my github repository except the Makefile is much tidier. So I'm really not sure why we are getting different results....

User avatar
Scorbie
Posts: 1445
Joined: December 7th, 2013, 1:05 am

Re: Q&A for ptbsearch

Post by Scorbie » May 5th, 2015, 9:44 am

chris_c wrote:I will have a look Sokwe's version of the code.
Oh no! I only used his makefile. No need to do work...
Best wishes to you, Scorbie

User avatar
Scorbie
Posts: 1445
Joined: December 7th, 2013, 1:05 am

Re: Q&A for ptbsearch

Post by Scorbie » May 5th, 2015, 10:20 am

Now it outputs the same results as yours.(except for the t=0 interaction) Must have done something wrong. Strange.
Best wishes to you, Scorbie

chris_c
Posts: 953
Joined: June 28th, 2014, 7:15 am

Re: Q&A for ptbsearch

Post by chris_c » May 5th, 2015, 10:46 am

Scorbie wrote:Now it outputs the same results as yours.(except for the t=0 interaction) Must have done something wrong. Strange.
Cool. Happy hunting. I pushed another patch containing a few tweaks: added to the README, stripped the Makefile and made sure behaviour was identical to old behaviour if someone forgets to specify a value for the new parameter.

Did you run with exactly the same input files as me? If the t=0 results didn't show up then it suggests the problem could be something to do with uninitialised variables that is compiler dependent.

User avatar
Scorbie
Posts: 1445
Joined: December 7th, 2013, 1:05 am

Re: Q&A for ptbsearch

Post by Scorbie » May 5th, 2015, 11:20 am

chris_c wrote:Did you run with exactly the same input files as me? If the t=0 results didn't show up then it suggests the problem could be something to do with uninitialised variables that is compiler dependent.
Oh, yours also has the t=0 interaction. I didn't notice. I meant I did have those interactions...
Best wishes to you, Scorbie

User avatar
Scorbie
Posts: 1445
Joined: December 7th, 2013, 1:05 am

Re: Q&A for ptbsearch

Post by Scorbie » May 5th, 2015, 11:36 am

Here's one of the results:

Code: Select all

x = 18, y = 7, rule = B3/S23
6bo$2o3bobo$obo2bobo3b2o$bo4bo4bob4o$12b3o2bo$13b2o$14bo2bo!
Which strongly suggests that the t=0 interaction occurs when adding new catalysts to working ones.
Best wishes to you, Scorbie

chris_c
Posts: 953
Joined: June 28th, 2014, 7:15 am

Re: Q&A for ptbsearch

Post by chris_c » May 5th, 2015, 10:40 pm

Scorbie wrote:Here's one of the results:

Code: Select all

x = 18, y = 7, rule = B3/S23
6bo$2o3bobo$obo2bobo3b2o$bo4bo4bob4o$12b3o2bo$13b2o$14bo2bo!
Which strongly suggests that the t=0 interaction occurs when adding new catalysts to working ones.
OK, I think I've got a good fix. The problem was that if a catalyst touches the reaction at T=0 then it is not being marked as such. The example you gave really looks like this:

Code: Select all

x = 18, y = 7, rule = LifeHistory
6.A$2A3.A.A$A.A2.A.A3.2D$.A4.A4.D.4A$12.DCD2.A$13.AD$14.A2.A!
The program sees that the catalyst touches the pattern between generation 0 and generation 28 but all the time it thinks "Oh, the catalyst already touches. Therefore the real reaction must have started at least 1 generation ago"... but that is not true at generation 0.

If you run to generation 29 and then add the eater you will see that it works correctly the rest of the way! My fix just adds a special case for catalysts that touch at generation 0. Seems to work pretty well on limited testing.

User avatar
Scorbie
Posts: 1445
Joined: December 7th, 2013, 1:05 am

Re: Q&A for ptbsearch

Post by Scorbie » May 6th, 2015, 1:00 am

Yay!! Thanks a lot!! I'll test it right after I go back home and have access to my computer!!
Best wishes to you, Scorbie

chris_c
Posts: 953
Joined: June 28th, 2014, 7:15 am

Re: Q&A for ptbsearch

Post by chris_c » May 6th, 2015, 7:25 am

Scorbie wrote:Yay!! Thanks a lot!! I'll test it right after I go back home and have access to my computer!!
I was getting some segfaults so I pushed another patch. Also I set the interaction time for catalysts that are already touching at T=0 to -1. This means that it is OK for minimum generation to be equal to 0 should anybody really need to do that.

User avatar
Scorbie
Posts: 1445
Joined: December 7th, 2013, 1:05 am

Re: Q&A for ptbsearch

Post by Scorbie » May 7th, 2015, 4:14 pm

I wrote:I think another possible feature is catforce's stable-interval...
I said that because
There are some (but not too many) unstable results that are wrecked a few gens after its catalysis.
Like this:

Code: Select all

x = 20, y = 13, rule = B3/S23
3o$2bo$3o13bo$16b3o$19bo$18b2o2$8b2o$8b2o$14b2o$14bobo$16bo$16b2o!
Okay. I currently made a workaround for "stable-interval". This is only a workaround as it doesn't reduce search time, but only filters the results.
(i.e. if this param is 10 then the catalysts should not be wrecked for at least 10 gens after its catalysis.)

This is the changed survive.c (Note: I advise you not to copy&&paste it hastily. I changed the indentation format.)
I only made a new param 'withstand' and replaced it with the default value 10. (find the text 'withstand' and you'll see the changes I made.)
Usage is the same, with the new parameter specified at the end. e.g.

Code: Select all

survive a 10 <ptbpicol.out>survive.out
survive.c

Code: Select all

#include <stdio.h>
#include <limits.h>
#include "gen.h"
#include <malloc.h>

main(int argc, char *argv[]) {

	static LifeList cells;
	static LifeList matchcells;
	static LifeList outcells;
	int i,j,n=0;
	int gens=500;
	int x,y;
	int match;
	int pos;
	int count[240];
	int least= 0;
	int fail;
	int damaged;
	int restored;
	int withstand=10;
	int prodcells;
	char outpat[100000];


	History hist;
	int period, repetitions;
	Cell lifetrail[5000];
	static char nextpat[2000];
	int ncls;

	initLifeList(&cells);
	initLifeList(&matchcells);
	initLifeList(&outcells);

	while(gets(nextpat)) {

		for (i=0; i<240; i++) { count[i] = i; }

		getpat(nextpat, &cells);
		copyLifeList(&cells, &matchcells);

		if (argc>1) {
			for (i=0; argv[1][i]; i++) {
				matchcells.ncells =
				        removeIfEquals(matchcells.cellList, matchcells.ncells, argv[1][i]);
			}
		}

		fail=0;
		damaged=0;
		restored=0;
		for (i=0; i<gens; i++) {
			generate(&cells);

			//      printf("%d %d %d %d\n", i, fail, damaged, restored);

			count[i%240] = cells.ncells;

			if (cells.ncells == 0) break;

			match = 1;
			for (j=0; j<180; j++) {
				if (count[j] != count[j+60]) {
					match = 0;
					break;
				}
			}

			if (match) break;

			if ( matchLifeList(&cells, &matchcells, 0) < matchcells.ncells) {
				fail++;
				restored=0;
			} else {
				prodcells = cells.ncells - matchcells.ncells;
				copyLifeList(&cells, &outcells);

				restored++;
				if (restored>withstand) {
					if (fail>damaged) damaged=fail;
					fail = 0;
				}
			}

			if (fail>150) break;

		}

		if (damaged) {
			fflush(stdout);
			removeLifeList(&outcells, &matchcells, 0);
			makeString(outcells.cellList, outcells.ncells, outpat);

			printf("%s %d %d %d %d %s\n", nextpat, damaged, fail, i-fail, prodcells, outpat);
		}

	}
}

Best wishes to you, Scorbie

Post Reply