Skip to content

Commit 4013801

Browse files
committed
✨ add challenge-09 solution
1 parent e228204 commit 4013801

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed

2023/09-alterna-las-luces/README.md

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Reto 09: Alterna las luces
2+
3+
## Problema
4+
5+
Están encendiendo las **luces de Navidad** 🎄 en la ciudad y, como cada año, ¡hay que arreglarlas!
6+
7+
Las luces son de dos colores: 🔴 y 🟢 . Para que el efecto sea el adecuado, **siempre deben estar alternadas.** Es decir, si la primera luz es roja, la segunda debe ser verde, la tercera roja, la cuarta verde, etc.
8+
9+
Nos han pedido que escribamos una función adjustLights que, dado un array de strings con el color de cada luz (representados con los emojis 🔴 para el rojo y 🟢 para el verde), devuelva el **número mínimo** de luces que hay que cambiar para que estén los colores alternos.
10+
11+
```js
12+
adjustLights(['🟢', '🔴', '🟢', '🟢', '🟢'])
13+
// -> 1 (cambias la cuarta luz a 🔴)
14+
15+
adjustLights(['🔴', '🔴', '🟢', '🟢', '🔴'])
16+
// -> 2 (cambias la segunda luz a 🟢 y la tercera a 🔴)
17+
18+
adjustLights(['🟢', '🔴', '🟢', '🔴', '🟢'])
19+
// -> 0 (ya están alternadas)
20+
21+
adjustLights(['🔴', '🔴', '🔴'])
22+
// -> 1 (cambias la segunda luz a 🟢)
23+
```
24+
25+
## Mi solución
26+
27+
```js
28+
const adjustLights = (lights) => {
29+
const patron = ['🟢', '🔴'];
30+
let changes = 0;
31+
const lightsLength = lights.length;
32+
for (let i = 0; i < lightsLength; i++) {
33+
changes += lights[i] === patron[i % 2];
34+
}
35+
return Math.min(changes, lights.length - changes);
36+
};
37+
```
38+
39+
## Explicación de mi solución
40+
41+
1. Se crea un array con el patrón de luces alternadas.
42+
2. Se crea una variable para contar los cambios de luces.
43+
3. Se recorre el array de luces y se compara cada luz con el patrón de luces alternadas.
44+
4. Si la luz es igual al patrón, se suma 1 a la variable de cambios.
45+
5. Se retorna el mínimo entre los cambios y la longitud del array menos los cambios.

2023/09-alterna-las-luces/index.js

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const adjustLights = (lights) => {
2+
const patron = ['🟢', '🔴'];
3+
let changes = 0;
4+
const lightsLength = lights.length;
5+
for (let i = 0; i < lightsLength; i++) {
6+
changes += lights[i] === patron[i % 2];
7+
}
8+
return Math.min(changes, lights.length - changes);
9+
};
10+
11+
module.exports = adjustLights;
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
const adjustLights = require('./index');
2+
3+
describe('09 => Alterna las luces', () => {
4+
const testCases = [
5+
{
6+
input: ['🟢', '🔴', '🟢', '🟢', '🟢'],
7+
output: 1,
8+
},
9+
{
10+
input: ['🔴', '🔴', '🟢', '🟢', '🔴'],
11+
output: 2,
12+
},
13+
{
14+
input: ['🟢', '🔴', '🟢', '🔴', '🟢'],
15+
output: 0,
16+
},
17+
{
18+
input: ['🔴', '🔴', '🔴'],
19+
output: 1,
20+
},
21+
];
22+
23+
it('should return number type', () => {
24+
expect(typeof adjustLights(['🟢', '🔴', '🟢', '🟢', '🟢'])).toBe('number');
25+
});
26+
27+
it.each(testCases)('should return $output', (testCase) => {
28+
expect(adjustLights(testCase.input)).toBe(testCase.output);
29+
});
30+
});

0 commit comments

Comments
 (0)