Skip to content

Commit 1a88658

Browse files
committed
📖 added challenge 11
1 parent 7a0c62e commit 1a88658

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed

readme.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Advent JS version 2023 🎄
22

3+
> [!NOTE]
4+
> Si este repositorio llega a 16+ estrellas, estaré desarrollando una librería
5+
> de npm para resolver los retos del [AdventJS](https://adventjs.dev/) 2023.
6+
37
Soluciones bizarras a los retos del [AdventJS](https://adventjs.dev/) 2023.
48

59
El [AdventJS](https://adventjs.dev/) es un evento iniciativa de
@@ -25,6 +29,7 @@ Para esta versión estaré usando TypeScript, en su versión 5.3.2.
2529
| 08 | [**Ordenando el almacen**](https://adventjs.dev/es/challenges/2023/8) | 🟠 | [TS](./src/challenges/08.ts) | [SPEC](./src/tests/08.spec.ts) |
2630
| 09 | [**Alterna las luces**](https://adventjs.dev/es/challenges/2023/9) | 🟢 | [TS](./src/challenges/09.ts) | [SPEC](./src/tests/09.spec.ts) |
2731
| 10 | [**Crea tu propio árbol de navidad**](https://adventjs.dev/es/challenges/2023/10) | 🟢 | [TS](./src/challenges/10.ts) | [SPEC](./src/tests/10.spec.ts) |
32+
| 11 | [**Los elfos estudiosos**](https://adventjs.dev/es/challenges/2023/11) | 🟠 | [TS](./src/challenges/11.ts) | [SPEC](./src/tests/11.spec.ts) |
2833

2934
## Herramientas utilizadas 🛠️
3035

src/challenges/11.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
export function getIndexsForPalindrome (word: string): [number, number] | [] | null {
2+
let ans: [number, number] | [] | null = null
3+
const wordLength = word.length
4+
if ([...word].reverse().join('') === word) {
5+
ans = []
6+
} else {
7+
// if swapping chars i and j makes the word a palindrome, return [i, j]
8+
for (let i = 0; i < wordLength; i++) {
9+
for (let j = i + 1; j < wordLength; j++) {
10+
const wordArr = [...word]
11+
const temp = wordArr[i]
12+
wordArr[i] = wordArr[j]
13+
wordArr[j] = temp
14+
if (wordArr.join('') === wordArr.reverse().join('')) {
15+
ans = [i, j]
16+
break
17+
}
18+
}
19+
if (ans !== null) break
20+
}
21+
}
22+
return ans
23+
}

src/tests/11.spec.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { test, expectTypeOf, expect, describe } from 'vitest'
2+
import { getIndexsForPalindrome } from '../challenges/11'
3+
4+
describe('Challenge #11', () => {
5+
// test('Test #01', () => {
6+
// expectTypeOf(getIndexsForPalindrome).returns.toEqualTypeOf(typeForGetIndexsForPalindrome)
7+
// })
8+
9+
// Test: getIndexsForPalindrome('anna')
10+
test('Test #02', () => {
11+
expect(getIndexsForPalindrome('anna')).toEqual([])
12+
})
13+
14+
// Test: getIndexsForPalindrome('abab')
15+
test('Test #03', () => {
16+
expect(getIndexsForPalindrome('abab')).toEqual([0, 1])
17+
})
18+
19+
// Test: getIndexsForPalindrome('abac')
20+
test('Test #04', () => {
21+
expect(getIndexsForPalindrome('abac')).toEqual(null)
22+
})
23+
24+
// Test: getIndexsForPalindrome('aaaaaaaa')
25+
test('Test #05', () => {
26+
expect(getIndexsForPalindrome('aaaaaaaa')).toEqual([])
27+
})
28+
29+
// Test: getIndexsForPalindrome('aaababa')
30+
test('Test #06', () => {
31+
expect(getIndexsForPalindrome('aaababa')).toEqual([1, 3])
32+
})
33+
34+
// Test: getIndexsForPalindrome('caababa')
35+
test('Test #07', () => {
36+
expect(getIndexsForPalindrome('caababa')).toEqual(null)
37+
})
38+
39+
// Test: getIndexsForPalindrome('rotavator')
40+
test('Test #08', () => {
41+
expect(getIndexsForPalindrome('rotavator')).toEqual([])
42+
})
43+
44+
// Test: getIndexsForPalindrome('rotaratov')
45+
test('Test #09', () => {
46+
expect(getIndexsForPalindrome('rotaratov')).toEqual([4, 8])
47+
})
48+
49+
// Test: getIndexsForPalindrome('saippuakivikauppias')
50+
test('Test #10', () => {
51+
expect(getIndexsForPalindrome('saippuakivikauppias')).toEqual([])
52+
})
53+
})

0 commit comments

Comments
 (0)