-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolution.ts
49 lines (44 loc) · 1.54 KB
/
solution.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
type Letters = {
A: ["█▀█ ", "█▀█ ", "▀ ▀ "];
B: ["█▀▄ ", "█▀▄ ", "▀▀ "];
C: ["█▀▀ ", "█ ░░", "▀▀▀ "];
E: ["█▀▀ ", "█▀▀ ", "▀▀▀ "];
H: ["█ █ ", "█▀█ ", "▀ ▀ "];
I: ["█ ", "█ ", "▀ "];
M: ["█▄░▄█ ", "█ ▀ █ ", "▀ ░░▀ "];
N: ["█▄░█ ", "█ ▀█ ", "▀ ░▀ "];
P: ["█▀█ ", "█▀▀ ", "▀ ░░"];
R: ["█▀█ ", "██▀ ", "▀ ▀ "];
S: ["█▀▀ ", "▀▀█ ", "▀▀▀ "];
T: ["▀█▀ ", "░█ ░", "░▀ ░"];
Y: ["█ █ ", "▀█▀ ", "░▀ ░"];
W: ["█ ░░█ ", "█▄▀▄█ ", "▀ ░ ▀ "];
" ": ["░", "░", "░"];
":": ["#", "░", "#"];
"*": ["░", "#", "░"];
};
type RenderLetterLine<
Letter extends keyof Letters,
LineNumber extends number
> = Letters[Letter][LineNumber];
type RenderLettersLine<
String extends string,
LineNumber extends number
> = String extends `${infer CurrentSymbol}${infer Rest}`
? Uppercase<CurrentSymbol> extends infer Key extends keyof Letters
? `${RenderLetterLine<Key, LineNumber>}${RenderLettersLine<
Rest,
LineNumber
>}`
: ""
: "";
type RenderLettersLines<Key extends string> = [
RenderLettersLine<Key, 0>,
RenderLettersLine<Key, 1>,
RenderLettersLine<Key, 2>
];
type ToAsciiArt<String extends string> =
String extends `${infer Key}\n${infer Rest}`
? [...RenderLettersLines<Key>, ...ToAsciiArt<Rest>]
: RenderLettersLines<String>;
export { ToAsciiArt };