Re: Suggested LifeWiki edits
Posted: February 11th, 2022, 5:26 pm
Sorry, they do change ranks, especially those with very low freqs.hotdogPi wrote: February 11th, 2022, 5:21 pm Common objects don't change ranks. They're still accurate.
Forums for Conway's Game of Life
https://conwaylife.com/forums/
Sorry, they do change ranks, especially those with very low freqs.hotdogPi wrote: February 11th, 2022, 5:21 pm Common objects don't change ranks. They're still accurate.
I didn't want to break any existing links, so for now I've created the new page at p4-assisted period-28 glider gun.hotdogPi wrote: February 14th, 2022, 9:25 am Should "period-28 glider gun" be moved to "p7-assisted period-28 glider gun" to make room for the new tiny one?
This page is not currently in the Category:Guns that you can access on the main page of LifeWiki. Similarly, 32P21 is not in Category:Oscillators (but the slightly older 44P38 is).Ian07 wrote: February 14th, 2022, 12:35 pm I didn't want to break any existing links, so for now I've created the new page at p4-assisted period-28 glider gun.
That was an admittedly arbitrary suggestion of mine when setting up the LifeViewer in the template, so feel free to provide your suggestions.muzik wrote: February 15th, 2022, 6:12 am Why does the wiki use the Fire theme for outer-totalistic rules with larger ranges?
Recently it was starting to seem to me that we were collectively coming up with a workable solution for this. Guns are rare only if we ignore variable-period guns based on signal loops, but current LifeWiki gun articles are based on ignoring those.Sokwe wrote: February 15th, 2022, 2:51 am Guns are rare enough that I think it would be reasonable to include all of the known guns of a particular period on a single page. The biggest issue is that the info box only accounts for a single pattern, so it can't show both the smallest and the first when they're different. I haven't been able to think of a satisfying solution to this issue.
The only problem I have with this is that the discovery information in the infobox will necessarily contain the discoverer and discovery year of the smallest gun, while I think the infobox should show the discoverer and discovery year of the first gun.dvgrn wrote: February 15th, 2022, 9:34 amDoes that make sense as a plan for dealing with things like the new single-engine p30?
- The article's infobox should always show the current smallest gun by bounding box size.
- Other notable guns of that period (first, significant simplification, new mechanism, edge shooter, etc.) can be placed in a gallery section with captions giving attribution and any other relevant details.
1. The period-30 glider gun page (and 46) is a generic page and does not have an infobox, unlike all other periods.Sokwe wrote: February 15th, 2022, 9:41 amThe only problem I have with this is that the discovery information in the infobox will necessarily contain the discoverer and discovery year of the smallest gun, while I think the infobox should show the discoverer and discovery year of the first gun.dvgrn wrote: February 15th, 2022, 9:34 amDoes that make sense as a plan for dealing with things like the new single-engine p30?
- The article's infobox should always show the current smallest gun by bounding box size.
- Other notable guns of that period (first, significant simplification, new mechanism, edge shooter, etc.) can be placed in a gallery section with captions giving attribution and any other relevant details.
I'm definitely just making this up as I go along, but it does seem like we're on the track of an understandable standard here.hotdogPi wrote: February 15th, 2022, 9:46 am 1. The period-30 glider gun page (and 46) is a generic page and does not have an infobox, unlike all other periods.
2. How would p117 be handled, where the first-discovered one isn't notable?
Now moved to Template:GliderNavbox - let us discuss about it in the talk page!GUYTU6J wrote: February 8th, 2022, 1:10 pm Also, what do you think about the three drafts in my user page? A recent complaint inspired me to make a navbox for glider-accepting devices, and I have since included many sorted links in my sketch.
My main issue is that I would prefer the discoverers and discovery year in the infobox to be the discoverers and discovery year of the first known gun, but I would prefer the displayed pattern to be the smallest known gun. Perhaps the infobox could include separate sections for the discovery information of the smallest gun and the first gun.dvgrn wrote: February 15th, 2022, 2:22 pm To address the case that Sokwe is interested in, where a "classic" gun and a "modern" gun are competing for the same generic name, I still think it makes sense to standardize on putting the current smallest gun in the infobox
I can kind of see why that would be nice, but then again, I'd be happy with first-known-gun discoverers and discovery year in the caption for the first known gun pattern, in the Gallery section where (in my mind) it "belongs". I don't even want that information split off into the infobox, since it's irrelevant to the pattern that's on display there, and that seems on balance more confusing than useful.Sokwe wrote: February 18th, 2022, 7:36 am My main issue is that I would prefer the discoverers and discovery year in the infobox to be the discoverers and discovery year of the first known gun, but I would prefer the displayed pattern to be the smallest known gun. Perhaps the infobox could include separate sections for the discovery information of the smallest gun and the first gun.
Code: Select all
f = open('apgcodesymmetry.txt', 'rt', encoding='utf-8')
f1 = f.read()
f1 = f1.replace('\n',',')
f1 = '[' + f1 + ']'
#print(f1[-200:])
f1 = eval(f1)
f2 = f1[1::2]
f1 = f1[::2]
f3 = list(set(f1))
types = {}
for i in f3:
try:
underscore = i.find('_')
except IndexError:
continue
before_underscore = i[:underscore]
if before_underscore not in types:
types[before_underscore] = 1
else:
types[before_underscore] += 1
#print(types)
nums = {}
for i in range(len(f1)):
if 'x' in f1[i] or 'y' in f1[i]:
continue
if '_' not in f1[i]:
continue
if f1[i] not in nums:
nums[f1[i]] = int(f2[i])
else:
nums[f1[i]] += int(f2[i])
def sep(number):
number_str = str(number)
modulo = len(number_str) % 3
if modulo == 0:
modulo = 3
to_return = number_str[:modulo]
for i in range(modulo,len(number_str)-1,3):
to_return += '{{{sep|,}}}' + number_str[i:i+3]
return to_return
#print(nums)
to_print = '| higher = {{#switch: {{{1|}}}\n'
to_print += ' | date = [fill in]\n'
to_print += ' | numsoups = 6{{{sep|,}}}566{{{sep|,}}}371{{{sep|,}}}313{{{sep|,}}}706\n'
to_print += ' | numobjects = %s\n' % sep(sum((int(i) if i[0] in '123456789' else 0) for i in f2))
to_print += ' | distinctobjects = %s\n' % sep(sum(types.values()))
for i in range(1000):
if 'xs' + str(i) in types:
to_print += ' | xs%s = %s\n' % (str(i), sep(types['xs'+str(i)]))
for i in range(1000):
if 'xp' + str(i) in types:
to_print += ' | xp%s = %s\n' % (str(i), sep(types['xp'+str(i)]))
for i in range(1000):
if 'xq' + str(i) in types:
to_print += ' | xq%s = %s\n' % (str(i), sep(types['xq'+str(i)]))
for i in range(1000):
if 'methuselah_' + str(i) + 'k' in nums:
to_print += ' | methuselah_%sk = %s\n' % (str(i), sep(nums['methuselah_'+str(i)+'k']))
for i in range(1000):
if 'messless_' + str(i) + 'h' in nums:
to_print += ' | messless_%sh = %s\n' % (str(i), sep(nums['messless_'+str(i)+'h']))
for i in range(1000):
if 'megasized_' + str(i) + 'h' in nums:
to_print += ' | megasized_%sh = %s\n' % (str(i), sep(nums['megasized_'+str(i)+'h']))
to_print += ' | yl = %s\n' % sum((types[i] if i[0] == 'y' else 0) for i in types)
to_print += ' | \'\'\'Unknown query: {{{1|}}}\'\'\'\n}} '
print(to_print)
Web page access in Python is very easy. Here's some sample code -- Python 3, runs in Golly -- to find the current 6700-6799 methuselah count in C1.hotdogPi wrote: February 21st, 2022, 12:51 pm What we need, though, is a way to read the textcensus files for various symmetries, and I don't know how to read from a webpage.
Code: Select all
import golly as g
import urllib.request
g.show("Retrieving C1 textcensus -- please wait a moment...")
url = "https://catagolue.hatsya.com/textcensus/b3s23/C1"
response = urllib.request.urlopen(url)
html = response.read().decode()
g.show("Done.")
data = html.split("\n")
for item in data:
if item.find("megasized_67h")!=-1:
g.note(item)Code: Select all
import urllib.request
symmetries = ['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','D2_+1_gO1s0',
'D2_+1_gO1s1','D2_+1_gO1s2','H2_+1','H2_+2','H4_+1','H4_+2','H4_+4']
mode = 0 #0 asymmetric, 1 symmetric
if mode == 0:
symmetries = ['C1','G1']
f1 = []
for symmetry in symmetries:
url = "https://catagolue.hatsya.com/textcensus/b3s23/%s" % symmetry
response = urllib.request.urlopen(url)
html = response.read().decode()
html = html.replace('\n',',')
html = '[' + html + ']'
#print(html[-200:])
html = eval(html)
f1 += html
f2 = f1[1::2]
f1 = f1[::2]
f3 = list(set(f1))
types = {}
for i in f3:
try:
underscore = i.find('_')
except IndexError:
continue
before_underscore = i[:underscore]
if before_underscore not in types:
types[before_underscore] = 1
else:
types[before_underscore] += 1
#print(types)
nums = {}
for i in range(len(f1)):
if 'x' in f1[i] or 'y' in f1[i]:
continue
if '_' not in f1[i]:
continue
if f1[i] not in nums:
nums[f1[i]] = int(f2[i])
else:
nums[f1[i]] += int(f2[i])
def sep(number):
number_str = str(number)
modulo = len(number_str) % 3
if modulo == 0:
modulo = 3
to_return = number_str[:modulo]
for i in range(modulo,len(number_str)-1,3):
to_return += '{{{sep|,}}}' + number_str[i:i+3]
return to_return
#print(nums)
to_print = '| higher = {{#switch: {{{1|}}}\n'
to_print += ' | date = [fill in]\n'
to_print += ' | numsoups = 6{{{sep|,}}}566{{{sep|,}}}371{{{sep|,}}}313{{{sep|,}}}706\n'
to_print += ' | numobjects = %s\n' % sep(sum((int(i) if i[0] in '123456789' else 0) for i in f2))
to_print += ' | distinctobjects = %s\n' % sep(sum(types.values()))
for i in range(1000):
if 'xs' + str(i) in types:
to_print += ' | xs%s = %s\n' % (str(i), sep(types['xs'+str(i)]))
for i in range(1000):
if 'xp' + str(i) in types:
to_print += ' | xp%s = %s\n' % (str(i), sep(types['xp'+str(i)]))
for i in range(1000):
if 'xq' + str(i) in types:
to_print += ' | xq%s = %s\n' % (str(i), sep(types['xq'+str(i)]))
for i in range(1000):
if 'methuselah_' + str(i) + 'k' in nums:
to_print += ' | methuselah_%sk = %s\n' % (str(i), sep(nums['methuselah_'+str(i)+'k']))
for i in range(1000):
if 'messless_' + str(i) + 'h' in nums:
to_print += ' | messless_%sh = %s\n' % (str(i), sep(nums['messless_'+str(i)+'h']))
for i in range(1000):
if 'megasized_' + str(i) + 'h' in nums:
to_print += ' | megasized_%sh = %s\n' % (str(i), sep(nums['megasized_'+str(i)+'h']))
to_print += ' | yl = %s\n' % sum((types[i] if i[0] == 'y' else 0) for i in types)
to_print += ' | \'\'\'Unknown query: {{{1|}}}\'\'\'\n}} '
print(to_print)
Code: Select all
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 1342, in do_open
h.request(req.get_method(), req.selector, req.data, headers,
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1255, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1301, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1250, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1010, in _send_output
self.send(msg)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 950, in send
self.connect()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1424, in connect
self.sock = self._context.wrap_socket(self.sock,
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 500, in wrap_socket
return self.sslsocket_class._create(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 1040, in _create
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 1309, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1122)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/davidraucci/apgcodesymmetry.py", line 11, in <module>
response = urllib.request.urlopen(url)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 214, in urlopen
return opener.open(url, data, timeout)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 517, in open
response = self._open(req, data)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 534, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 494, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 1385, in https_open
return self.do_open(http.client.HTTPSConnection, req,
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 1345, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1122)>I don’t really agreeBook wrote: February 26th, 2022, 5:11 pm
Now, the suggestion. I want to remove the "approx relative freq" column. That data was not audited but spot checking showed, as expected, it has changed. I believe FC is a far better metric.
Done by yujh.Chris857 wrote: February 28th, 2022, 11:00 am https://conwaylife.com/wiki/77P6H1V1 says "77P6H1V1 is a c/6 diagonal spaceship discovered by Josh Ball on March 25, 2011,[1] being the only known spaceship of this speed not based on seal."
However, viewtopic.php?t=&p=130622#p130622 shows some c/6 diagonal ships which are neither Seal nor 77P6H1V1. Should it maybe be "being the first spaceship of this speed not based on seal."?
I made a different change to that column along those lines.