-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathq20.ts
119 lines (112 loc) · 2 KB
/
q20.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
type Letters = {
A: [
'█▀█ ',
'█▀█ ',
'▀ ▀ ',
],
B: [
'█▀▄ ',
'█▀▄ ',
'▀▀ '
],
C: [
'█▀▀ ',
'█ ░░',
'▀▀▀ '
],
E: [
'█▀▀ ',
'█▀▀ ',
'▀▀▀ '
],
H: [
'█ █ ',
'█▀█ ',
'▀ ▀ '
],
I: [
'█ ',
'█ ',
'▀ '
],
M: [
'█▄░▄█ ',
'█ ▀ █ ',
'▀ ░░▀ '
],
N: [
'█▄░█ ',
'█ ▀█ ',
'▀ ░▀ '
],
P: [
'█▀█ ',
'█▀▀ ',
'▀ ░░'
],
R: [
'█▀█ ',
'██▀ ',
'▀ ▀ '
],
S: [
'█▀▀ ',
'▀▀█ ',
'▀▀▀ '
],
T: [
'▀█▀ ',
'░█ ░',
'░▀ ░'
],
Y: [
'█ █ ',
'▀█▀ ',
'░▀ ░'
],
W: [
'█ ░░█ ',
'█▄▀▄█ ',
'▀ ░ ▀ '
],
' ': [
'░',
'░',
'░'
],
':': [
'#',
'░',
'#'
],
'*': [
'░',
'#',
'░'
],
};
type GetLetter<S extends string, T = Uppercase<S>> = T extends keyof Letters ? Letters[T] : [T, T, T];
type SplitString<S extends string> =
S extends `${infer a extends string}\n${infer b extends string}`
? [a, ...SplitString<b>]
: [S]
type ToAsciiArt1<S extends string, N extends number> =
S extends `${infer a extends string}${infer b extends string}` ?
ToAsciiArt1<b, N> extends infer R ? R extends string ? `${GetLetter<a>[N]}${R}` : never : never
: "";
type Rotate<S extends any[]> =
S extends [infer Front, ...infer Rest] ?
[...Rotate<Rest>, Front]
: [];
type Interweave<S extends any[][]> =
S extends [infer FrontArr, ...infer RestArr extends any[]] ?
FrontArr extends [infer Front, ...infer Rest] ?
[Front, ...Interweave<[...RestArr, Rest]>]
: Interweave<RestArr>
: [];
type ToAsciiArt<S extends string> =
Interweave<[
SplitString<ToAsciiArt1<S, 0>>,
SplitString<ToAsciiArt1<S, 1>>,
SplitString<ToAsciiArt1<S, 2>>
]>;