From ef0bbbd6b0adc405022f58f5fe815ef7dd3bea21 Mon Sep 17 00:00:00 2001 From: snit Date: Thu, 5 Dec 2024 18:36:00 -0600 Subject: [PATCH] Clock is done --- lc | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100755 lc diff --git a/lc b/lc new file mode 100755 index 0000000..dcd41dc --- /dev/null +++ b/lc @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +from datetime import datetime +import time + +CHARS_PER_LINE = 30 # For sixty dots per line +DOTS_PER_LINE = CHARS_PER_LINE * 2 + +DY_ONE = 0x01 # Top Left +HR_ONE = 0x02 # Center Left +MN_ONE = 0x04 # Bottom Left +DY_TWO = 0x08 | DY_ONE # Top Left + Right +HR_TWO = 0x10 | HR_ONE # Center Left + Right +MN_TWO = 0x20 | MN_ONE # Bottom Left + Right + + +def to_dots(unit, divisor): + return unit / divisor * DOTS_PER_LINE + + +def time_to_dots(time): + return to_dots(time.hour, 24), to_dots(time.minute, 60), to_dots(time.second, 60) + + +def construct_char_row(index, total_dots, flag_one, flag_two): + current_dots = index * 2 + + if total_dots > current_dots: + if total_dots - current_dots > 1: return flag_two + else: return flag_one if total_dots % 2 == 1 else flag_two + + return 0 + + +def construct_clock_char(index, dy_dots, hr_dots, mn_dots): + char = 0x2800 # The codepoint for an empty Braille character + + char |= construct_char_row(index, dy_dots, DY_ONE, DY_TWO) + char |= construct_char_row(index, hr_dots, HR_ONE, HR_TWO) + char |= construct_char_row(index, mn_dots, MN_ONE, MN_TWO) + + return chr(char) + + +def construct_clock(dy_dots, hr_dots, mn_dots): + clock_str = "" + + for i in range(CHARS_PER_LINE): + clock_str += construct_clock_char(i, dy_dots, hr_dots, mn_dots) + + return clock_str + + +dy_dots, hr_dots, mn_dots = time_to_dots(datetime.now()) +print(f"{datetime.now().strftime('%H:%M:%S')}: {construct_clock(dy_dots, hr_dots, mn_dots)}")