Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 25 additions & 10 deletions 2022/01-arregla-twitter/solution.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,34 @@
/* eslint-disable implicit-arrow-linebreak */
/* eslint-disable operator-linebreak */
const fs = require('fs');

const obtenerUsuariosIncorrectos = (fileName) => {
let results = [];
try {
const text = fs.readFileSync(`./2022/01-arregla-twitter/${fileName}`, 'utf8');
const arr = text.toString().split(/\n\s*\n/).map((el) => el.replace(/\n/g, ' '));
results = arr.filter((data) => data.includes('usr:')
&& data.includes('eme:')
&& data.includes('psw:')
&& data.includes('age:')
&& data.includes('loc:')
&& data.includes('fll:'));
return `submit: ${results.length}${results.at(-1)}`;
const text = fs.readFileSync(
`./2022/01-arregla-twitter/${fileName}`,
'utf8',
);
const arr = text
.toString()
.split(/\n\s*\n/)
.map((el) => el.replace(/\n/g, ' '));
results = arr.filter(
(data) =>
data.includes('usr:') &&
data.includes('eme:') &&
data.includes('psw:') &&
data.includes('age:') &&
data.includes('loc:') &&
data.includes('fll:'),
);
return `submit: ${results.length}${results
.at(-1)
.replace(/\s/g, ' ')
.replace(/\s{2,}/g, ' ')
.trim()}`;
} catch (e) {
return `Error: ${e.message}`;
return `Error: when reading file ${fileName}`;
}
};

Expand Down
16 changes: 10 additions & 6 deletions 2022/01-arregla-twitter/solution.test.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
/* eslint-disable operator-linebreak */
const obtenerUsuariosIncorrectos = require('./solution');

describe('obtenerUsuariosIncorrectos', () => {
const expected = 'submit: 156usr:@giroz age:22 src:12 icon:avatar.png terminal:yes pages:server '
+ 'pages:blog blog:about loc:tierra psw:aaa fll:222 eme:giroz@gmail.com';
// eslint-disable-next-line operator-linebreak
const expected =
'submit: 156usr:@giroz age:22 src:12 icon:avatar.png terminal:yes pages:server ' +
'pages:blog blog:about loc:tierra psw:aaa fll:222 eme:giroz@gmail.com';

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

const expectedError = 'Error: ENOENT: no such file or directory, open \'./2022/01-arregla-twitter/users2.txt\'';

it(`should return "${expectedError}"`, () => {
expect(obtenerUsuariosIncorrectos('users2.txt')).toBe(expectedError);
it("should return no such file o directory error'", () => {
const FILE_NAME = 'users2.txt';
expect(obtenerUsuariosIncorrectos(FILE_NAME)).toBe(
`Error: when reading file ${FILE_NAME}`,
);
});
});
32 changes: 32 additions & 0 deletions 2024/01-consigue-acceso-a-la-terminal/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Desafío 1: ¡Consigue acceso a la terminal!

## Problema

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.

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.

**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.**

Siempre empezamos del primer número de la izquierda. Los movimientos son:

- R (Right) movernos al siguiente dígito
- L (Left) desplazarnos al dígito anterior
- U (Up) incrementar ese dígito
- D (Down) decrementar el dígito actual

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.

¿Lo entiendes? ¡Es muy importante que lo entiendas! Mira, te dejo unos ejemplos:

```ttxt
000 URURD -> 119
1111 UUURUUU -> 4411
9999 LULULULD -> 8000
```

¿Lo captas? Vale, pues para desbloquear la terminal debes enviar el número al ejecutar esta combinación:

```txt
528934712834 URDURUDRUDLLLLUUDDUDUDUDLLRRRR
```
21 changes: 21 additions & 0 deletions 2024/01-consigue-acceso-a-la-terminal/solution.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/* eslint-disable implicit-arrow-linebreak */
const processCombination = (start, moves) => {
const digits = Array.from(start, Number);
let positionInitial = 0;
const totalDigits = digits.length;

const actions = {
U: () => (digits[positionInitial] = (digits[positionInitial] + 1) % 10),
D: () =>
(digits[positionInitial] = (digits[positionInitial] - 1 + 10) % 10),
R: () => (positionInitial = (positionInitial + 1) % totalDigits),
L: () =>
(positionInitial = (positionInitial - 1 + totalDigits) % totalDigits),
};

[...moves].forEach((move) => actions[move]());

return digits.join('');
};

module.exports = processCombination;
26 changes: 26 additions & 0 deletions 2024/01-consigue-acceso-a-la-terminal/solution.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
const processCombination = require('./solution');

describe('2024 | 01-consigue-acceso-a-la-terminal', () => {
const testCases = [
{
input: ['000', 'URURD'],
output: '119',
},
{
input: ['1111', 'UUURUUU'],
output: '4411',
},
{
input: ['9999', 'LULULULD'],
output: '8000',
},
{
input: ['528934712834', 'URDURUDRUDLLLLUUDDUDUDUDLLRRRR'],
output: '628934712834',
},
];

it.each(testCases)('should return $output', ({ input, output }) => {
expect(processCombination(...input)).toBe(output);
});
});
20 changes: 17 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
<div align="center">
<img alt="codember 2022" src="https://res.cloudinary.com/dfeujtobk/image/upload/v1671160716/Challenges/codember_foznhx.png" width="1200" />
<img
alt="codember 2024"
src="https://res.cloudinary.com/dfeujtobk/image/upload/v1731961764/Challenges/mg5z3j3rlhhqws4ktp3p.png"
width="1200" />
<br />
<br />

Expand Down Expand Up @@ -37,11 +40,22 @@ npm run test
# run specific test
npm run test 'year'/'folder-name'/solution.test.js
```
## 🎯 2023 Challenges

## 🎯 2024 Challenges

<details open>
<summary>Show / Hide</summary>

| # | Challenge |Status | My Solution |
| :-: | ----------------------------------------------------------------- |:----: | :------------------------------------------------------------------------------------------------------: |
| 01 | [!Consigue acceso a la terminal!](https://codember.dev) | ✅ | [here](./2024/01-consigue-acceso-a-la-terminal/solution.js) |
</details>

## 🎯 2023 Challenges

<details hidde>
<summary>Show / Hide</summary>

| # | Challenge |Status | My Solution |
| :-: | ----------------------------------------------------------------- |:----: | :------------------------------------------------------------------------------------------------------: |
| 01 | [El Reto](https://codember.dev) |✅ | [here](https://github.com/marcode24/codember-solutions/tree/main/2023/01-el-reto) |
Expand All @@ -51,7 +65,7 @@ npm run test 'year'/'folder-name'/solution.test.js

## 🎯 2022 Challenges

<details open>
<details hidde>
<summary>Show / Hide</summary>

| # | Challenge |Status | My Solution |
Expand Down
Loading
Loading