2021-12-26 - seven segment display
(original .ipynb)
After AOC 2021 day 8 I wanted to play with seven segment display a little.
tiny_template = """
bac
b c
edf
e f
ggf
"""
little_template = """
baac
b c
bddc
e f
eggf
"""
big_template = """
aaaa
b c
b c
dddd
e f
e f
gggg
"""
all_segments = "abcdefg"
digit_segments = {
0: "abcefg",
1: "cf",
2: "acdeg",
3: "acdfg",
4: "bcdf",
5: "abdfg",
6: "abdefg",
7: "acf",
8: "abcdefg",
9: "abcdfg"
}
def replace_line(line, segments):
return "".join("#" if s in segments else " " for s in line)
def render(n, template=big_template):
digits = [int(s) for s in str(n)]
lines = []
for template_line in template.split("\n"):
line = []
for d in digits:
line += replace_line(template_line, digit_segments[d])
lines.append("".join(line))
print("\n".join(lines))
render(1234567890)
render(1234567890, little_template)
render(1234567890, tiny_template)
def digify(func):
def wrapped(*args, **kwargs):
res = func(*args, **kwargs)
if type(res) == int:
render(res)
return res
return wrapped
@digify
def add(a, b):
return a + b
print(add(10, 20))
#### #### #### #### #### #### #### ####
# # # # # # # # # # # # # #
# # # # # # # # # # # # # #
#### #### #### #### #### #### ####
# # # # # # # # # # # # #
# # # # # # # # # # # # #
#### #### #### #### #### #### ####
# ### ### # # ### ### ### #### #### ####
# # # # # # # # # # # # # #
# ### ### #### ### ### # #### #### # #
# # # # # # # # # # # # #
# ### ### # ### #### # #### ### ####
# ## ## # # ## ## ## ### ### ###
# # # # # # # # # # # # # #
# ## ## ## ## ### # ### ## # #
# # # # # # # # # # # # #
# ## ### # ### ### # ### ### ###
#### ####
# # #
# # #
####
# # #
# # #
#### ####
30