- Ejecutores
-
Aprender
Aprender Python Ejemplos ejecutables, NumPy, pandas y más Aprender IARedes neuronales, ML y LLM desde cero Aprender C y C++ Punteros, memoria, STL y C++ moderno Aprender C#Fundamentos, POO, LINQ, async y ejercicios de .NET Aprender MatplotlibGráficos de líneas, barras, dispersión y sectores con visualizadores Algoritmos en Python Búsqueda, ordenación, recursión y visualizadores O(n) Algoritmos en C y C++ Compara implementaciones en C y C++ Programación para niños ¡Aprende a programar jugando!
- RetosNuevo
- Para docentesNuevo
- Actualizaciones
- Invítame a un café
La iteración de valores resuelve un proceso de decisión de Markov: encuentra V(s), la mejor recompensa total descontada que se puede obtener empezando en el estado s.
Aquí las transiciones son deterministas. En el estado s, la acción a da la recompensa rewards[s][a] y lleva al estado next_states[s][a], donde -1 significa que el episodio termina. Empieza con V(s) = 0 para cada estado y repite iterations veces, calculando cada valor nuevo a partir del barrido anterior:
V_new(s) = máximo sobre a de ( rewards[s][a] + gamma × V(next_states[s][a]) )
donde el término gamma × V es 0 cuando el siguiente estado es -1.
Implementa value_iteration(next_states, rewards, gamma, iterations).
Entrada
next_states: Para cada estado, el siguiente estado de cada una de sus acciones (-1 termina el episodio). Los estados pueden tener distinto número de acciones.
rewards: La recompensa de cada acción, con la misma forma que next_states.
gamma: El factor de descuento.
iterations: El número de barridos.
Salida
Devuelve V tras el último barrido, un valor por estado.
Restricciones
1 ≤ estados ≤ 200, 1 ≤ acciones por estado ≤ 10, 0 ≤ iterations ≤ 1.000
-100 ≤ cada recompensa ≤ 100, 0 ≤ gamma ≤ 1
Ejemplos
Ejemplo 1
Entrada:
next_states = [
[0, 1],
[0, 2],
[-1]
]
rewards = [
[0.0, 0.0],
[0.0, 0.0],
[10.0]
]
gamma = 0.9
iterations = 3
Salida esperada:
[8.1, 9.0, 10.0]
Explicación
Barrido 1: solo el estado 2 puede obtener una recompensa, V = [0, 0, 10]. Barrido 2: el estado 1 va a la derecha hasta él, 0.9 × 10 = 9, V = [0, 9, 10]. Barrido 3: el estado 0 obtiene 0.9 × 9 = 8.1. Resultado: [8.1, 9, 10].
Ejemplo 2
Entrada:
next_states = [
[1, 0],
[0, 1]
]
rewards = [
[1.0, 2.0],
[3.0, 0.0]
]
gamma = 0.0
iterations = 5
Salida esperada:
[2.0, 3.0]
Explicación
Con gamma = 0 el futuro no cuenta, así que el valor de cada estado es simplemente su mejor recompensa inmediata: [2, 3].
Referencias
-
Ejemplo 1 Sin ejecutarEntrada:
next_states = [ [0, 1], [0, 2], [-1] ] rewards = [ [0.0, 0.0], [0.0, 0.0], [10.0] ] gamma = 0.9 iterations = 3Salida esperada:[8.1, 9.0, 10.0]Tu salida -
Ejemplo 2 Sin ejecutarEntrada:
next_states = [ [1, 0], [0, 1] ] rewards = [ [1.0, 2.0], [3.0, 0.0] ] gamma = 0.0 iterations = 5Salida esperada:[2.0, 3.0]Tu salida
4 pruebas ocultas también se ejecutan al enviar. Si tu código falla alguna, verás esa prueba. Resuelve el reto para verlas todas.
Online JavaScript Runner
Write, run, and debug JavaScript or Node.js online in a full-featured browser IDE. Work with multiple files and packages, save your workspace, and collaborate in real time.
🚀 339,661 ejecuciones totales (665 este mes)
Practica JavaScript con desafíos de código
Resuelve problemas prácticos en este editor: ejecuta las pruebas de ejemplo, envía tu solución y recibe una revisión de código por IA.
⚡ Acerca de este ejecutor de JavaScript (Node.js) en línea
El Ejecutor de JavaScript de CodeUtility te permite escribir y ejecutar código JavaScript moderno directamente en tu navegador - al instante y sin ninguna configuración. Utiliza entornos reales de Node.js para ejecutar tu código de forma segura en un contenedor aislado, con soporte para las versiones 16, 18 y 20.
Esta herramienta es perfecta para probar fragmentos de Node.js, explorar la sintaxis de ES6+ o aprender conceptos básicos de programación en JavaScript como bucles, funciones, arrays, promesas y el comportamiento de async/await.
También puedes usarla para validar algoritmos, depurar scripts pequeños o experimentar con lógica en tiempo de ejecución sin instalar Node localmente. Es ideal para estudiantes, desarrolladores backend o cualquiera que necesite una forma rápida y basada en el navegador para ejecutar código JavaScript.
Más que un ejecutor de código
Utiliza un editor de varios archivos, un terminal de ejecución aislado, bibliotecas específicas del entorno, espacios de trabajo persistentes, opciones para compartir y colaboración en tiempo real desde el mismo ejecutor.
¿Cómo se utiliza este ejecutor?
Elige un entorno de ejecución, abre o crea un archivo, escribe el código y selecciona Ejecutar. El resultado aparece en el terminal; los usuarios que han iniciado sesión pueden conservar archivos en un espacio de trabajo, instalar bibliotecas y colaborar mediante elementos compartidos.
- Selecciona una versión y edita el archivo actual o abre otro archivo del espacio de trabajo.
- Ejecuta el código, introduce datos en el terminal cuando se soliciten y revisa el historial de ejecuciones guardado.
- Utiliza bibliotecas, herramientas del espacio de trabajo, opciones para compartir y el chat cuando la tarea requiera más de un fragmento.
💡 Guía de conceptos básicos de Node.js para principiantes
1. Declaración de variables y constantes
Usa let o const para variables con alcance de bloque. const se utiliza para constantes.
let x = 10;
const PI = 3.14;
let name = "Alice";
let isActive = true;
2. Condicionales (if / switch)
Usa if, else if, else o switch para el flujo de control.
let x = 2;
if (x === 1) {
console.log("Uno");
} else if (x === 2) {
console.log("Dos");
} else {
console.log("Otro");
}
switch (x) {
case 1:
console.log("Uno");
break;
case 2:
console.log("Dos");
break;
default:
console.log("Otro");
}
3. Bucles
Usa for, while y forEach para iterar sobre datos.
for (let i = 0; i < 3; i++) {
console.log(i);
}
let n = 3;
while (n > 0) {
console.log(n);
n--;
}
4. Arrays
Usa arrays para almacenar listas ordenadas de valores. Accede a ellos con índices.
let fruits = ["manzana", "banana", "cereza"];
console.log(fruits[0]);
console.log(fruits.length);
5. Manipulación de arrays
Usa métodos como push, pop, slice y reverse.
fruits.push("kiwi");
fruits.pop();
console.log(fruits.slice(0, 2));
console.log(fruits.reverse());
let squares = [1, 2, 3, 4, 5].map(x => x * x);
console.log(squares);
6. Entrada/Salida por consola
Usa console.log para la salida y el módulo readline para la entrada.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("¿Cómo te llamas? ", name => {
console.log(`Hola, ${name}`);
rl.close();
});
7. Funciones
Las funciones pueden declararse o expresarse. Las funciones flecha se usan mucho en JavaScript moderno.
function greet(name) {
return `Hola, ${name}`;
}
const add = (a, b) => a + b;
console.log(greet("Alice"));
console.log(add(2, 3));
8. Objetos (Mapas)
Los objetos almacenan pares clave-valor. Son similares a diccionarios o mapas.
let person = { name: "Bob", age: 25 };
console.log(person.name);
console.log(person["age"]);
// Mapa de ES6
const map = new Map();
map.set("a", 1);
console.log(map.get("a"));
9. Manejo de excepciones
Usa try, catch y finally para manejar errores de forma segura.
try {
throw new Error("Algo salió mal");
} catch (e) {
console.log(e.message);
} finally {
console.log("Limpieza si hace falta");
}
10. E/S de archivos
Usa el módulo fs de Node.js para leer y escribir archivos.
const fs = require("fs");
fs.writeFileSync("test.txt", "Hola archivo");
const data = fs.readFileSync("test.txt", "utf8");
console.log(data);
11. Manipulación de cadenas
Usa métodos como trim(), toUpperCase(), replace() y split().
let text = " Hola Mundo ";
console.log(text.trim());
console.log(text.toUpperCase());
console.log(text.replace("Hola", "Buenas"));
console.log(text.split(" "));
12. Clases y objetos
ES6+ admite POO con la sintaxis de class.
class Person {
constructor(name) {
this.name = name;
}
greet() {
return `Hola, soy ${this.name}`;
}
}
const p = new Person("Alice");
console.log(p.greet());
13. Referencias
Los objetos y arrays en JavaScript se pasan por referencia.
function update(arr) {
arr.push("cambiado");
}
let data = ["original"];
update(data);
console.log(data); // ["original", "cambiado"]