MySQLでCTEを使ってマンデルブロを描く

 MySQL に CTEが入ったんですよという話題の中で、PostgreSQLのCTEの定番でこんなものがあるんですよ、とPostgreSQLの(というかSRA OSSの)石井さんに教えていただきました。

Mandelbrot set - PostgreSQL wiki

 もちろんこのままではMySQLでは動かないのですが、少しの修正で動くようになったので、紹介します。

もとのSQL (PostgreSQL)

 上記サイトに掲載されていた PostgreSQL用のSQLです。実行結果は上記サイトを参照。きれいなマンデルブロートが出力されます。

WITH RECURSIVE
x(i)
AS (
    VALUES(0)
UNION ALL
    SELECT i + 1 FROM x WHERE i < 101
),
Z(Ix, Iy, Cx, Cy, X, Y, I)
AS (
    SELECT Ix, Iy, X::FLOAT, Y::FLOAT, X::FLOAT, Y::FLOAT, 0
    FROM
        (SELECT -2.2 + 0.031 * i, i FROM x) AS xgen(x,ix)
    CROSS JOIN
        (SELECT -1.5 + 0.031 * i, i FROM x) AS ygen(y,iy)
    UNION ALL
    SELECT Ix, Iy, Cx, Cy, X * X - Y * Y + Cx AS X, Y * X * 2 + Cy, I + 1
    FROM Z
    WHERE X * X + Y * Y < 16.0
    AND I < 27
),
Zt (Ix, Iy, I) AS (
    SELECT Ix, Iy, MAX(I) AS I
    FROM Z
    GROUP BY Iy, Ix
    ORDER BY Iy, Ix
)
SELECT array_to_string(
    array_agg(
        SUBSTRING(
            ' .,,,-----++++%%%%@@@@#### ',
            GREATEST(I,1),
            1
        )
    ),''
)
FROM Zt
GROUP BY Iy
ORDER BY Iy;

 

MySQL version (今回動くようにしたもの)

WITH RECURSIVE x(i) AS (
    VALUES ROW(0)
UNION ALL
    SELECT i + 1 FROM x WHERE i < 101
),
Z(Ix, Iy, Cx, Cy, X, Y, I)
AS (
    SELECT Ix, Iy, X, Y, X, Y, 0
    FROM
        (SELECT -2.2 + 0.031 * i, i FROM x) AS xgen(x,ix)
    CROSS JOIN
        (SELECT -1.5 + 0.031 * i, i FROM x) AS ygen(y,iy)
    UNION ALL
    SELECT Ix, Iy, Cx, Cy, X * X - Y * Y + Cx AS X, Y * X * 2 + Cy, I + 1
    FROM Z
    WHERE X * X + Y * Y < 16.0
    AND I < 27
),
Zt (Ix, Iy, I) AS (
    SELECT Ix, Iy, MAX(I) AS I
    FROM Z
    GROUP BY Iy, Ix
    ORDER BY Iy, Ix
)
SELECT array_to_string(
    array_agg(
        SUBSTRING(
            ' .,,,-----++++%%%%@@@@#### ',
            GREATEST(I,1),
            1
        )
    ),''
)
FROM Zt
GROUP BY Iy
ORDER BY Iy;

実行結果

mysql> WITH RECURSIVE x(i) AS (
    ->     VALUES ROW(0)
    -> UNION ALL
    ->     SELECT i + 1 FROM x WHERE i < 101
    -> ),
    -> Z(Ix, Iy, Cx, Cy, X, Y, I)
    -> AS (
    ->     SELECT Ix, Iy, X, Y, X, Y, 0
    ->     FROM
    ->         (SELECT -2.2 + 0.031 * i, i FROM x) AS xgen(x,ix)
    ->     CROSS JOIN
    ->         (SELECT -1.5 + 0.031 * i, i FROM x) AS ygen(y,iy)
    ->     UNION ALL
    ->     SELECT Ix, Iy, Cx, Cy, X * X - Y * Y + Cx AS X, Y * X * 2 + Cy, I + 1
    ->     FROM Z
    ->     WHERE X * X + Y * Y < 16.0
    ->     AND I < 27
    -> ),
    -> Zt (Ix, Iy, I) AS (
    ->     SELECT Ix, Iy, MAX(I) AS I
    ->     FROM Z
    ->     GROUP BY Iy, Ix
    ->     ORDER BY Iy, Ix
    -> )
    -> SELECT Iy, GROUP_CONCAT(s ORDER BY Ix)
    ->   FROM (
    ->     SELECT Iy, Ix, I, SUBSTRING(' .,,,-----++++%%%%@@@@#### ',I,1) s
    ->     FROM Zt
    ->   ) t
    -> GROUP BY Iy
    -> ORDER BY Iy;
