I've recently discovered Cassidy's newsletter, more precisely this one and really liked it:
I admit I haven't read the linked articles :-)
Given a direction and a number of columns, write a function that outputs an arrow of asterisks (see the pattern in the examples below)!
Example:
$ printArrow('right', 3) Output: * * * * * $ printArrow('left', 5) Output: * * * * * * * * *
I've decided to do it in SQL (PostgreSQL flavour) because these times it's the language I have the most fun with for these little puzzles.
My solution is based on 2 main ideas:
generate_series
to generate the lines (it's kind of obvious if you're used to do these puzzles in SQL)abs
function plotCREATE OR REPLACE FUNCTION public.print_arrow(
direction text,
columnnumber integer)
RETURNS text
LANGUAGE sql
IMMUTABLE
AS $function$
select
-- we repeat a space s times, add a * at the end
-- and separate lines with \n
-- nothing surprising...
string_agg(repeat(' ', s) || '*', E'\n')
from (
-- here is the number of space computation
select
case
when direction = 'right' then
columnnumber - abs(line - columnnumber) - 1
when direction = 'left' then
abs(line - columnnumber)
else /*uh oh!*/ 0
end as s
from
-- generate numbers from 1 to 2n-1
generate_series(1, 2 * columnnumber - 1) line
) spaces;
$function$
Not very complicated, but fun to see that SQL gives us everything we need in this case.
(Photo by Dale Brooks from Pexels.)