WITH RECURSIVE T AS ( SELECT 0 x , 0 y , '{"{0,0}"}'::text[] c -- , 0 i UNION ALL ( WITH Z AS ( SELECT dn.x , dn.y , Tc , Ti FROM T -- , LATERAL( SELECT ((random() * 2 - 1) * 100)::integer x , ((random() * 2 - 1) * 100)::integer y ) p -- , LATERAL( SELECT * FROM ( SELECT (unnest::text[])[1]::integer x , (unnest::text[])[2]::integer y FROM unnest(Tc::text[]) ) T ORDER BY sqrt((x - px) ^ 2 + (y - py) ^ 2) LIMIT 1 ) n -- 8 "" , LATERAL ( SELECT nx + dx x , ny + dy y FROM generate_series(-1, 1) dx , generate_series(-1, 1) dy WHERE (dx, dy) <> (0, 0) ORDER BY CASE WHEN (px, py) = (nx, ny) THEN 0 ELSE abs(acos(((px - nx) * dx + (py - ny) * dy) / sqrt((px - nx) ^ 2 + (py - ny) ^ 2) / sqrt(dx ^ 2 + dy ^ 2))) END LIMIT 1 ) dn ) SELECT Zx , Zy , Zc || ARRAY[Zx, Zy]::text , Zi + 1 FROM Z WHERE Zi < (1 << 10) ) ) -- , map AS ( SELECT gx x , gy y , ( SELECT sqrt((gx - Tx) ^ 2 + (gy - Ty) ^ 2) v FROM T ORDER BY v LIMIT 1 ) v FROM generate_series(-40, 40) gx , generate_series(-30, 30) gy ) -- , gr AS ( SELECT regexp_split_to_array('#*+-. ', '') s ) -- SELECT string_agg( coalesce(s[(v * (array_length(s, 1) - 1))::integer + 1], ' ') , ' ' ORDER BY x) frozen FROM ( SELECT x , y , v::double precision / max(v) OVER() v -- FROM map ) T , gr GROUP BY y ORDER BY y;
WITH RECURSIVE T AS ( SELECT 0 x , 0 y , '{"{0,0}"}'::text[] c -- , 0 i UNION ALL ( WITH Z AS ( SELECT dn.x , dn.y , Tc , Ti FROM T -- , LATERAL( SELECT ((random() * 2 - 1) * 100)::integer x , ((random() * 2 - 1) * 100)::integer y ) p -- , LATERAL( SELECT * FROM ( SELECT (unnest::text[])[1]::integer x , (unnest::text[])[2]::integer y FROM unnest(Tc::text[]) ) T ORDER BY sqrt((x - px) ^ 2 + (y - py) ^ 2) LIMIT 1 ) n -- 8 , LATERAL ( SELECT nx + dx x , ny + dy y FROM generate_series(-1, 1) dx , generate_series(-1, 1) dy WHERE (dx, dy) <> (0, 0) ORDER BY CASE WHEN (px, py) = (nx, ny) THEN 0 ELSE abs(acos(((px - nx) * dx + (py - ny) * dy) / sqrt((px - nx) ^ 2 + (py - ny) ^ 2) / sqrt(dx ^ 2 + dy ^ 2))) END LIMIT 1 ) dn ) SELECT Zx , Zy , Zc || ARRAY[Zx, Zy]::text , Zi + 1 FROM Z WHERE Zi < (1 << 10) ) ) -- , map AS ( SELECT gx x , gy y , ( SELECT sqrt((gx - Tx) ^ 2 + (gy - Ty) ^ 2) v FROM T ORDER BY v LIMIT 1 ) v FROM generate_series(-70, 70) gx , generate_series(-35, 35) gy ) -- , gr AS ( SELECT regexp_split_to_array('#****++++----.... ', '') s ) -- SELECT string_agg( coalesce(s[(v * (array_length(s, 1) - 1))::integer + 1], ' ') , ' ' ORDER BY x) frozen FROM ( SELECT x , y , v::double precision / max(v) OVER() v -- FROM map ) T , gr GROUP BY y ORDER BY y;
Source: https://habr.com/ru/post/hi482460/More articles:2019 рдХреА рд╕рдмрд╕реЗ рдмрдбрд╝реА рддрдХрдиреАрдХ рд╡рд┐рдлрд▓рднрд╡рд┐рд╖реНрдп - рднрдп рдФрд░ рднрд╡рд┐рд╖реНрдп рдХрд╛ рднрдпMVP 2019 рдореЗрдВ MVP рдХреЗ рд╕рд╛рде рдПрдХ рдЙрддреНрдкрд╛рдж рдпрд╛ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИрд╣рдорд╛рд░реЗ FunCode, рдпрд╛ рд╣рдо рдХреИрд╕реЗ iOS рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдЖрдпреЛрдЬрд┐рдд рдХреА5 рдкрд╛рдпрдерди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ - рд▓реЗрдХрд┐рди рд╡реНрдпрд░реНрде10 рдорд┐рдирдЯ рдореЗрдВ рдореЗрдЯрд╛рдлрд╝реНрд▓реЛ рд╕реАрдЦреЗрдВрдкрд╛рдпрдерди рдореЗрдВ * рдЖрд░реНрдЧреНрд╕ рдФрд░ ** рдХреНрд╡рд╛рд░реНрдЧреНрд╕ рдХреНрдпрд╛ рд╣реИрдВ?5 рдЪреАрдЬреЗрдВ рдЬреЛ рдЖрдк Vue 3.0 рдХреА рддреИрдпрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВрд╡реАрдПрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП 5 рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рдереАрдо рдЬреЛ рдлреНрд░рдВрдЯ-рдПрдВрдб рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЬреАрд╡рди рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВрд╕рдмрд╕реЗ рд╕рд╕реНрддреЗ рд╕рд╕реНрддреЗ рдлреЛрди рдкрд░ рдлрд╛рд╕реНрдЯ рдкреЗрдЬ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИAll Articles