Skip to content

Instantly share code, notes, and snippets.

@rexim
Created April 14, 2021 09:58
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 rexim/bb60cd42e3efd7ebe40f5518a3fdec1a to your computer and use it in GitHub Desktop.
Save rexim/bb60cd42e3efd7ebe40f5518a3fdec1a to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# https://www.hackerrank.com/challenges/alphabet-rangoli/problem
import math
# ----c----
# --c-b-c--
# c-b-a-b-c
# --c-b-c--
# ----c----
size = 26
rows = 2 * size - 1
cols = 2 * rows - 1
neihbors = [
(-1, 0), # left
( 1, 0), # right
( 0, -2), # up
( 0, 2) # down
]
canvas = [['-'] * cols for _ in range(rows)]
start_row = rows // 2
start_col = cols // 2
canvas[start_row][start_col] = 'a'
wave = [(rows // 2, cols // 2)]
for _ in range(size - 1):
new_wave = []
for (row0, col0) in wave:
for (drow, dcol) in neihbors:
row = row0 + drow
col = col0 + dcol
if 0 <= row < rows and 0 <= col < cols:
if canvas[row][col] == '-':
canvas[row][col] = chr(ord(canvas[row0][col0]) + 1)
new_wave.append((row, col))
wave = new_wave
for row in canvas:
print("".join(row))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment