87 lines
2.2 KiB
Python
87 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
Some UTF-8 chars used:
|
||
|
||
‾ 8254 203E ‾ OVERLINE
|
||
┃ 9475 2503 BOX DRAWINGS HEAVY VERTICAL
|
||
╱ 9585 2571 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
|
||
╲ 9586 2572 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
|
||
◸ 9720 25F8 UPPER LEFT TRIANGLE
|
||
◹ 9721 25F9 UPPER RIGHT TRIANGLE
|
||
◺ 9722 25FA LOWER LEFT TRIANGLE
|
||
◻ 9723 25FB WHITE MEDIUM SQUARE
|
||
◿ 9727 25FF LOWER RIGHT TRIANGLE
|
||
|
||
"""
|
||
|
||
#%% digit sections
|
||
|
||
def _init():
|
||
"digit sections for forming numbers"
|
||
digi_bits = """
|
||
#0 1 2 3 4 5 6 7 8 9
|
||
#
|
||
. ‾ _ ╲ ╱ ◸ .| ‾| _| ◻
|
||
#
|
||
. ‾ _ ╱ ╲ ◹ |. |‾ |_ ◻
|
||
#
|
||
. _ ‾ ╱ ╲ ◺ .| _| ‾| ◻
|
||
#
|
||
. _ ‾ ╲ ╱ ◿ |. |_ |‾ ◻
|
||
|
||
""".strip()
|
||
|
||
lines = [[d.replace('.', ' ') for d in ln.strip().split()]
|
||
for ln in digi_bits.strip().split('\n')
|
||
if '#' not in ln]
|
||
formats = '<2 >2 <2 >2'.split()
|
||
digits = [[f"{dig:{f}}" for dig in line]
|
||
for f, line in zip(formats, lines)]
|
||
|
||
return digits
|
||
|
||
_digits = _init()
|
||
|
||
|
||
#%% int to 3-line strings
|
||
def _to_digits(n):
|
||
assert 0 <= n < 10_000 and int(n) == n
|
||
|
||
return [int(digit) for digit in f"{int(n):04}"][::-1]
|
||
|
||
def num_to_lines(n):
|
||
global _digits
|
||
d = _to_digits(n)
|
||
lines = [
|
||
''.join((_digits[1][d[1]], '┃', _digits[0][d[0]])),
|
||
''.join((_digits[0][ 0], '┃', _digits[0][ 0])),
|
||
''.join((_digits[3][d[3]], '┃', _digits[2][d[2]])),
|
||
]
|
||
|
||
return lines
|
||
|
||
def cjoin(c1, c2, spaces=' '):
|
||
return [spaces.join(by_row) for by_row in zip(c1, c2)]
|
||
|
||
#%% main
|
||
if __name__ == '__main__':
|
||
#n = 6666
|
||
#print(f"Arabic {n} to Cistercian:\n")
|
||
#print('\n'.join(num_to_lines(n)))
|
||
|
||
for pow10 in range(4):
|
||
step = 10 ** pow10
|
||
print(f'\nArabic {step}-to-{9*step} by {step} in Cistercian:\n')
|
||
lines = num_to_lines(step)
|
||
for n in range(step*2, step*10, step):
|
||
lines = cjoin(lines, num_to_lines(n))
|
||
print('\n'.join(lines))
|
||
|
||
|
||
numbers = [0, 5555, 6789, 6666]
|
||
print(f'\nArabic {str(numbers)[1:-1]} in Cistercian:\n')
|
||
lines = num_to_lines(numbers[0])
|
||
for n in numbers[1:]:
|
||
lines = cjoin(lines, num_to_lines(n))
|
||
print('\n'.join(lines))
|