Skip to content

Commit 1359380

Browse files
committed
❌ added challenge 16: friday deployment
1 parent 1e3ca69 commit 1359380

File tree

3 files changed

+209
-0
lines changed

3 files changed

+209
-0
lines changed

readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Para esta versión estaré usando TypeScript, en su versión 5.3.2.
3434
| 13 | [**Calculando el tiempo**](https://adventjs.dev/es/challenges/2023/13) | 🟢 | [TS](./src/challenges/13.ts) | [SPEC](./src/tests/13.spec.ts) |
3535
| 14 | [**Evita la alarma**](https://adventjs.dev/es/challenges/2023/14) | 🟠 | [TS](./src/challenges/14.ts) | [SPEC](./src/tests/14.spec.ts) |
3636
| 15 | [**Robot autónomo**](https://adventjs.dev/es/challenges/2023/15) | 🟠 | [TS](./src/challenges/15.ts) | [SPEC](./src/tests/15.spec.ts) |
37+
| 16 | [**Viernes de deploy**](https://adventjs.dev/es/challenges/2023/16) | 🟢 | [TS](./src/challenges/16.ts) | [SPEC](./src/tests/16.spec.ts) |
3738

3839
## Herramientas utilizadas 🛠️
3940

src/challenges/16.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// For testing
2+
export interface ANSWER_TYPE {
3+
value: number
4+
left: ANSWER_TYPE | null
5+
right: ANSWER_TYPE | null
6+
}
7+
8+
export function transformTree (tree: Array<number | null>): ANSWER_TYPE | null {
9+
const root = tree.shift()
10+
if (root === undefined || root === null) {
11+
return null
12+
}
13+
const L = []; const R = []
14+
let n = 1; let i = 0; let inL = true; let c = 0
15+
while (i < tree.length) {
16+
if (inL) {
17+
L.push(tree.at(i) as number | null)
18+
} else {
19+
R.push(tree.at(i) as number | null)
20+
}
21+
c++
22+
i++
23+
if (c === n) {
24+
c = 0
25+
inL = !inL
26+
if (inL) n *= 2
27+
}
28+
}
29+
return {
30+
value: root,
31+
left: transformTree(L),
32+
right: transformTree(R)
33+
}
34+
}

src/tests/16.spec.ts

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
import { test, expectTypeOf, assertType, expect, describe } from 'vitest'
2+
import { transformTree } from '../challenges/16'
3+
import type { ANSWER_TYPE } from '../challenges/16'
4+
5+
describe('Challenge #16', () => {
6+
test('Test #01', () => {
7+
expectTypeOf(transformTree).toBeFunction()
8+
assertType<ANSWER_TYPE | null>(transformTree([]))
9+
})
10+
11+
test('Test #02', () => {
12+
expect(transformTree([])).toEqual(null)
13+
})
14+
15+
test('Test #03', () => {
16+
expect(transformTree([1])).toEqual({
17+
value: 1,
18+
left: null,
19+
right: null
20+
})
21+
})
22+
23+
test('Test #04', () => {
24+
expect(transformTree([1, 2, 3])).toEqual({
25+
value: 1,
26+
left: {
27+
value: 2,
28+
left: null,
29+
right: null
30+
},
31+
right: {
32+
value: 3,
33+
left: null,
34+
right: null
35+
}
36+
})
37+
})
38+
39+
test('Test #05', () => {
40+
expect(transformTree([1, 2, 3, 4, 5])).toEqual({
41+
value: 1,
42+
left: {
43+
value: 2,
44+
left: {
45+
value: 4,
46+
left: null,
47+
right: null
48+
},
49+
right: {
50+
value: 5,
51+
left: null,
52+
right: null
53+
}
54+
},
55+
right: {
56+
value: 3,
57+
left: null,
58+
right: null
59+
}
60+
})
61+
})
62+
63+
test('Test #06', () => {
64+
expect(transformTree([1, 2, 3, 4, 5, 6, 7])).toEqual({
65+
value: 1,
66+
left: {
67+
value: 2,
68+
left: {
69+
value: 4,
70+
left: null,
71+
right: null
72+
},
73+
right: {
74+
value: 5,
75+
left: null,
76+
right: null
77+
}
78+
},
79+
right: {
80+
value: 3,
81+
left: {
82+
value: 6,
83+
left: null,
84+
right: null
85+
},
86+
right: {
87+
value: 7,
88+
left: null,
89+
right: null
90+
}
91+
}
92+
})
93+
})
94+
95+
test('Test #07', () => {
96+
expect(transformTree([17, 0, null, null, 1])).toEqual({
97+
value: 17,
98+
left: {
99+
value: 0,
100+
left: null,
101+
right: {
102+
value: 1,
103+
left: null,
104+
right: null
105+
}
106+
},
107+
right: null
108+
})
109+
})
110+
111+
test('Test #08', () => {
112+
expect(transformTree([3, 1, 0, 8, 12, null, 1])).toEqual({
113+
value: 3,
114+
left: {
115+
value: 1,
116+
left: {
117+
value: 8,
118+
left: null,
119+
right: null
120+
},
121+
right: {
122+
value: 12,
123+
left: null,
124+
right: null
125+
}
126+
},
127+
right: {
128+
value: 0,
129+
left: null,
130+
right: {
131+
value: 1,
132+
left: null,
133+
right: null
134+
}
135+
}
136+
})
137+
})
138+
139+
test('Test #09', () => {
140+
expect(transformTree([2, 7, 5, null, 6, null, 9, null, null, 1, 11, null, null, null, 10])).toEqual({
141+
value: 2,
142+
left: {
143+
value: 7,
144+
left: null,
145+
right: {
146+
value: 6,
147+
left: {
148+
value: 1,
149+
left: null,
150+
right: null
151+
},
152+
right: {
153+
value: 11,
154+
left: null,
155+
right: null
156+
}
157+
}
158+
},
159+
right: {
160+
value: 5,
161+
left: null,
162+
right: {
163+
value: 9,
164+
left: null,
165+
right: {
166+
value: 10,
167+
left: null,
168+
right: null
169+
}
170+
}
171+
}
172+
})
173+
})
174+
})

0 commit comments

Comments
 (0)