+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Iy   | GROUP_CONCAT(s ORDER BY Ix)                                                                                                                                                                                 |
+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|    0 |  , , , , , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., , , , ,  |
|    1 |  , , , , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., , ,  |
|    2 |  , , , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., ,  |
|    3 |  , , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,  |
|    4 |  , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|    5 |  , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|    6 |  , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|    7 |  , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|    8 |  , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|    9 |  , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   10 |  , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   11 |  , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   12 |  ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   13 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,+,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   14 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   15 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-, ,-,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   16 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,+,+,-,-,+,+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,. |
|   17 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,%,+,+,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,. |
|   18 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,+,%,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,. |
|   19 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,#,%,%,+,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,. |
|   20 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,+,-,+,%, , , ,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,. |
|   21 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,+, ,+,#,#, , ,%,+,%,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,. |
|   22 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,@, , , , , , ,@, ,+,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,. |
|   23 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,%, , , , , , , ,%,-,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,. |
|   24 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,-,+, , , , , , , , , ,-,-,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,. |
|   25 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,-,-,-,+,@, , , , , , , ,+,-,-,-,-,-,-,-,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,. |
|   26 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,#,-,-,-,-,-,-,-,+,+, , , , , , , ,+,+,-,-,-,-,-,-,-,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,. |
|   27 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,+, ,%, ,-,-,-,+, ,+,%,%,%,@, , , , , ,%,%,+,@,+,@,%,-,-,-,-,-,-,+,-,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,. |
|   28 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-, , ,#, ,+,+,%, , , , , , , , , , , , , , , ,%, ,@,-,-,-,-,-,+,+,-,-,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,. |
|   29 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,+, , , , ,%, , , , , , , , , , , , , , , , , , ,%,%,+,+, ,%,+,%,#,-,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,. |
|   30 | .,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,+,#, , , , , , , , , , , , , , , , , , , , , , , , ,%, , , , ,+,+,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,. |
|   31 | .,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,+, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,. |
|   32 | .,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,+,+,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,. |
|   33 | .,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,+, ,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,%,+,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,. |
|   34 | .,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,@, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,. |
|   35 | .,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,%,+,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,+, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,. |
|   36 | .,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,+,+,-,-,-,-,-,-,+,-,-,-,-,-,-,-,-,-,+,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,+,+,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,. |
|   37 | .,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,%,+,-,-,-,-,-,+,+,-,-,-,-,-,-,-,-,-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#,+,-,,,,,,,,,,,,,,,,,,,,,,,,,.,. |
|   38 | .,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-, ,%,+,+,-,-,+,@, ,-,+,-,-,-,-,-,+,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,. |
|   39 | .,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,+,@, ,@,+,+,@, ,+, ,+,-,-,-,-,+, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,.,. |
|   40 | .,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,+,@, , ,@, , , , , ,@,@,+,+,+,+,#, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,.,. |
|   41 | .,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,%, , , , , , , , , , , ,#,+,+,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,-,,,,,,,,,,,,,,,,,,,,,,,,,,,.,. |
|   42 | .,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,+,+,%,#, , , , , , , , , , , ,%,%,@, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,@,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   43 | .,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,+, , , , , , , , , , , , , , , ,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   44 | .,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,+,-,-,+,+,@, , , , , , , , , , , , , , ,#, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   45 | .,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,%,+,+,+,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,@,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   46 | .,.,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,-,-,-,-,-,+, ,@, ,@, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   47 | .,.,,,,,,,,,,,,,,,,,,,-,-,-,%,-,-,-,-,-,-,-,-,%,-,+,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   48 | .,.,,,,,,,,,,,-,-,-,-,-,-,-, ,+,-,+,+,+,+,-,+,%,%,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   49 | .,.,,,,,,,,,,,,,-,-,-,-,-,-,%,-,-,-,-,-,-,-,-,+,+,@, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   50 | .,.,,,,,,,,,,,,,,,,,,,,,-,-,+,-,-,-,-,-,-,-,-,-,-,+,%,#, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   51 | .,.,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,-,-,-,-,+,@,@,@,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   52 | .,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-, ,+,+,+,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,%,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   53 | .,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,-,+,@, , , , , , , , , , , , , , ,@, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   54 | .,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,#,#,#, , , , , , , , , , , , , ,%,@, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   55 | .,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,+,%,@, , , , , , , , , , , ,%,+, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,%,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,. |
|   56 | .,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,@, , , , , , , , , , , ,%,+,+,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,%,-,,,,,,,,,,,,,,,,,,,,,,,,,,,.,. |
|   57 | .,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,+,@, , ,%, , , , ,#,@, ,+,+,+,+, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,.,. |
|   58 | .,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,+,+, ,%,%,+,+,%, ,+,@,+,-,-,-,-,+, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,.,. |
|   59 | .,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,%,+,+,+,-,-,+,#,+,-,-,-,-,-,-,-,-,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,. |
|   60 | .,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,+,+,-,-,-,-,-,%,%,-,-,-,-,-,-,-,-,-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,@,#,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,. |
|   61 | .,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,+,@, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,+,+,,,,,,,,,,,,,,,,,,,,,,,,,.,.,. |
|   62 | .,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,%, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,. |
|   63 | .,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,,,,,,,-,-,-,-,-,-,-,-,-,-,-,-,-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,#,+,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,. |
|   64 | .,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,+,#,+, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,+,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,. |
|   65 | .,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,+,%,#, , , , , , , , , , , , , , , , , , , , , , , , , , , ,#,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,. |
|   66 | .,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,+,@, , , , , , , , , , , , , , , , , , , , , , , , ,@, , , ,@,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,. |
|   67 | .,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,+,#, , , , , , , , , , , , , , , , , , , , , , , , ,+, , , , ,%,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,. |
|   68 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,%,%, , , ,@,+,@, , , , , , , , , , , , , , , , , ,%,+,-,+, ,+,+,+,%,-,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,. |
|   69 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,%, ,%,@,+,+, , , , , , , , , , , , , , ,#, ,%, , ,-,-,-,-,-,+,+,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,. |
|   70 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-, ,+,+, ,-,-,-,+, ,+, ,+,%,@, , , , , ,%,+,+,+,+,+,+,-,-,-,-,-,-,%,-,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,. |
|   71 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,@,-,-,-,-,-,-,-,+,+, , , , , , , ,+,-,-,-,-,-,-,-,-,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,. |
|   72 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,-,-,-,+,%, , , , , , , ,+,-,-,-,-,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,. |
|   73 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,-,+, , , , , , , , , ,-,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,. |
|   74 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,-,-,+, , , , , , , ,#,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,. |
|   75 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,+,%, , , , , , ,%,#,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,. |
|   76 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,+,%,+,%,@, , ,%,+,%,%,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,. |
|   77 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,+,-,+,%, , ,%,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,. |
|   78 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,+,%,%,+,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,. |
|   79 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,+,%,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,. |
|   80 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,%,+,@,+,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,. |
|   81 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,+,+,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   82 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,@,-,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   83 | .,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,-,-,-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   84 |  ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-,-,%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   85 |  ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   86 |  , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   87 |  , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   88 |  , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   89 |  , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   90 |  , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   91 |  , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   92 |  , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   93 |  , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,,,,,,,,,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,. |
|   94 |  , , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,  |
|   95 |  , , , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., ,  |
|   96 |  , , , , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., , , ,  |
|   97 |  , , , , , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., , , , ,  |
|   98 |  , , , , , , , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., , , , , ,  |
|   99 |  , , , , , , , , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., , , , , , , ,  |
|  100 |  , , , , , , , , , , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., , , , , , , , ,  |
|  101 |  , , , , , , , , , , , , , , , , , , ,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,., , , , , , , , , , ,  |
+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
102 rows in set, 65535 warnings (0.21 sec)

 フォントを小さくして、画像で見せると、こんな感じになります。美しい。

