Since there's no code in wwei's (second) version of the script to search these, and since the notion of monstrous 256x256 soups somehow appealed to me, I went ahead and wrote support for these myself. The pseudo-symmetry I used is AB_256x256_Test.calcyman wrote:The same applies to those monstrous 256-by-256 '25p' soups obtained by taking the https://en.wikipedia.org/wiki/Kronecker_product of a C1 soup with itself.

Here's a diff against Aidan's v0.54+0.31i; the only real modification is in hashsoup(). The code could easily be adapted to symmetries other than C1, though you'd then have to decide whether to first produce a symmetrical soup and THEN compute the Kronecker product, or compute the Kronecker product first and THEN produce a symmetrical soup, since obviously these operations don't commute.

All typos, thinkos, and brown paper bag bugs in this code are mine.

Code: Select all

```
--- apgsearch-2017-8-07-v0.54+0.31i.py 2017-08-08 21:54:53.572199300 +0200
+++ apgsearch-2017-8-07-v0.54+0.31i-ab1.py 2017-08-08 22:56:40.193205900 +0200
@@ -51,7 +51,7 @@
import urllib2
#Version "number"
-vnum = "v0.54+0.3i"
+vnum = "v0.54+0.31i-ab1"
g2_8 = True
'''#Stores whether the rule is outer-totalistic or not
@@ -296,10 +296,50 @@
thesoup.append(thesoup[x+1])
thesoup.append(-thesoup[x]-1)
+ if sym == "AB_256x256_Test":
+
+ thearray = [
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ]
+
+ for j in xrange(0, len(thesoup), 2):
+ x = thesoup[j]
+ y = thesoup[j + 1]
+ thearray[x][y] = 1
+
+ thesoup = [];
+ for j in xrange(256):
+ for k in xrange(256):
+ ax = int(j / 16)
+ ay = int(k / 16)
+ bx = j % 16
+ by = k % 16
+ if (thearray[ax][ay] * thearray[bx][by]) == 1:
+ thesoup.append(j)
+ thesoup.append(k)
+
return thesoup
# Checks if symmetry is a valid one.
def check(string):
+ if string == "AB_256x256_Test":
+ return string
+
symmetries = {"C1": [],
"C2": ["1", "2", "4"],
"C4": ["1", "4"],
@@ -13203,7 +13243,7 @@
if not upload:
rootstring = g.getstring("What seed to use for this search (make this unique)?", datetime.datetime.now().isoformat()+"")
rulestring = g.getstring("Which rule to use?", "B3/S23")
- symmstring = g.getstring("What symmetries to use?", "C1")
+ symmstring = g.getstring("What symmetries to use?", "AB_256x256_Test")
pseudo = False
payoshakey = g.getstring("Please enter your key (visit "+get_server_address()+"/payosha256 in your browser).", "#anon") if upload else None
if not upload:
@@ -13216,7 +13256,7 @@
orignumber = min(orignumber, 100000000)
number = orignumber
initpos = 0
- if symmstring not in ["1x256", "2x128", "4x64", "8x32", "C1", "C2_1", "C2_2", "C2_4", "C4_1", "C4_4", "D2_+1", "D2_+2", "D2_x", "D4_+1", "D4_+2", "D4_+4", "D4_x1", "D4_x4", "D8_1", "D8_4"]:
+ if symmstring not in ["AB_256x256_Test", "1x256", "2x128", "4x64", "8x32", "C1", "C2_1", "C2_2", "C2_4", "C4_1", "C4_4", "D2_+1", "D2_+2", "D2_x", "D4_+1", "D4_+2", "D4_+4", "D4_x1", "D4_x4", "D8_1", "D8_4"]:
g.exit(symmstring+" is not a valid symmetry option")
soup = Soup()
@@ -13343,6 +13383,7 @@
g.new("Symmetry test")
symmetries = [["32x32", "C1", "8x32", "4x64", "2x128", "1x256"],
+ ["AB_256x256_Test"],
["C2_1", "C2_2", "C2_4"],
["C4_1", "C4_4"],
["D2_+1", "D2_+2", "D2_x"],
```