# Possible solution to Just's puzzle?

• ``````# a possible solution to Just's puzzle?
size(1000,1000)
fill(0)
dia = 864
rect(0,0,width(),height())
for d in range(1, dia):
d = dia-d
fill((dia-d)/dia)
oval(350-.5*d, 750-.5*d, d, d)
oval(650-.5*d, 250-.5*d, d, d)
``````

• @erik Very close. Ready for spoilers?

• Something like that ?

``````fill(math.sqrt((dia-d)/dia))
`````` • @jeremiehornus Oh, that looks lovely! But no, what I did was way stupider in some way...

• A silly question but do we see the circles as bubbles melting together simply because they are put on the canvas alternately?

I guess you could also use the "Lighten" blending mode and just fill the circles with gradients.

• @justvanrossum building on @erik solution: ``````import random, math, noise

w = 500
h = 500

dia = 100
rows = 5
cols = 5
ovals = []

frames = 30

for x in range(1, rows):
for y in range(1, cols):
ovals.append((x*(w/rows), y*h/cols, 1+.5*random.random()))

for f in range(frames):
newPage(w, h)
frameDuration(1/20)
fill(0)
rect(0,0,width(),height())
n = f/frames
for d in range(1, dia):
d = dia-d
fill(.9*math.sqrt((dia-d)/dia))

for i, (x, y, g) in enumerate(ovals):
m = noise.pnoise3(.1*x/w, .1*y/h, i+ .5*math.sin(2*math.pi*(f/frames)))
oval(20*m + x-.5*d*g*(1+m), 20*m +  y-.5*d*g*(1+m), d*g*(1+m), d*g*(1+m))

saveImage("Just2.mp4")
``````

• How about a `radialGradient()`?  ``````size(1000, 1000)
fill(0)
dia = 864
offset = 120
rect(0, 0, width(), height())
for d in range(1, dia, 5):
d = dia-d
(350-offset, 750+offset), [(1,), (0,)],
oval(350-.5*d, 750-.5*d, d, d)
(650-offset, 250+offset), [(1,), (0,)],
oval(650-.5*d, 250-.5*d, d, d)
``````

• But I must say I really love the foggy effect of @JeremieHornus's solution.

• An example with `blendMode("lighten")` and `radialGradient()` building on @justvanrossum example. ``````size(1000, 1000)
fill(0)
dia = 864
offset = 120
rect(0, 0, width(), height())
d = 1200

blendMode("lighten")