f:id:sakaik:20200521164519p:plain
Mandelbrot by MySQL

変更点の解説

  • VALUES 文に ROW 記述が必要 x VALUES(0), o VALUES ROW(0)
  • FLOAT へのキャストは明記不要なので、削除
  • GREATEST() は集約関数としての動作はしないので、一旦キャラクタを決めるクエリをサブクエリとして作成
  • array_to_string() 関数はないので、MySQLでは GROUP_CONCAT() で。

 PostgreSQL版では、キャラクタの順序決め(array_agg() か array_to_string() するタイミング)で Ix を使った順序決めを行っていない点が気になりました。処理の都合上、期待通りに Ix順となるよう文字列が作られているようですが、このクエリを厳密に読み解くとその順序は「不定」ではないでしょうか。


 それにしても、CTEやWindow関数活用の先輩である PostgreSQL には、やはり面白いサンプルがいっぱいありますね。ほかにも試してみたくなりました。おもしろかった~。

追記

 よく見たら、膨大なワーニングが出ていた。

102 rows in set, 65535 warnings (0.21 sec)

 これは、FLOATを「さくっと消してしまった」ことによるもので、やはりここは丁寧にCASTすべきであった。

エラーの例:

| Note  | 1265 | Data truncated for column 'Y' at row 1 |


キャスト方法

     SELECT Ix, Iy, CAST(X AS FLOAT), CAST(Y AS FLOAT) , CAST(X AS FLOAT), CAST(Y AS FLOAT), 0

 これで WARNINGS は出なくなる。