Skip to content

Commit 9b09e0d

Browse files
authored
Merge pull request #9 from marcode24/2024-01
✨ Add challenge-01 solution
2 parents 5f5c903 + c81bf1b commit 9b09e0d

File tree

8 files changed

+383
-174
lines changed

8 files changed

+383
-174
lines changed

2022/01-arregla-twitter/solution.js

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,34 @@
1+
/* eslint-disable implicit-arrow-linebreak */
2+
/* eslint-disable operator-linebreak */
13
const fs = require('fs');
24

35
const obtenerUsuariosIncorrectos = (fileName) => {
46
let results = [];
57
try {
6-
const text = fs.readFileSync(`./2022/01-arregla-twitter/${fileName}`, 'utf8');
7-
const arr = text.toString().split(/\n\s*\n/).map((el) => el.replace(/\n/g, ' '));
8-
results = arr.filter((data) => data.includes('usr:')
9-
&& data.includes('eme:')
10-
&& data.includes('psw:')
11-
&& data.includes('age:')
12-
&& data.includes('loc:')
13-
&& data.includes('fll:'));
14-
return `submit: ${results.length}${results.at(-1)}`;
8+
const text = fs.readFileSync(
9+
`./2022/01-arregla-twitter/${fileName}`,
10+
'utf8',
11+
);
12+
const arr = text
13+
.toString()
14+
.split(/\n\s*\n/)
15+
.map((el) => el.replace(/\n/g, ' '));
16+
results = arr.filter(
17+
(data) =>
18+
data.includes('usr:') &&
19+
data.includes('eme:') &&
20+
data.includes('psw:') &&
21+
data.includes('age:') &&
22+
data.includes('loc:') &&
23+
data.includes('fll:'),
24+
);
25+
return `submit: ${results.length}${results
26+
.at(-1)
27+
.replace(/\s/g, ' ')
28+
.replace(/\s{2,}/g, ' ')
29+
.trim()}`;
1530
} catch (e) {
16-
return `Error: ${e.message}`;
31+
return `Error: when reading file ${fileName}`;
1732
}
1833
};
1934

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
1+
/* eslint-disable operator-linebreak */
12
const obtenerUsuariosIncorrectos = require('./solution');
23

