Skip to content

Instantly share code, notes, and snippets.

@Goryudyuma
Last active November 30, 2017 21:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Goryudyuma/fc4b61723af50863eb4cdaa98604f485 to your computer and use it in GitHub Desktop.
Save Goryudyuma/fc4b61723af50863eb4cdaa98604f485 to your computer and use it in GitHub Desktop.
with recursive
limitxy AS (SELECT * FROM (VALUES(20, 20)) AS t (x,y)),
formula(n, x, y, c) AS (
VALUES(0, 0, 0, '')
UNION ALL
SELECT n+1,
(SELECT x FROM (SELECT n % (SELECT x FROM limitxy) AS x, n / (SELECT x FROM limitxy) AS y) AS xy),
(SELECT y FROM (SELECT n % (SELECT x FROM limitxy) AS x, n / (SELECT x FROM limitxy) AS y) AS xy),
CASE WHEN (
SELECT (
(point.x + point.y) % 2 = 0
)
FROM (
SELECT x - (SELECT x/2 FROM limitxy) AS x, y - (SELECT y/2 FROM limitxy) AS y
FROM (SELECT n % (SELECT x FROM limitxy) AS x, n / (SELECT y FROM limitxy) AS y) AS xy
) AS point
)
then '*'
ELSE ' '
END
FROM formula WHERE n < (SELECT x * y FROM limitxy)
),
mkstring(num, s) AS(
VALUES(0, '')
UNION ALL
SELECT num + 1, (SELECT ARRAY_TO_STRING(ARRAY_AGG(c), '') FROM formula WHERE num = formula.y) FROM mkstring WHERE num < (SELECT y FROM limitxy)
)
SELECT s FROM mkstring WHERE num != 0;
s
----------------------
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment