Initial commit, C WASM version working
This commit is contained in:
136
klock4.py
Normal file
136
klock4.py
Normal file
@ -0,0 +1,136 @@
|
||||
TEXT = """\
|
||||
ESXISTXFÜNF\
|
||||
ZEHNZWANZIG\
|
||||
DREIVIERTEL\
|
||||
VORGESTNACH\
|
||||
HALBXELFÜNF\
|
||||
EINSXLEZWEI\
|
||||
DREIXTXVIER\
|
||||
SECHSXXACHT\
|
||||
SIEBENZWÖLF\
|
||||
ZEHNEUNXUHR\
|
||||
"""
|
||||
|
||||
SEGMENTS = {
|
||||
'ES IST': [(0, 2), (3, 3)],
|
||||
'FÜNF_PRE': [(7, 4)],
|
||||
'FÜNFZEHN': [(7, 8)],
|
||||
'ZEHN_PRE': [(11, 4)],
|
||||
'ZWANZIG': [(15, 7)],
|
||||
'DREIVIERTEL': [(22, 11)],
|
||||
'VIERTEL': [(26, 7)],
|
||||
'VOR': [(33, 3)],
|
||||
'NACH': [(40, 4)],
|
||||
'HALB': [(44, 4)],
|
||||
'ELF': [(49, 3)],
|
||||
'FÜNF_UHR': [(51, 4)],
|
||||
'EINS': [(55, 4)],
|
||||
'ZWEI': [(62, 4)],
|
||||
'DREI': [(66, 4)],
|
||||
'VIER': [(73, 4)],
|
||||
'SECHS': [(77, 5)],
|
||||
'ACHT': [(84, 4)],
|
||||
'SIEBEN': [(88, 6)],
|
||||
'ZWÖLF': [(94, 5)],
|
||||
'ZEHN_UHR': [(99, 4)],
|
||||
'NEUN': [(102, 4)],
|
||||
'UHR': [(107, 3)],
|
||||
'STELLE': [(38, 2), (49, 2), (60, 2)],
|
||||
'GESTELLT': [(36, 4), (49, 2), (60, 1), (71, 1)],
|
||||
}
|
||||
|
||||
HOURS = ['ZWÖLF', 'EINS', 'ZWEI', 'DREI', 'VIER', 'FÜNF_UHR', 'SECHS', 'SIEBEN', 'ACHT', 'NEUN', 'ZEHN_UHR', 'ELF' ]
|
||||
PARTS = [['UHR'], ['FÜNF_PRE'], ['ZEHN_PRE'], ['VIERTEL'], ['ZWANZIG'], ['FÜNF_PRE', 'HALB'], ['HALB']]
|
||||
|
||||
active = [False] * len(TEXT)
|
||||
|
||||
def set(segment, val=True):
|
||||
for word in segment:
|
||||
idx, len = word
|
||||
active[idx:idx+len] = [val for _ in range(len)]
|
||||
|
||||
def reset():
|
||||
global active
|
||||
set([(0, len(TEXT))], False)
|
||||
set(SEGMENTS['ES IST'])
|
||||
|
||||
def settime(time):
|
||||
reset()
|
||||
|
||||
hour = time.hour % 12
|
||||
minute = 5 * round((time.minute + time.second/60) / 5)
|
||||
before = False
|
||||
|
||||
if minute >= 25:
|
||||
hour = (hour + 1) % 12
|
||||
before = True
|
||||
minute = (60-minute)
|
||||
if minute == 35:
|
||||
minute = 25
|
||||
before = False
|
||||
|
||||
print(minute, 'vor' if before else 'nach', hour)
|
||||
|
||||
# 25 before 6 -> 5 after half 6
|
||||
# 25 after 6 -> 5 before half 6
|
||||
if minute == 25:
|
||||
before = not before
|
||||
|
||||
if not minute in [0, 30]:
|
||||
set(SEGMENTS['VOR' if before else 'NACH'])
|
||||
|
||||
set(SEGMENTS[HOURS[hour]])
|
||||
|
||||
for part in PARTS[minute//5]:
|
||||
set(SEGMENTS[part])
|
||||
|
||||
|
||||
def dump():
|
||||
COLS = 11
|
||||
RESET = '\033[0m'
|
||||
WHITE = '\033[1;37m'
|
||||
GRAY = '\033[0;30m'
|
||||
for i, char in enumerate(TEXT):
|
||||
col = i % COLS
|
||||
row = i // COLS
|
||||
if (col == 0):
|
||||
print('\n ', end='')
|
||||
color = (WHITE if active[i] else GRAY) if i==0 or active[i] != active[i-1] else ''
|
||||
print(f' {color}{char} ', end='')
|
||||
print(RESET+'\n')
|
||||
|
||||
|
||||
def live():
|
||||
import time
|
||||
from datetime import datetime
|
||||
while True:
|
||||
print('\033c', end='')
|
||||
|
||||
now = datetime.now()
|
||||
print(now)
|
||||
|
||||
settime(now)
|
||||
dump()
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
def demo():
|
||||
import time
|
||||
import datetime
|
||||
t = datetime.datetime.now()
|
||||
while True:
|
||||
print('\033c', end='')
|
||||
print(t)
|
||||
|
||||
settime(t)
|
||||
dump()
|
||||
|
||||
time.sleep(1)
|
||||
t += datetime.timedelta(minutes=1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
if len(sys.argv) > 1 and sys.argv[1] == 'demo':
|
||||
demo()
|
||||
else:
|
||||
live()
|
||||
Reference in New Issue
Block a user