Skip to content

Commit 0de7755

Browse files
committed
💣 added challenge 19: face the sabotage
1 parent a844096 commit 0de7755

File tree

4 files changed

+254
-0
lines changed

4 files changed

+254
-0
lines changed

lib/rank.png

496 Bytes
Loading

readme.md

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ Para esta versión estaré usando TypeScript, en su versión 5.3.2.
3939
| 16 | [**Viernes de deploy**](https://adventjs.dev/es/challenges/2023/16) | 🟢 | [TS](./src/challenges/16.ts) | [SPEC](./src/tests/16.spec.ts) |
4040
| 17 | [**Optimizando el alquiler**](https://adventjs.dev/es/challenges/2023/17) | 🟢 | [TS](./src/challenges/17.ts) | [SPEC](./src/tests/17.spec.ts) |
4141
| 18 | [**El reloj digital**](https://adventjs.dev/es/challenges/2023/18) | 🔴 | [TS](./src/challenges/18.ts) | [SPEC](./src/tests/18.spec.ts) |
42+
| 19 | [**Enfrenta el sabotage**](https://adventjs.dev/es/challenges/2023/19) | 🟠 | [TS](./src/challenges/19.ts) | [SPEC](./src/tests/19.spec.ts) |
4243

4344
## Herramientas utilizadas 🛠️
4445

src/challenges/19.ts

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
export function revealSabotage (store: string[][]): string[][] {
2+
const n = store.length
3+
const m = store[0].length
4+
const st = store
5+
for (let i = 0; i < n; ++i) {
6+
for (let j = 0; j < m; ++j) {
7+
const ij = st[i][j]
8+
const w = +(st[i - 1]?.[j - 1] === '*') + +(st[i - 1]?.[j] === '*')
9+
const y = +(st[i - 1]?.[j + 1] === '*') + +(st[i]?.[j - 1] === '*')
10+
const t = +(st[i]?.[j + 1] === '*') + +(st[i + 1]?.[j - 1] === '*')
11+
const k = +(st[i + 1]?.[j] === '*') + +(st[i + 1]?.[j + 1] === '*')
12+
const x = `${w + y + t + k}`
13+
st[i][j] = [ij, x][+(w + y + t + k > 0) * +(ij === ' ')]
14+
}
15+
}
16+
return store
17+
}

src/tests/19.spec.ts

+236
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
import { test, expectTypeOf, expect, describe } from 'vitest'
2+
import { revealSabotage } from '../challenges/19'
3+
4+
describe('Challenge #19', () => {
5+
test('Test #01', () => {
6+
expectTypeOf(revealSabotage).returns.toEqualTypeOf([])
7+
})
8+
9+
test('Test #02', () => {
10+
const received = revealSabotage([
11+
['*', ' ', ' ', ' '],
12+
[' ', ' ', '*', ' '],
13+
[' ', ' ', ' ', ' '],
14+
['*', ' ', ' ', ' ']
15+
])
16+
const expected = [
17+
[
18+
'*',
19+
'2',
20+
'1',
21+
'1'
22+
],
23+
[
24+
'1',
25+
'2',
26+
'*',
27+
'1'
28+
],
29+
[
30+
'1',
31+
'2',
32+
'1',
33+
'1'
34+
],
35+
[
36+
'*',
37+
'1',
38+
' ',
39+
' '
40+
]
41+
]
42+
expect(received).toEqual(expected)
43+
})
44+
45+
test('Test #03', () => {
46+
const received = revealSabotage([
47+
[' ', ' ', ' '],
48+
[' ', '*', ' '],
49+
[' ', ' ', ' ']
50+
])
51+
const expected = [
52+
[
53+
'1',
54+
'1',
55+
'1'
56+
],
57+
[
58+
'1',
59+
'*',
60+
'1'
61+
],
62+
[
63+
'1',
64+
'1',
65+
'1'
66+
]
67+
]
68+
expect(received).toEqual(expected)
69+
})
70+
71+
test('Test #04', () => {
72+
const received = revealSabotage([
73+
['*', ' ', ' '],
74+
[' ', '*', ' '],
75+
[' ', ' ', '*']
76+
])
77+
const expected = [
78+
[
79+
'*',
80+
'2',
81+
'1'
82+
],
83+
[
84+
'2',
85+
'*',
86+
'2'
87+
],
88+
[
89+
'1',
90+
'2',
91+
'*'
92+
]
93+
]
94+
expect(received).toEqual(expected)
95+
})
96+
97+
test('Test #05', () => {
98+
const received = revealSabotage([
99+
['*', ' ', ' '],
100+
[' ', ' ', ' '],
101+
[' ', ' ', ' ']
102+
])
103+
const expected = [
104+
[
105+
'*',
106+
'1',
107+
' '
108+
],
109+
[
110+
'1',
111+
'1',
112+
' '
113+
],
114+
[
115+
' ',
116+
' ',
117+
' '
118+
]
119+
]
120+
expect(received).toEqual(expected)
121+
})
122+
123+
test('Test #06', () => {
124+
const received = revealSabotage([
125+
['*', '*', '*'],
126+
['*', ' ', '*'],
127+
['*', '*', '*']
128+
])
129+
const expected = [
130+
[
131+
'*',
132+
'*',
133+
'*'
134+
],
135+
[
136+
'*',
137+
'8',
138+
'*'
139+
],
140+
[
141+
'*',
142+
'*',
143+
'*'
144+
]
145+
]
146+
expect(received).toEqual(expected)
147+
})
148+
149+
test('Test #07', () => {
150+
const received = revealSabotage([
151+
['*', ' ', '*']
152+
])
153+
const expected = [
154+
[
155+
'*',
156+
'2',
157+
'*'
158+
]
159+
]
160+
expect(received).toEqual(expected)
161+
})
162+
163+
test('Test #08', () => {
164+
const received = revealSabotage([
165+
['*', ' ', ' '],
166+
[' ', ' ', ' '],
167+
[' ', ' ', '*']
168+
])
169+
const expected = [
170+
[
171+
'*',
172+
'1',
173+
' '
174+
],
175+
[
176+
'1',
177+
'2',
178+
'1'
179+
],
180+
[
181+
' ',
182+
'1',
183+
'*'
184+
]
185+
]
186+
expect(received).toEqual(expected)
187+
})
188+
189+
test('Test #09', () => {
190+
const received = revealSabotage([
191+
['*', ' ', ' ', ' ', ' '],
192+
[' ', ' ', ' ', ' ', ' '],
193+
[' ', ' ', '*', ' ', ' '],
194+
[' ', ' ', ' ', ' ', ' '],
195+
[' ', ' ', ' ', ' ', '*']
196+
])
197+
const expected = [
198+
[
199+
'*',
200+
'1',
201+
' ',
202+
' ',
203+
' '
204+
],
205+
[
206+
'1',
207+
'2',
208+
'1',
209+
'1',
210+
' '
211+
],
212+
[
213+
' ',
214+
'1',
215+
'*',
216+
'1',
217+
' '
218+
],
219+
[
220+
' ',
221+
'1',
222+
'1',
223+
'2',
224+
'1'
225+
],
226+
[
227+
' ',
228+
' ',
229+
' ',
230+
'1',
231+
'*'
232+
]
233+
]
234+
expect(received).toEqual(expected)
235+
})
236+
})

0 commit comments

Comments
 (0)