-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolution.d.ts
117 lines (112 loc) · 1.9 KB
/
solution.d.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
// Helpers
// prettier-ignore
type Letters = {
A: [
'█▀█ ',
'█▀█ ',
'▀ ▀ ',
],
B: [
'█▀▄ ',
'█▀▄ ',
'▀▀ '
],
C: [
'█▀▀ ',
'█ ░░',
'▀▀▀ '
],
E: [
'█▀▀ ',
'█▀▀ ',
'▀▀▀ '
],
H: [
'█ █ ',
'█▀█ ',
'▀ ▀ '
],
I: [
'█ ',
'█ ',
'▀ '
],
M: [
'█▄░▄█ ',
'█ ▀ █ ',
'▀ ░░▀ '
],
N: [
'█▄░█ ',
'█ ▀█ ',
'▀ ░▀ '
],
P: [
'█▀█ ',
'█▀▀ ',
'▀ ░░'
],
R: [
'█▀█ ',
'██▀ ',
'▀ ▀ '
],
S: [
'█▀▀ ',
'▀▀█ ',
'▀▀▀ '
],
T: [
'▀█▀ ',
'░█ ░',
'░▀ ░'
],
Y: [
'█ █ ',
'▀█▀ ',
'░▀ ░'
],
W: [
'█ ░░█ ',
'█▄▀▄█ ',
'▀ ░ ▀ '
],
' ': [
'░',
'░',
'░'
],
':': [
'#',
'░',
'#'
],
'*': [
'░',
'#',
'░'
],
};
type Join<T extends string[]> = T extends [infer Head extends string, ...infer Tail extends string[]]
? `${Head}${Join<Tail>}`
: ''
type DeepJoin<T extends string[][], Acc extends string[] = []> = T extends [
infer Head extends string[],
...infer Tail extends string[][],
]
? DeepJoin<Tail, [...Acc, Join<Head>]>
: Acc
type WriteAsciiLine<T extends string, Acc extends string[][] = [[], [], []]> = T extends `${infer Head}${infer Tail}`
? WriteAsciiLine<
Tail,
[
[...Acc[0], Letters[Uppercase<Head>][0]],
[...Acc[1], Letters[Uppercase<Head>][1]],
[...Acc[2], Letters[Uppercase<Head>][2]],
]
>
: DeepJoin<Acc>
// Solution
export type ToAsciiArt<T extends string, Acc extends string[] = []> = T extends `${infer Head}\n${infer Tail}`
? ToAsciiArt<Tail, [...Acc, ...WriteAsciiLine<Head>, ...WriteAsciiLine<Tail>]>
: Acc