Skip to content

Commit 1e3ca69

Browse files
committed
↔️ added challenge 15
1 parent 75c6a85 commit 1e3ca69

File tree

3 files changed

+98
-0
lines changed

3 files changed

+98
-0
lines changed

readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ Para esta versión estaré usando TypeScript, en su versión 5.3.2.
3333
| 12 | [**Es una copia válida?**](https://adventjs.dev/es/challenges/2023/12) | 🟠 | [TS](./src/challenges/12.ts) | [SPEC](./src/tests/12.spec.ts) |
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) |
36+
| 15 | [**Robot autónomo**](https://adventjs.dev/es/challenges/2023/15) | 🟠 | [TS](./src/challenges/15.ts) | [SPEC](./src/tests/15.spec.ts) |
3637

3738
## Herramientas utilizadas 🛠️
3839

src/challenges/15.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export function autonomousDrive (store: string[], movements: string[]): string[] {
2+
let row = store.findIndex(_ => _.includes('!'))
3+
let col = store[row].indexOf('!')
4+
store[row] = store[row].replace('!', '.')
5+
for (const mv of movements) {
6+
col += +(store[row][col + 1] === '.') * +(mv === 'R')
7+
col -= +(store[row][col - 1] === '.') * +(mv === 'L')
8+
row += +(store.at(row + 1)?.at(col) === '.') * +(mv === 'D')
9+
row -= +(store.at(row - 1)?.at(col) === '.') * +(mv === 'U')
10+
}
11+
const str = store[row]
12+
store[row] = str.substring(0, col) + '!' + str.substring(col + 1)
13+
return store
14+
}

src/tests/15.spec.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import { test, expectTypeOf, expect, describe } from 'vitest'
2+
import { autonomousDrive } from '../challenges/15'
3+
4+
describe('Challenge #15', () => {
5+
test('Test #01', () => {
6+
expectTypeOf(autonomousDrive).returns.toEqualTypeOf(['undefined'])
7+
})
8+
9+
test('Test #02', () => {
10+
const received = autonomousDrive(['..!....'], ['R', 'L'])
11+
const expected = [
12+
'..!....'
13+
]
14+
expect(received).toEqual(expected)
15+
})
16+
17+
test('Test #03', () => {
18+
const received = autonomousDrive(['!..', '***'], ['U', 'L'])
19+
const expected = [
20+
'!..',
21+
'***'
22+
]
23+
expect(received).toEqual(expected)
24+
})
25+
26+
test('Test #04', () => {
27+
const received = autonomousDrive([
28+
'..!....',
29+
'......*'
30+
], ['R', 'D', 'L'])
31+
const expected = [
32+
'.......',
33+
'..!...*'
34+
]
35+
expect(received).toEqual(expected)
36+
})
37+
38+
test('Test #05', () => {
39+
const received = autonomousDrive([
40+
'*..!..*',
41+
'*.....*'
42+
], ['R', 'R', 'R', 'D', 'D'])
43+
const expected = [
44+
'*.....*',
45+
'*....!*'
46+
]
47+
expect(received).toEqual(expected)
48+
})
49+
50+
test('Test #06', () => {
51+
const received = autonomousDrive(['***', '.!.', '***'], ['D', 'U', 'R', 'R', 'R'])
52+
const expected = [
53+
'***',
54+
'..!',
55+
'***'
56+
]
57+
expect(received).toEqual(expected)
58+
})
59+
60+
test('Test #07', () => {
61+
const received = autonomousDrive(['***', '*!*', '***'], ['D', 'U', 'R', 'L'])
62+
const expected = [
63+
'***',
64+
'*!*',
65+
'***'
66+
]
67+
expect(received).toEqual(expected)
68+
})
69+
70+
test('Test #08', () => {
71+
const received = autonomousDrive([
72+
'.**.*.*.',
73+
'.***....',
74+
'..!.....'
75+
], ['D', 'U', 'R', 'R', 'R'])
76+
const expected = [
77+
'.**.*.*.',
78+
'.***....',
79+
'.....!..'
80+
]
81+
expect(received).toEqual(expected)
82+
})
83+
})

0 commit comments

Comments
 (0)