Skip to content

Instantly share code, notes, and snippets.

@infrahumano
Created February 3, 2019 23:15
Show Gist options
  • Save infrahumano/404abc1807000c04fafdab023c625936 to your computer and use it in GitHub Desktop.
Save infrahumano/404abc1807000c04fafdab023c625936 to your computer and use it in GitHub Desktop.
import numpy as np
side = '\({[<'
other_side = '/)}]>'
centered = '"*:|oOwWvVXx!^+=-08TYUuMA'
transformer = dict(list(zip(side, other_side)) + list(zip(other_side, side)) + list(zip(centered, centered)))
total = list(side + other_side + centered)
def row(centered_flower, size):
result = ''
if centered_flower:
result += np.random.choice(list(centered), 1)[0]
result += ''.join(np.random.choice(total, np.random.poisson(size)))
return result
def half_flower(centered_flower, flower_height):
flower = []
for i in range(flower_height):
if i == 0:
flower.append(row(centered_flower, 1))
else:
previous_row_len = len(flower[i-1])
flower.append(row(centered_flower, previous_row_len + 0.1))
return flower[::-1]
def reverse_row(centered_flower, flower_row):
result = flower_row[::][1:] if centered_flower else flower_row[::]
return ''.join([transformer[c] for c in result])[::-1]
def margin(flower_no_margin):
lengths = [int((len(r) - centered_flower)/2) for r in flower_no_margin]
max_len = max(lengths)
return [' ' * (max_len - l) + r + ' ' * (max_len - l) for l, r in zip(lengths, flower_no_margin)]
def gen_flower():
half = half_flower(1, 7)
return margin([a + b for a,b in zip([reverse_row(centered_flower, r) for r in half], half)])
def main():
for i in range(4):
for r in zip(*[gen_flower() for i in range(4)]):
print(' '.join(r))
print('\n')
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment