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 |
Revision as of 10:02, 10 July 2022
Wave function collapse is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Write the solution for Wave Function Collapse based on the Coding Challenge 171: Wave Function Collapse and create new map 8x8 tiles with fourth T-blocks with variously directions (┤ ┴ ┬ ├) or blank tiles (space).
- Reference WFC explained and another WFC explained
J
Implementation:<lang J>tiles=: 0,(|.@|:)^:(i.4)0,1 1 1,:0 1 0 wfc=: Template:M=.</lang>
Task example (the initial tiles and two runs of wave function collapse (two, to illustrate randomness):<lang J> (<"2) 1j1#"1 ' #'{~ tiles ┌──────┬──────┬──────┬──────┬──────┐ │ │ │ # │ # │ # │ │ │# # # │ # # │# # # │# # │ │ │ # │ # │ │ # │ └──────┴──────┴──────┴──────┴──────┘
1j1#"1 ' #'{~ tiles wfc 8 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
- # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
- # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # #
- # # # # # # # # # # # # # #
# # # # # # # # # # #
- # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # #
- # # # # # # # # # # # # # # # #
# # # # # # # # # # #
- # # # # # # # # # # # # # # # # #
# # # # # # #
1j1#"1 ' #'{~ tiles wfc 8 8 # # # #
- # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
- # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
- # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
- # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # </lang>