Skip to content

Instantly share code, notes, and snippets.

@kusano
Last active September 22, 2025 09:44
Show Gist options
  • Select an option

  • Save kusano/2c2e7f075a7f55c126b96e89b7759be2 to your computer and use it in GitHub Desktop.

Select an option

Save kusano/2c2e7f075a7f55c126b96e89b7759be2 to your computer and use it in GitHub Desktop.
メガミンクスの画像生成
from PIL import Image, ImageDraw
import math
def render(name, F):
size = 4096
im = Image.new("RGB", (size, size), (255, 255, 255))
draw = ImageDraw.Draw(im)
def trans(x, y, z):
t = math.pi*0.05
x, y, z = (
x*math.cos(t)+y*math.sin(t),
-x*math.sin(t)+y*math.cos(t),
z,
)
t = math.pi*0.2
x, y, z = (
x*math.cos(t)+z*math.sin(t),
y,
-x*math.sin(t)+z*math.cos(t),
)
t = 0.1
x, y = (
y*(1+x*t),
-z*(1+x*t),
)
t = 1200
x, y = (
size/2+x*t,
size/2+y*t,
)
return x, y
# https://www.jstage.jst.go.jp/article/jsgs1967/18/2/18_2_15/_pdf/-char/ja
L = 1. # 5角形の1辺。
d54 = 54./180.*math.pi
L1 = (1.+math.sin(d54))/(2*math.cos(d54))*L
R = L/(2*math.cos(d54))
a = math.acos(math.sin(d54)/(1+math.sin(d54)))
R1 = R*math.sin(d54)+L1*math.cos(a)
H1 = L1*math.sin(a)
H2 = (R1-R)*math.sin(d54)*math.tan(a)
H = (H1+H2)/2
V = [
(-R*math.cos(0.0*math.pi), R*math.sin(0.0*math.pi), H), # 0
(-R*math.cos(0.4*math.pi), R*math.sin(0.4*math.pi), H),
(-R*math.cos(0.8*math.pi), R*math.sin(0.8*math.pi), H),
(-R*math.cos(1.2*math.pi), R*math.sin(1.2*math.pi), H),
(-R*math.cos(1.6*math.pi), R*math.sin(1.6*math.pi), H),
(-R1*math.cos(0.0*math.pi), R1*math.sin(0.0*math.pi), H-H2), # 5
(-R1*math.cos(0.4*math.pi), R1*math.sin(0.4*math.pi), H-H2),
(-R1*math.cos(0.8*math.pi), R1*math.sin(0.8*math.pi), H-H2),
(-R1*math.cos(1.2*math.pi), R1*math.sin(1.2*math.pi), H-H2),
(-R1*math.cos(1.6*math.pi), R1*math.sin(1.6*math.pi), H-H2),
(-R1*math.cos(0.2*math.pi), R1*math.sin(0.2*math.pi), -H+H2), # 10
(-R1*math.cos(0.6*math.pi), R1*math.sin(0.6*math.pi), -H+H2),
(-R1*math.cos(1.0*math.pi), R1*math.sin(1.0*math.pi), -H+H2),
(-R1*math.cos(1.4*math.pi), R1*math.sin(1.4*math.pi), -H+H2),
(-R1*math.cos(1.8*math.pi), R1*math.sin(1.8*math.pi), -H+H2),
(-R*math.cos(0.2*math.pi), R*math.sin(0.2*math.pi), -H), # 10
(-R*math.cos(0.6*math.pi), R*math.sin(0.6*math.pi), -H),
(-R*math.cos(1.0*math.pi), R*math.sin(1.0*math.pi), -H),
(-R*math.cos(1.4*math.pi), R*math.sin(1.4*math.pi), -H),
(-R*math.cos(1.8*math.pi), R*math.sin(1.8*math.pi), -H),
]
S = [
( 0, 1, 2, 3, 4),
( 1, 0, 5, 10, 6),
( 2, 1, 6, 11, 7),
( 3, 2, 7, 12, 8),
( 4, 3, 8, 13, 9),
( 0, 4, 9, 14, 5),
(17, 16, 15, 19, 18),
(16, 17, 12, 7, 11),
(15, 16, 11, 6, 10),
(19, 15, 10, 5, 14),
(18, 19, 14, 9, 13),
(17, 18, 13, 8, 12),
]
C = {
"W": "#ffffff",
"R": "#f80808",
"G": "#088008",
"P": "#800880",
"Y": "#ffff00",
"B": "#0808f8",
"w": "#c0c0c0",
"r": "#f88008",
"g": "#80f880",
"p": "#f88080",
"y": "#ffffc0",
"b": "#80c0f8",
" ": "#404040",
}
for si in [0, 2, 3, 4, 7, 11]:
s = S[si]
VF = [V[p] for p in s]
for i in range(5):
VF += [
(
VF[i][0]*0.6+VF[(i+1)%5][0]*0.4,
VF[i][1]*0.6+VF[(i+1)%5][1]*0.4,
VF[i][2]*0.6+VF[(i+1)%5][2]*0.4,
), (
VF[i][0]*0.4+VF[(i+1)%5][0]*0.6,
VF[i][1]*0.4+VF[(i+1)%5][1]*0.6,
VF[i][2]*0.4+VF[(i+1)%5][2]*0.6,
)
]
for i in range(5):
VF += [
(
VF[i*2+5][0]+VF[(i*2+9)%10+5][0]-VF[i][0],
VF[i*2+5][1]+VF[(i*2+9)%10+5][1]-VF[i][1],
VF[i*2+5][2]+VF[(i*2+9)%10+5][2]-VF[i][2],
)
]
for i, p in enumerate([
[15, 16, 17, 18, 19],
[ 0, 5, 15, 14],
[ 5, 6, 16, 15],
[ 1, 7, 16, 6],
[ 7, 8, 17, 16],
[ 2, 9, 17, 8],
[ 9, 10, 18, 17],
[ 3, 11, 18, 10],
[11, 12, 19, 18],
[ 4, 13, 19, 12],
[13, 14, 15, 19],
]):
draw.polygon([trans(*VF[x]) for x in p], C[F[si*11+i]], "black", 5)
draw.polygon([trans(*V[x]) for x in s], None, "black", 15)
im = im.resize((1024, 1024), Image.Resampling.BICUBIC)
im.save(name)
def renderLL(name, F, center=False):
size = 4096
im = Image.new("RGB", (size, size), (255, 255, 255))
draw = ImageDraw.Draw(im)
def trans(x, y, z):
if center:
t = 1600
x, y = (
size/2+y*t,
size/2+x*t,
)
else:
t = 1800
x, y = (
size/2+y*t,
size/2+x*t+200,
)
return x, y
# https://www.jstage.jst.go.jp/article/jsgs1967/18/2/18_2_15/_pdf/-char/ja
L = 1. # 5角形の1辺。
d54 = 54./180.*math.pi
L1 = (1.+math.sin(d54))/(2*math.cos(d54))*L
R = L/(2*math.cos(d54))
a = math.acos(math.sin(d54)/(1+math.sin(d54)))
R1 = R*math.sin(d54)+L1*math.cos(a)
H1 = L1*math.sin(a)
H2 = (R1-R)*math.sin(d54)*math.tan(a)
H = (H1+H2)/2
V = [
(-R*math.cos(0.0*math.pi), R*math.sin(0.0*math.pi), H), # 0
(-R*math.cos(0.4*math.pi), R*math.sin(0.4*math.pi), H),
(-R*math.cos(0.8*math.pi), R*math.sin(0.8*math.pi), H),
(-R*math.cos(1.2*math.pi), R*math.sin(1.2*math.pi), H),
(-R*math.cos(1.6*math.pi), R*math.sin(1.6*math.pi), H),
(-R1*math.cos(0.0*math.pi), R1*math.sin(0.0*math.pi), H-H2), # 5
(-R1*math.cos(0.4*math.pi), R1*math.sin(0.4*math.pi), H-H2),
(-R1*math.cos(0.8*math.pi), R1*math.sin(0.8*math.pi), H-H2),
(-R1*math.cos(1.2*math.pi), R1*math.sin(1.2*math.pi), H-H2),
(-R1*math.cos(1.6*math.pi), R1*math.sin(1.6*math.pi), H-H2),
(-R1*math.cos(0.2*math.pi), R1*math.sin(0.2*math.pi), -H+H2), # 10
(-R1*math.cos(0.6*math.pi), R1*math.sin(0.6*math.pi), -H+H2),
(-R1*math.cos(1.0*math.pi), R1*math.sin(1.0*math.pi), -H+H2),
(-R1*math.cos(1.4*math.pi), R1*math.sin(1.4*math.pi), -H+H2),
(-R1*math.cos(1.8*math.pi), R1*math.sin(1.8*math.pi), -H+H2),
(-R*math.cos(0.2*math.pi), R*math.sin(0.2*math.pi), -H), # 10
(-R*math.cos(0.6*math.pi), R*math.sin(0.6*math.pi), -H),
(-R*math.cos(1.0*math.pi), R*math.sin(1.0*math.pi), -H),
(-R*math.cos(1.4*math.pi), R*math.sin(1.4*math.pi), -H),
(-R*math.cos(1.8*math.pi), R*math.sin(1.8*math.pi), -H),
]
S = [
( 0, 1, 2, 3, 4),
( 1, 0, 5, 10, 6),
( 2, 1, 6, 11, 7),
( 3, 2, 7, 12, 8),
( 4, 3, 8, 13, 9),
( 0, 4, 9, 14, 5),
(17, 16, 15, 19, 18),
(16, 17, 12, 7, 11),
(15, 16, 11, 6, 10),
(19, 15, 10, 5, 14),
(18, 19, 14, 9, 13),
(17, 18, 13, 8, 12),
]
C = {
"W": "#ffffff",
"R": "#f80808",
"G": "#088008",
"P": "#800880",
"Y": "#ffff00",
"B": "#0808f8",
"w": "#c0c0c0",
"r": "#f88008",
"g": "#80f880",
"p": "#f88080",
"y": "#ffffc0",
"b": "#80c0f8",
" ": "#404040",
}
for si in [0, 1, 2, 3, 4, 5]:
s = S[si]
VF = [V[p] for p in s]
for i in range(5):
VF += [
(
VF[i][0]*0.6+VF[(i+1)%5][0]*0.4,
VF[i][1]*0.6+VF[(i+1)%5][1]*0.4,
VF[i][2]*0.6+VF[(i+1)%5][2]*0.4,
), (
VF[i][0]*0.4+VF[(i+1)%5][0]*0.6,
VF[i][1]*0.4+VF[(i+1)%5][1]*0.6,
VF[i][2]*0.4+VF[(i+1)%5][2]*0.6,
)
]
for i in range(5):
VF += [
(
VF[i*2+5][0]+VF[(i*2+9)%10+5][0]-VF[i][0],
VF[i*2+5][1]+VF[(i*2+9)%10+5][1]-VF[i][1],
VF[i*2+5][2]+VF[(i*2+9)%10+5][2]-VF[i][2],
)
]
for i, p in enumerate([
[15, 16, 17, 18, 19],
[ 0, 5, 15, 14],
[ 5, 6, 16, 15],
[ 1, 7, 16, 6],
[ 7, 8, 17, 16],
[ 2, 9, 17, 8],
[ 9, 10, 18, 17],
[ 3, 11, 18, 10],
[11, 12, 19, 18],
[ 4, 13, 19, 12],
[13, 14, 15, 19],
]):
if si==0 or i in ((0, 1, 2, 3) if center else (1, 2, 3)):
draw.polygon([trans(*VF[x]) for x in p], C[F[si*11+i]], "black", 8)
if si==0:
draw.polygon([trans(*V[x]) for x in s], None, "black", 24)
im = im.resize((1024, 1024), Image.Resampling.BICUBIC)
im.save(name)
render("sample.png",
"WBRPYwypgrb"+
"BBBBBBBBBBB"+
"RRRRRRRRRRR"+
"GGGGGGGGGGG"+
"PPPPPPPPPPP"+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
renderLL("sample_ll.png",
"WBRPYwypgrb"+
"BBBBBBBBBBB"+
"RRRRRRRRRRR"+
"GGGGGGGGGGG"+
"PPPPPPPPPPP"+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
render("megaminx.png",
"WWWWWWWWWWW"+
"BBBBBBBBBBB"+
"RRRRRRRRRRR"+
"GGGGGGGGGGG"+
"PPPPPPPPPPP"+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
render("scramble_r.png",
"pppppppwwwp"+
"BBBBBBBBBBB"+
"ppppppppppp"+
"pwpppppppWW"+
"WwwwWWWWWWW"+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"ppppppppppp"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"pppppWWWppp")
render("scramble_d.png",
"WWWWWWWwwwW"+
"BBBBBBBBBBB"+
"pWWWppppppp"+
"pwWWppppppp"+
"pwwwppppppp"+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"ppppppppppp"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"ppppppppppp")
render("scramble_u.png",
"ppppppppppp"+
"BBBBBBBBBBB"+
"WpppWWWWWWW"+
"WpppWWWWWWW"+
"WpppWWWWWWW"+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"WWWWWWWWWWW"+
"WWWWWWWWWWW"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"WWWWWWWWWWW")
render("scramble_example.png",
"BrrWYPgpbPP"+
"BBBBBBBBBBB"+
"WWWBrBrPyPR"+
"YwpGGrRRyyB"+
"gYPyYbWpbgw"+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"PBgBgGBbbYY"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"rWygGyRwpWY")
render("star.png",
"B B "+
"BBBBBBBBBBB"+
"R R"+
"W W W W W W"+
"Y Y "+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"G G "+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"P P ")
render("f2l.png",
"B BBBBB "+
"BBBBBBBBBBB"+
"RRR RRR"+
"WWWWWWWWWWW"+
"Y YYYYY "+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"G GGGGG "+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"P PPPPP")
render("f2l_i.png",
" BB "+
"BBBBBBBBBBB"+
"R RRRRR "+
"BRR BBB "+
" W "+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"WWWWWWW WWW"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"YYY YYY")
render("f2l_center.png",
" W B"+
"BBBBBBBBBBB"+
"RB RRRRR "+
"B R BBB "+
" "+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"WWWWWWW WWW"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"YYY YYY")
render("s2l.png",
" "+
"y yyyyyyy"+
"p ppppppp"+
"g ggggggg"+
"r rrrrrrr"+
"b bbbbbbb"+
"wwwwwwwwwww"+
"BBBBBBBBBBB"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"YYYYYYYYYYY")
render("s2l.png",
" "+
"B BBBBBBB"+
"R RRRRRRR"+
"G GGGGGGG"+
"P PPPPPPP"+
"Y YYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
render("s2l_1.png",
"w "+
"BBBBBBBBBBB"+
"b bbbbb"+
"y yyyyy "+
"p "+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"GGGGGGGGGGG"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"RRRRR RRR")
render("s2l_2.png",
"w "+
"BBBBBBBBBBB"+
"g ggggg"+
"r rrrrrrr"+
"b bbbbbbb"+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"YYYYYYYYYYY"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"PPPPPPPPPPP")
render("s2l_3.png",
"w "+
"BBBBBBBBBBB"+
"y yyyyyyy"+
"p ppppppp"+
"g ggggggg"+
"YYYYYYYYYYY"+
"wwwwwwwwwww"+
"RRRRRRRRRRR"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"BBBBBBBBBBB")
render("eoll.png",
"w w w w w w"+
"y yyyyyyy"+
"p ppppppp"+
"g ggggggg"+
"r rrrrrrr"+
"b bbbbbbb"+
"wwwwwwwwwww"+
"BBBBBBBBBBB"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"YYYYYYYYYYY")
renderLL("eoll_1.png",
"w w w w"+
"B w BBBBBBB"+
"R RRRRRRR"+
"G w GGGGGGG"+
"P PPPPPPP"+
"Y YYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
renderLL("eoll_2.png",
"w w w w"+
"B BBBBBBB"+
"R w RRRRRRR"+
"G w GGGGGGG"+
"P PPPPPPP"+
"Y YYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
renderLL("eoll_3.png",
"w w"+
"B w BBBBBBB"+
"R w RRRRRRR"+
"G w GGGGGGG"+
"P w PPPPPPP"+
"Y YYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
renderLL("eoll_4.png",
"w w "+
"B w BBBBBBB"+
"R w RRRRRRR"+
"G w GGGGGGG"+
"P PPPPPPP"+
"Y w YYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
render("coll.png",
"wwwwwwwwwww"+
"y yyyyyyy"+
"p ppppppp"+
"g ggggggg"+
"r rrrrrrr"+
"b bbbbbbb"+
"wwwwwwwwwww"+
"BBBBBBBBBBB"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"YYYYYYYYYYY")
renderLL("coll_1.png",
"w w w w w w"+
"B wBBBBBBB"+
"R wRRRRRRR"+
"G wGGGGGGG"+
"P PPPPPPP"+
"Y YYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
renderLL("coll_2.png",
"w w w w w w"+
"Bw BBBBBBB"+
"Rw RRRRRRR"+
"Gw GGGGGGG"+
"P PPPPPPP"+
"Y YYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
renderLL("coll_3.png",
"w w w w w w"+
"B BBBBBBB"+
"Rw RRRRRRR"+
"G GGGGGGG"+
"Pw PPPPPPP"+
"Yw YYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
renderLL("coll_4.png",
"w w w w w w"+
"B BBBBBBB"+
"R wRRRRRRR"+
"G GGGGGGG"+
"P wPPPPPPP"+
"Y wYYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
renderLL("coll_5.png",
"w w w w w w"+
"B BBBBBBB"+
"R wRRRRRRR"+
"G wGGGGGGG"+
"P wPPPPPPP"+
"Yw wYYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
renderLL("coll_6.png",
"w w w w w w"+
"Bw wBBBBBBB"+
"Rw RRRRRRR"+
"Gw GGGGGGG"+
"Pw PPPPPPP"+
"Y YYYYYYY"+
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb")
render("epll.png",
"wwwwwwwwwww"+
"y y yyyyyyy"+
"p p ppppppp"+
"g g ggggggg"+
"r r rrrrrrr"+
"b b bbbbbbb"+
"wwwwwwwwwww"+
"BBBBBBBBBBB"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"YYYYYYYYYYY")
renderLL("epll_1.png",
"wwwwwwwwwww"+
"y p yyyyyyy"+
"p b ppppppp"+
"g g ggggggg"+
"r r rrrrrrr"+
"b y bbbbbbb"+
"wwwwwwwwwww"+
"BBBBBBBBBBB"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"YYYYYYYYYYY",
True)
renderLL("epll_2.png",
"wwwwwwwwwww"+
"y y yyyyyyy"+
"p r ppppppp"+
"g p ggggggg"+
"r g rrrrrrr"+
"b b bbbbbbb"+
"wwwwwwwwwww"+
"BBBBBBBBBBB"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"YYYYYYYYYYY",
True)
renderLL("epll_3.png",
"wwwwwwwwwww"+
"y y yyyyyyy"+
"p r ppppppp"+
"g g ggggggg"+
"r b rrrrrrr"+
"b p bbbbbbb"+
"wwwwwwwwwww"+
"BBBBBBBBBBB"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"YYYYYYYYYYY",
True)
renderLL("epll_4.png",
"wwwwwwwwwww"+
"y p yyyyyyy"+
"p r ppppppp"+
"g y ggggggg"+
"r g rrrrrrr"+
"b b bbbbbbb"+
"wwwwwwwwwww"+
"BBBBBBBBBBB"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"YYYYYYYYYYY",
True)
renderLL("epll_5.png",
"wwwwwwwwwww"+
"y y yyyyyyy"+
"p b ppppppp"+
"g r ggggggg"+
"r g rrrrrrr"+
"b p bbbbbbb"+
"wwwwwwwwwww"+
"BBBBBBBBBBB"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"YYYYYYYYYYY",
True)
render("cpll.png",
"wwwwwwwwwww"+
"yyyyyyyyyyy"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"bbbbbbbbbbb"+
"wwwwwwwwwww"+
"BBBBBBBBBBB"+
"ppppppppppp"+
"ggggggggggg"+
"rrrrrrrrrrr"+
"YYYYYYYYYYY")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment