Wave function collapse: Difference between revisions
Content added Content deleted
m (→{{header|J}}) |
(→{{header|J}}: use local names for intermediate results in wfc) |
||
Line 10: | Line 10: | ||
wfc=: {{ |
wfc=: {{ |
||
M=. #.,"2 tiles |
M=. #.,"2 tiles |
||
opts= |
opts=. (<each, <@<)M |
||
adj= |
adj=. y#.y|"1(y#:,i.y)+"1/0,<:3 3#:1 3 5 7 |
||
horz= |
horz=. ({."1 -:"1/ {:"1) m |
||
vert= |
vert=. ({."2 -:"1/ {:"2) m |
||
id= |
id=. <@I.(=i.#tiles),1 NB. identity constraint |
||
north= |
north=. <@I.vert,1 NB. adj 1 constraint |
||
south= |
south=. <@I.(|:vert),1 NB. adj 7 constraint |
||
west= |
west=. <@I.horz,1 NB. adj 3 constrint |
||
east= |
east=. <@I.(|:horz),1 NB. adj 5 constraint |
||
allow= |
allow=. id,north,west,east,:south |
||
i= |
i=. (?#m) (?#i)} i=. ,y$_1 |
||
while. #todo= |
while. #todo=. I._1=i do. |
||
wave= |
wave=. ([-.-.)L:0/"1 (adj{i){"0 1"1 2 allow |
||
entropy= |
entropy=. #@>wave |
||
min=. <./ E= |
min=. <./ E=. todo{entropy |
||
if. 0=min do. EMPTY return. end. |
if. 0=min do. EMPTY return. end. |
||
ndx= |
ndx=. todo{~({~ ?@#) I.min=E |
||
i= |
i=. (({~?@#)ndx{::wave) ndx} i |
||
end. |
end. |
||
,/"2,/0 2 1 3|:(y$i){m |
,/"2,/0 2 1 3|:(y$i){m |