Skip to content

Commit 89decf8

Browse files
Update README.md
1 parent efa232d commit 89decf8

1 file changed

Lines changed: 99 additions & 1 deletion

File tree

README.md

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Si llegamos a la derecha del todo y recibimos un **R**, volvemos al primer dígi
2929

3030
¡Date prisa! ¡No tenemos mucho tiempo!
3131

32-
```text
32+
```javascript
3333
const password = 'URDURUDRUDLLLLUUDDUDUDUDLLRRRR';
3434
const clave = '528934712834'.split('').map(Number);
3535
console.log(clave);
@@ -137,6 +137,104 @@ function truePassword(linesArray) {
137137
const result = truePassword(linesArray);
138138
console.log(result);
139139
```
140+
## Desafío 3: ¡Siguiendo la pista de la IA ΩMEGA!
141+
142+
La IA maligna ΩMEGA está causando problemas en el sistema de control de la empresa. Estamos siguiendo su rastro y necesitamos averiguar cuántos pasos ha tomado para llegar a la salida (ya sea por la izquierda o por la derecha).
143+
144+
ΩMEGA cuenta con una lista de instrucciones de salto. Cada instrucción indica el número de posiciones que debe moverse en esa misma lista.
145+
146+
- Número positivo: ΩMEGA avanza ese número de posiciones.
147+
- Número negativo: Retrocede ese número de posiciones.
148+
- Cero: Se queda en la misma posición (pero cuenta como movimiento).
149+
150+
Importante: Cada vez que ΩMEGA lee una instrucción, incrementa el valor de esa instrucción en 1 después de usarla.
151+
152+
- Si encuentra un 2, avanza 2 posiciones y luego esa instrucción se convierte en 3.
153+
- Si encuentra un 0, se queda en su posición y luego esa instrucción se convierte en 1.
154+
- Si encuentra un -3, retrocede 3 posiciones y luego esa instrucción se convierte en -2.
155+
156+
Voy a darte un ejemplo. Entre paréntesis te indicaré la instrucción actual en la que se encuentra ΩMEGA.
157+
158+
Lista de instrucciones: 1 2 4 1 -2
159+
160+
Inicio: (1) 2 4 1 -2 // → ΩMEGA empieza en la posición 0
161+
Paso 1: 2 (2) 4 1 -2 // → Avanza una posición y la instrucción se convierte en 2
162+
Paso 2: 2 3 4 (1) -2 // → Avanza 2 posiciones y la instrucción se convierte en 3
163+
Paso 3: 2 3 4 2 (-2) // → Avanza una posición y la instrucción se convierte en 2
164+
Paso 4: 2 3 (4) 2 -1 // → Retrocede dos posiciones y pasa a -1
165+
Paso 5: 2 3 4 2 -1 // → Avanza 4 posiciones y escapa
166+
Resultado: 5
167+
168+
Otro ejemplo con lista de instrucciones: 0 1 2 3 -1
169+
170+
Inicio: (0) 1 2 3 -1 // → ΩMEGA empieza en la posición 0
171+
Paso 1: (1) 1 2 3 -1 // → No avanza pero incrementa la instrucción en 1
172+
Paso 2: 2 (1) 2 3 -1 // → Avanza una posición y la instrucción se convierte en 2
173+
Paso 3: 2 2 (2) 3 -1 // → Avanza una posición y la instrucción se convierte en 2
174+
Paso 4: 2 2 3 3 (-1) // → Avanza dos posiciones y la instrucción se convierte en 3
175+
Paso 5: 2 2 3 (3) 0 // → Retrocede una posición y la instrucción se convierte en 0
176+
Paso 6: 2 2 3 4 0 // → Avanza tres posiciones y escapa
177+
Resultado: 6
178+
179+
Otro ejemplo saliendo por la izquierda: 1 -2 5
180+
181+
Inicio: (1) -2 5 // → ΩMEGA empieza en la posición 0
182+
Paso 1: 2 (-2) 5 // → Avanza una posición y la instrucción se convierte en 1
183+
Paso 2: 2 -1 5 // → Retrocede dos posiciones y sale por la izquierda
184+
Resultado: 2
185+
186+
¡Ten en cuenta que, si la lista empieza por un número negativo, entonces ΩMEGA saldrá por la izquierda en un sólo paso!
187+
188+
Accede a este `trace.txt`. Tiene una lista de los movimientos que realizó ΩMEGA separados por salto de línea. Necesito que calcules los pasos que necesita ΩMEGA para salir de cada instrucción por línea, que sumes todos los resultados y me digas el resultado final de pasos que necesita ΩMEGA en total y el resultado de la última línea, separado por guión.
189+
190+
Por ejemplo, si necesitó 99 pasos en total sumando los pasos de cada línea y para la instrucción de la última línea necesitó 13 pasos entonces la solución a enviar sería:
191+
192+
193+
### Código para resolver el desafío:
194+
195+
```javascript
196+
const fs = require('fs');
197+
198+
function countSteps(instructions) {
199+
let steps = 0;
200+
let position = 0;
201+
let instructionsCopy = [...instructions];
202+
203+
while (position >= 0 && position < instructionsCopy.length) {
204+
let move = instructionsCopy[position];
205+
instructionsCopy[position]++;
206+
position += move;
207+
steps++;
208+
}
209+
210+
return steps;
211+
}
212+
213+
function processAllInstructions(filePath) {
214+
const logContent = fs.readFileSync(filePath, 'utf8');
215+
const lines = logContent.split('\n');
216+
217+
let totalSteps = 0;
218+
let lastLineSteps = 0;
219+
220+
lines.forEach((line, index) => {
221+
const instructions = line.split(' ').map(Number);
222+
const steps = countSteps(instructions);
223+
totalSteps += steps;
224+
225+
if (index === lines.length - 1) {
226+
lastLineSteps = steps;
227+
}
228+
});
229+
230+
return `submit ${totalSteps}-${lastLineSteps}`;
231+
}
232+
233+
const result = processAllInstructions('trace.txt');
234+
console.log(result);
235+
```
236+
237+
Este código procesa el archivo `trace.txt` y calcula los pasos necesarios para que ΩMEGA escape de cada línea. Al final, muestra el total de pasos y el resultado de la última línea.
140238

141239

142240

0 commit comments

Comments
 (0)