Skip to content

Commit 959ad39

Browse files
committed
🚂 added challenge 22: programming language
1 parent 4575f32 commit 959ad39

File tree

4 files changed

+103
-0
lines changed

4 files changed

+103
-0
lines changed

lib/rank.png

1.55 KB
Loading

readme.md

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ Para esta versión estaré usando TypeScript, en su versión 5.3.2.
4242
| 19 | [**💣 Enfrenta el sabotage**](https://adventjs.dev/es/challenges/2023/19) | 🟠 | [TS](./src/challenges/19.ts) | [SPEC](./src/tests/19.spec.ts) |
4343
| 20 | [**🏋️ Distribuye el peso**](https://adventjs.dev/es/challenges/2023/20) | 🔴 | [TS](./src/challenges/20.ts) | [SPEC](./src/tests/20.spec.ts) |
4444
| 21 | [**🪐 Mensaje Binario**](https://adventjs.dev/es/challenges/2023/21) | 🟠 | [TS](./src/challenges/21.ts) | [SPEC](./src/tests/21.spec.ts) |
45+
| 22 | [**🚂 Lenguaje de programación**](https://adventjs.dev/es/challenges/2023/22) | 🟠 | [TS](./src/challenges/22.ts) | [SPEC](./src/tests/22.spec.ts) |
4546

4647
## Herramientas utilizadas 🛠️
4748

src/challenges/22.ts

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
export function compile (code: string): number {
2+
let ans = 0
3+
let index = 0
4+
let last = -1
5+
let inside = null
6+
const instructions = code.split('')
7+
while (index < instructions.length) {
8+
const instruction = instructions[index]
9+
if (instruction === '+') {
10+
ans += 1 * +(inside === null || inside)
11+
} else if (instruction === '-') {
12+
ans -= 1 * +(inside === null || inside)
13+
} else if (instruction === '*') {
14+
ans *= 2 * +(inside === null || inside)
15+
} else if (instruction === '%') {
16+
last = [last, index][+(inside === null || inside)]
17+
} else if (instruction === '<') {
18+
instructions[index] = ' '
19+
index = [last - 1, index - 1][+(last === -1)]
20+
}
21+
const a = +(instruction === '¿')
22+
const b = +(ans > 0)
23+
const c = +(instruction === '?')
24+
inside = [inside, null, true, false][2 * a + c + (1 - b) * (1 - c) * (a + b)]
25+
index++
26+
}
27+
return ans
28+
}

src/tests/22.spec.ts

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import { test, expectTypeOf, expect, describe } from 'vitest'
2+
import { compile } from '../challenges/22'
3+
4+
describe('Challenge #22', () => {
5+
test('Test #01', () => {
6+
expectTypeOf(compile).returns.toEqualTypeOf(0)
7+
})
8+
9+
test('Test #02', () => {
10+
const received = compile('++*-')
11+
const expected = 3
12+
expect(received).toEqual(expected)
13+
})
14+
15+
test('Test #03', () => {
16+
const received = compile('++¿+?')
17+
const expected = 3
18+
expect(received).toEqual(expected)
19+
})
20+
21+
test('Test #04', () => {
22+
const received = compile('-+¿+?')
23+
const expected = 0
24+
expect(received).toEqual(expected)
25+
})
26+
27+
test('Test #05', () => {
28+
const received = compile('++*¿-?')
29+
const expected = 3
30+
expect(received).toEqual(expected)
31+
})
32+
33+
test('Test #06', () => {
34+
const received = compile('++%++<')
35+
const expected = 6
36+
expect(received).toEqual(expected)
37+
})
38+
39+
test('Test #07', () => {
40+
const received = compile('++%++<++¿*?')
41+
const expected = 16
42+
expect(received).toEqual(expected)
43+
})
44+
45+
test('Test #08', () => {
46+
const received = compile('++¿+?¿+?¿+?')
47+
const expected = 5
48+
expect(received).toEqual(expected)
49+
})
50+
51+
test('Test #09', () => {
52+
const received = compile('--¿+++?')
53+
const expected = -2
54+
expect(received).toEqual(expected)
55+
})
56+
57+
test('Test #10', () => {
58+
const received = compile('--¿+++?+++¿--?')
59+
const expected = -1
60+
expect(received).toEqual(expected)
61+
})
62+
63+
test('Test #11', () => {
64+
const received = compile('<%+¿++%++<?')
65+
const expected = 7
66+
expect(received).toEqual(expected)
67+
})
68+
69+
test('Test #12', () => {
70+
const received = compile('<<<<<<+<<<<<+%')
71+
const expected = 2
72+
expect(received).toEqual(expected)
73+
})
74+
})

0 commit comments

Comments
 (0)