34
describe('obtenerUsuariosIncorrectos', () => {
4-
const expected = 'submit: 156usr:@giroz age:22 src:12 icon:avatar.png terminal:yes pages:server '
5-
+ 'pages:blog blog:about loc:tierra psw:aaa fll:222 eme:[email protected]';
5+
// eslint-disable-next-line operator-linebreak
6+
const expected =
7+
'submit: 156usr:@giroz age:22 src:12 icon:avatar.png terminal:yes pages:server ' +
8+
'pages:blog blog:about loc:tierra psw:aaa fll:222 eme:[email protected]';
69

710
it(`should return "${expected}"`, () => {
811
expect(obtenerUsuariosIncorrectos('users.txt')).toBe(expected);
912
});
1013

11-
const expectedError = 'Error: ENOENT: no such file or directory, open \'./2022/01-arregla-twitter/users2.txt\'';
12-
13-
it(`should return "${expectedError}"`, () => {
14-
expect(obtenerUsuariosIncorrectos('users2.txt')).toBe(expectedError);
14+
it("should return no such file o directory error'", () => {
15+
const FILE_NAME = 'users2.txt';
16+
expect(obtenerUsuariosIncorrectos(FILE_NAME)).toBe(
17+
`Error: when reading file ${FILE_NAME}`,
18+
);
1519
});
1620
});
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Desafío 1: ¡Consigue acceso a la terminal!
2+
3+
## Problema
4+
5+
Estamos en problemas. La IA ΩMEGA está descontrolada. Por suerte, he conseguido añadir una contraseña para evitar que acceda a esta terminal. El sistema no es difícil, pero nos debería dar el tiempo suficiente.
6+
7+
Te voy a dar una lista de números y, al lado, los movimientos que debes hacer en estos números. Imagina los candados numéricos esos que van con combinaciones.
8+
9+
**El número de la izquierda es la combinación inicial y las cadenas de texto de la derecha son los movimientos que debes hacer.**
10+
11+
Siempre empezamos del primer número de la izquierda. Los movimientos son:
12+
13+
- R (Right) movernos al siguiente dígito
14+
- L (Left) desplazarnos al dígito anterior
15+
- U (Up) incrementar ese dígito
16+
- D (Down) decrementar el dígito actual
17+
18+
Si llegamos a la derecha del todo y recibimos un R, volvemos al primer dígito. Si recibimos L y estamos en el primero, vamos al último. En el caso de que el dígito actual sea 9 y recibamos una U, pasará a 0. Y si es D y ese dígito es 0, pasará a ser 9.
19+
20+
¿Lo entiendes? ¡Es muy importante que lo entiendas! Mira, te dejo unos ejemplos:
21+
22+
```ttxt
23+
000 URURD -> 119
24+
1111 UUURUUU -> 4411
25+
9999 LULULULD -> 8000
26+
```
27+
28+
¿Lo captas? Vale, pues para desbloquear la terminal debes enviar el número al ejecutar esta combinación:
29+
30+
```txt
31+
528934712834 URDURUDRUDLLLLUUDDUDUDUDLLRRRR
32+
```
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/* eslint-disable implicit-arrow-linebreak */
2+
const processCombination = (start, moves) => {
3+
const digits = Array.from(start, Number);
4+
let positionInitial = 0;
5+
const totalDigits = digits.length;
6+
7+
const actions = {
8+
U: () => (digits[positionInitial] = (digits[positionInitial] + 1) % 10),
9+
D: () =>
10+
(digits[positionInitial] = (digits[positionInitial] - 1 + 10) % 10),
11+
R: () => (positionInitial = (positionInitial + 1) % totalDigits),
12+
L: () =>
13+
(positionInitial = (positionInitial - 1 + totalDigits) % totalDigits),
14+
};
15+
16+
[...moves].forEach((move) => actions[move]());
17+
18+
return digits.join('');
19+
};
20+
21+
module.exports = processCombination;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
const processCombination = require('./solution');
2+
3+
describe('2024 | 01-consigue-acceso-a-la-terminal', () => {
4+
const testCases = [
5+
{
6+
input: ['000', 'URURD'],
7+
output: '119',
8+
},
9+
{
10+
input: ['1111', 'UUURUUU'],
11+
output: '4411',
12+
},
13+
{
14+
input: ['9999', 'LULULULD'],
15+
output: '8000',
16+
},
17+
{
18+
input: ['528934712834', 'URDURUDRUDLLLLUUDDUDUDUDLLRRRR'],
19+
output: '628934712834',
20+
},
21+
];
22+
23+
it.each(testCases)('should return $output', ({ input, output }) => {
24+
expect(processCombination(...input)).toBe(output);
25+
});
26+
});

README.md

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
<div align="center">
2-
<img alt="codember 2022" src="https://res.cloudinary.com/dfeujtobk/image/upload/v1671160716/Challenges/codember_foznhx.png" width="1200" />
2+
<img
3+
alt="codember 2024"
4+
src="https://res.cloudinary.com/dfeujtobk/image/upload/v1731961764/Challenges/mg5z3j3rlhhqws4ktp3p.png"
5+
width="1200" />
36
<br />
47
<br />
58

@@ -37,11 +40,22 @@ npm run test
3740
# run specific test
3841
npm run test 'year'/'folder-name'/solution.test.js
3942
```
40-
## 🎯 2023 Challenges
43+
44+
## 🎯 2024 Challenges
4145

4246
<details open>
4347
<summary>Show / Hide</summary>
4448

49+
| # | Challenge |Status | My Solution |
50+
| :-: | ----------------------------------------------------------------- |:----: | :------------------------------------------------------------------------------------------------------: |
51+
| 01 | [!Consigue acceso a la terminal!](https://codember.dev) || [here](./2024/01-consigue-acceso-a-la-terminal/solution.js) |
52+
</details>
53+
54+
## 🎯 2023 Challenges
55+
56+
<details hidde>
57+
<summary>Show / Hide</summary>
58+
4559
| # | Challenge |Status | My Solution |
4660
| :-: | ----------------------------------------------------------------- |:----: | :------------------------------------------------------------------------------------------------------: |
4761
| 01 | [El Reto](https://codember.dev) || [here](https://github.com/marcode24/codember-solutions/tree/main/2023/01-el-reto) |
@@ -51,7 +65,7 @@ npm run test 'year'/'folder-name'/solution.test.js
5165

5266
## 🎯 2022 Challenges
5367

54-
<details open>
68+
<details hidde>
5569
<summary>Show / Hide</summary>
5670

5771
| # | Challenge |Status | My Solution |

0 commit comments

Comments
 (0)