Files
code/web/js/swe-tasks.js
elffuss-bot 42a4a9a67c Stand-in import of elffuss/code
One parentless commit with only the files that the open seed tasks touch and the modules they import.
The full squashed import (SPEC 8.6) is a later step: this tree is not the cutoff tree.

T2T-StandIn-Source-Commit: 43f95b7333efe73aeaebf806023f17bffea27aba
2026-10-01 00:00:00 +00:00

1565 lines
43 KiB
JavaScript

// Batería de tareas estilo SWE-bench, autocontenidas y REPRODUCIBLES en el
// navegador: cada una siembra un repo con un BUG + una especificación (lo que el
// test espera), y un `test(mod)` que se EJECUTA de verdad contra el módulo
// arreglado (métrica `resolved`, como SWE-bench). `solution` es el contenido
// correcto del fichero objetivo (lo usa el solver determinista del arnés; el
// modelo real no lo ve, tiene que deducirlo leyendo `target` y la spec).
export const TASKS = [
{
id: 'add-sub',
target: 'src/math.js',
files: {
'src/math.js': 'export function add(a, b) {\n return a - b; // BUG\n}\n',
'spec/math.md': '# add(a, b)\nDebe SUMAR: add(2,3) → 5, add(10,-4) → 6.',
},
task: 'add() en src/math.js resta en vez de sumar; arréglalo para que sume.',
solution: 'export function add(a, b) {\n return a + b;\n}\n',
test: m => m.add(2, 3) === 5 && m.add(10, -4) === 6 && m.add(0, 0) === 0,
},
{
id: 'max-empty',
target: 'src/max.js',
files: {
'src/max.js': 'export function max(arr) {\n return arr.reduce((a, b) => a > b ? a : b); // BUG: peta con []\n}\n',
'spec/max.md': '# max(arr)\nmax([3,1,2]) → 3. Con array vacío NO debe petar: max([]) → undefined.',
},
task: 'max() peta con un array vacío; haz que devuelva undefined en ese caso.',
solution: 'export function max(arr) {\n if (!arr.length) return undefined;\n return arr.reduce((a, b) => a > b ? a : b);\n}\n',
test: m => m.max([3, 1, 2]) === 3 && m.max([]) === undefined && m.max([-1, -5]) === -1,
},
{
id: 'unique',
target: 'src/unique.js',
files: {
'src/unique.js': 'export function unique(arr) {\n return arr; // BUG: no deduplica\n}\n',
'spec/unique.md': '# unique(arr)\nDevuelve el array SIN duplicados: unique([1,1,2,3,3]) → [1,2,3].',
},
task: 'unique() no elimina duplicados; arréglalo.',
solution: 'export function unique(arr) {\n return [...new Set(arr)];\n}\n',
test: m => { const r = m.unique([1, 1, 2, 3, 3]); return r.length === 3 && r.join(',') === '1,2,3'; },
},
{
id: 'slugify',
target: 'src/slug.js',
files: {
'src/slug.js': 'export function slugify(s) {\n return s.replace(/ /g, "-"); // BUG: no pasa a minúsculas\n}\n',
'spec/slug.md': '# slugify(s)\nMinúsculas y guiones: slugify("Hola Mundo") → "hola-mundo".',
},
task: 'slugify() no pasa a minúsculas; debe devolver minúsculas con guiones.',
solution: 'export function slugify(s) {\n return s.toLowerCase().replace(/ /g, "-");\n}\n',
test: m => m.slugify('Hola Mundo') === 'hola-mundo' && m.slugify('A B C') === 'a-b-c',
},
{
id: 'clamp',
target: 'src/clamp.js',
files: {
'src/clamp.js': 'export function clamp(v, lo, hi) {\n return v; // BUG: no acota\n}\n',
'spec/clamp.md': '# clamp(v, lo, hi)\nAcota v al rango [lo,hi]: clamp(15,0,10) → 10, clamp(-5,0,10) → 0.',
},
task: 'clamp() no acota el valor al rango [lo,hi]; arréglalo.',
solution: 'export function clamp(v, lo, hi) {\n return Math.min(hi, Math.max(lo, v));\n}\n',
test: m => m.clamp(15, 0, 10) === 10 && m.clamp(-5, 0, 10) === 0 && m.clamp(5, 0, 10) === 5,
},
{
id: 'fizzbuzz',
target: 'src/fizzbuzz.js',
files: {
'src/fizzbuzz.js': 'export function fizzbuzz(n) {\n if (n % 3 === 0) return "Fizz";\n if (n % 5 === 0) return "Buzz";\n if (n % 15 === 0) return "FizzBuzz"; // BUG: inalcanzable\n return String(n);\n}\n',
'spec/fizzbuzz.md': '# fizzbuzz(n)\nMúltiplo de 15 → "FizzBuzz", de 3 → "Fizz", de 5 → "Buzz", si no el número.',
},
task: 'fizzbuzz(15) debería dar "FizzBuzz" pero da "Fizz"; el caso de 15 es inalcanzable, arréglalo.',
solution: 'export function fizzbuzz(n) {\n if (n % 15 === 0) return "FizzBuzz";\n if (n % 3 === 0) return "Fizz";\n if (n % 5 === 0) return "Buzz";\n return String(n);\n}\n',
test: m => m.fizzbuzz(15) === 'FizzBuzz' && m.fizzbuzz(9) === 'Fizz' && m.fizzbuzz(10) === 'Buzz' && m.fizzbuzz(7) === '7',
},
// ── Tareas DURAS ────────────────────────────────────────────────────────────
// Las de arriba tienen ficheros de tres líneas: ahí localizar es gratis y no
// se parecen en nada a editar un proyecto real. Estas llevan el bug enterrado
// entre decenas de funciones con nombres que se repiten, indentación mixta y
// algún CRLF, que es donde la cita del modelo empieza a fallar de verdad.
{
id: 'total-iva',
target: 'src/carrito.js',
files: {
'src/carrito.js': `// pago auxiliar 0
export function pagoAux0(valor, opciones = {}) {
const previo = opciones.previo ?? 0;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 1
export function pagoAux1(valor, opciones = {}) {
const previo = opciones.previo ?? 1;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 2
export function pagoAux2(valor, opciones = {}) {
const previo = opciones.previo ?? 2;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 3
export function pagoAux3(valor, opciones = {}) {
const previo = opciones.previo ?? 3;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 4
export function pagoAux4(valor, opciones = {}) {
const previo = opciones.previo ?? 4;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 5
export function pagoAux5(valor, opciones = {}) {
const previo = opciones.previo ?? 5;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 6
export function pagoAux6(valor, opciones = {}) {
const previo = opciones.previo ?? 6;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 7
export function pagoAux7(valor, opciones = {}) {
const previo = opciones.previo ?? 7;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 8
export function pagoAux8(valor, opciones = {}) {
const previo = opciones.previo ?? 8;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 9
export function pagoAux9(valor, opciones = {}) {
const previo = opciones.previo ?? 9;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 10
export function pagoAux10(valor, opciones = {}) {
const previo = opciones.previo ?? 10;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 11
export function pagoAux11(valor, opciones = {}) {
const previo = opciones.previo ?? 11;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 12
export function pagoAux12(valor, opciones = {}) {
const previo = opciones.previo ?? 12;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 13
export function pagoAux13(valor, opciones = {}) {
const previo = opciones.previo ?? 13;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 14
export function pagoAux14(valor, opciones = {}) {
const previo = opciones.previo ?? 14;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 15
export function pagoAux15(valor, opciones = {}) {
const previo = opciones.previo ?? 15;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 16
export function pagoAux16(valor, opciones = {}) {
const previo = opciones.previo ?? 16;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 17
export function pagoAux17(valor, opciones = {}) {
const previo = opciones.previo ?? 17;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 18
export function pagoAux18(valor, opciones = {}) {
const previo = opciones.previo ?? 18;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 19
export function pagoAux19(valor, opciones = {}) {
const previo = opciones.previo ?? 19;
if (valor == null) return previo;
return valor + previo;
}
// Calcula el total del carrito aplicando descuento e impuestos.
export function totalCarrito(lineas, descuento = 0, iva = 0.21) {
let suma = 0;
for (const l of lineas) {
suma += l.precio * l.unidades;
}
const conDescuento = suma - descuento;
return conDescuento; // BUG: no aplica el IVA
}
// pago auxiliar 20
export function pagoAux20(valor, opciones = {}) {
const previo = opciones.previo ?? 20;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 21
export function pagoAux21(valor, opciones = {}) {
const previo = opciones.previo ?? 21;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 22
export function pagoAux22(valor, opciones = {}) {
const previo = opciones.previo ?? 22;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 23
export function pagoAux23(valor, opciones = {}) {
const previo = opciones.previo ?? 23;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 24
export function pagoAux24(valor, opciones = {}) {
const previo = opciones.previo ?? 24;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 25
export function pagoAux25(valor, opciones = {}) {
const previo = opciones.previo ?? 25;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 26
export function pagoAux26(valor, opciones = {}) {
const previo = opciones.previo ?? 26;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 27
export function pagoAux27(valor, opciones = {}) {
const previo = opciones.previo ?? 27;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 28
export function pagoAux28(valor, opciones = {}) {
const previo = opciones.previo ?? 28;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 29
export function pagoAux29(valor, opciones = {}) {
const previo = opciones.previo ?? 29;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 30
export function pagoAux30(valor, opciones = {}) {
const previo = opciones.previo ?? 30;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 31
export function pagoAux31(valor, opciones = {}) {
const previo = opciones.previo ?? 31;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 32
export function pagoAux32(valor, opciones = {}) {
const previo = opciones.previo ?? 32;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 33
export function pagoAux33(valor, opciones = {}) {
const previo = opciones.previo ?? 33;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 34
export function pagoAux34(valor, opciones = {}) {
const previo = opciones.previo ?? 34;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 35
export function pagoAux35(valor, opciones = {}) {
const previo = opciones.previo ?? 35;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 36
export function pagoAux36(valor, opciones = {}) {
const previo = opciones.previo ?? 36;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 37
export function pagoAux37(valor, opciones = {}) {
const previo = opciones.previo ?? 37;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 38
export function pagoAux38(valor, opciones = {}) {
const previo = opciones.previo ?? 38;
if (valor == null) return previo;
return valor + previo;
}
// pago auxiliar 39
export function pagoAux39(valor, opciones = {}) {
const previo = opciones.previo ?? 39;
if (valor == null) return previo;
return valor + previo;
}
`,
'spec/total-iva.md': '# totalCarrito(lineas, descuento, iva)\nDebe aplicar el IVA al final: totalCarrito([{precio:100,unidades:1}],0,0.21) → 121.',
},
task: 'totalCarrito() no aplica el IVA al resultado; arréglalo para que lo aplique después del descuento.',
test: m => Math.round(m.totalCarrito([{precio:100,unidades:1}],0,0.21)) === 121 && Math.round(m.totalCarrito([{precio:50,unidades:2}],10,0.1)) === 99,
},
{
id: 'recorta-pie',
target: 'src/texto.js',
files: {
'src/texto.js': `// texto auxiliar 0
export function textoAux0(valor, opciones = {}) {
const previo = opciones.previo ?? 0;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 1
export function textoAux1(valor, opciones = {}) {
const previo = opciones.previo ?? 1;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 2
export function textoAux2(valor, opciones = {}) {
const previo = opciones.previo ?? 2;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 3
export function textoAux3(valor, opciones = {}) {
const previo = opciones.previo ?? 3;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 4
export function textoAux4(valor, opciones = {}) {
const previo = opciones.previo ?? 4;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 5
export function textoAux5(valor, opciones = {}) {
const previo = opciones.previo ?? 5;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 6
export function textoAux6(valor, opciones = {}) {
const previo = opciones.previo ?? 6;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 7
export function textoAux7(valor, opciones = {}) {
const previo = opciones.previo ?? 7;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 8
export function textoAux8(valor, opciones = {}) {
const previo = opciones.previo ?? 8;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 9
export function textoAux9(valor, opciones = {}) {
const previo = opciones.previo ?? 9;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 10
export function textoAux10(valor, opciones = {}) {
const previo = opciones.previo ?? 10;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 11
export function textoAux11(valor, opciones = {}) {
const previo = opciones.previo ?? 11;
if (valor == null) return previo;
return valor + previo;
}
export function recortaTitulo(s, max = 30) {
if (s.length <= max) return s;
return s.slice(0, max);
}
export function recortaResumen(s, max = 30) {
if (s.length <= max) return s;
return s.slice(0, max);
}
export function recortaPie(s, max = 30) {
if (s.length <= max) return s;
return s.slice(0, max); // BUG: aquí SÍ hay que poner puntos suspensivos
}
// texto auxiliar 12
export function textoAux12(valor, opciones = {}) {
const previo = opciones.previo ?? 12;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 13
export function textoAux13(valor, opciones = {}) {
const previo = opciones.previo ?? 13;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 14
export function textoAux14(valor, opciones = {}) {
const previo = opciones.previo ?? 14;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 15
export function textoAux15(valor, opciones = {}) {
const previo = opciones.previo ?? 15;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 16
export function textoAux16(valor, opciones = {}) {
const previo = opciones.previo ?? 16;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 17
export function textoAux17(valor, opciones = {}) {
const previo = opciones.previo ?? 17;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 18
export function textoAux18(valor, opciones = {}) {
const previo = opciones.previo ?? 18;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 19
export function textoAux19(valor, opciones = {}) {
const previo = opciones.previo ?? 19;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 20
export function textoAux20(valor, opciones = {}) {
const previo = opciones.previo ?? 20;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 21
export function textoAux21(valor, opciones = {}) {
const previo = opciones.previo ?? 21;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 22
export function textoAux22(valor, opciones = {}) {
const previo = opciones.previo ?? 22;
if (valor == null) return previo;
return valor + previo;
}
// texto auxiliar 23
export function textoAux23(valor, opciones = {}) {
const previo = opciones.previo ?? 23;
if (valor == null) return previo;
return valor + previo;
}
`,
'spec/recorta-pie.md': '# recortaPie(s, max)\nSolo recortaPie debe terminar en «…» cuando recorta. Las otras dos NO cambian.',
},
task: 'recortaPie() debe añadir «…» al final cuando recorta. recortaTitulo y recortaResumen deben quedarse EXACTAMENTE como están.',
// Lo que mide esta tarea es la DISCRIMINACIÓN entre tres cuerpos idénticos, no
// si el modelo escribe «…» o «...»: las dos son respuestas razonables a la spec.
test: m => { const r = m.recortaPie('a'.repeat(40));
return r.startsWith('a'.repeat(30)) && /(…|\.\.\.)$/.test(r)
&& m.recortaTitulo('a'.repeat(40)) === 'a'.repeat(30)
&& m.recortaResumen('a'.repeat(40)) === 'a'.repeat(30); },
},
{
id: 'dias-entre',
target: 'src/fecha.js',
files: {
'src/fecha.js': `// fecha auxiliar 0
export function fechaAux0(valor, opciones = {}) {
const previo = opciones.previo ?? 0;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 1
export function fechaAux1(valor, opciones = {}) {
const previo = opciones.previo ?? 1;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 2
export function fechaAux2(valor, opciones = {}) {
const previo = opciones.previo ?? 2;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 3
export function fechaAux3(valor, opciones = {}) {
const previo = opciones.previo ?? 3;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 4
export function fechaAux4(valor, opciones = {}) {
const previo = opciones.previo ?? 4;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 5
export function fechaAux5(valor, opciones = {}) {
const previo = opciones.previo ?? 5;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 6
export function fechaAux6(valor, opciones = {}) {
const previo = opciones.previo ?? 6;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 7
export function fechaAux7(valor, opciones = {}) {
const previo = opciones.previo ?? 7;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 8
export function fechaAux8(valor, opciones = {}) {
const previo = opciones.previo ?? 8;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 9
export function fechaAux9(valor, opciones = {}) {
const previo = opciones.previo ?? 9;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 10
export function fechaAux10(valor, opciones = {}) {
const previo = opciones.previo ?? 10;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 11
export function fechaAux11(valor, opciones = {}) {
const previo = opciones.previo ?? 11;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 12
export function fechaAux12(valor, opciones = {}) {
const previo = opciones.previo ?? 12;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 13
export function fechaAux13(valor, opciones = {}) {
const previo = opciones.previo ?? 13;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 14
export function fechaAux14(valor, opciones = {}) {
const previo = opciones.previo ?? 14;
if (valor == null) return previo;
return valor + previo;
}
export function diasEntre(a, b) {
const ms = Math.abs(new Date(b) - new Date(a));
return Math.floor(ms / 86400000) + 1; // BUG: el +1 sobra
}
// fecha auxiliar 15
export function fechaAux15(valor, opciones = {}) {
const previo = opciones.previo ?? 15;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 16
export function fechaAux16(valor, opciones = {}) {
const previo = opciones.previo ?? 16;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 17
export function fechaAux17(valor, opciones = {}) {
const previo = opciones.previo ?? 17;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 18
export function fechaAux18(valor, opciones = {}) {
const previo = opciones.previo ?? 18;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 19
export function fechaAux19(valor, opciones = {}) {
const previo = opciones.previo ?? 19;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 20
export function fechaAux20(valor, opciones = {}) {
const previo = opciones.previo ?? 20;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 21
export function fechaAux21(valor, opciones = {}) {
const previo = opciones.previo ?? 21;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 22
export function fechaAux22(valor, opciones = {}) {
const previo = opciones.previo ?? 22;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 23
export function fechaAux23(valor, opciones = {}) {
const previo = opciones.previo ?? 23;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 24
export function fechaAux24(valor, opciones = {}) {
const previo = opciones.previo ?? 24;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 25
export function fechaAux25(valor, opciones = {}) {
const previo = opciones.previo ?? 25;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 26
export function fechaAux26(valor, opciones = {}) {
const previo = opciones.previo ?? 26;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 27
export function fechaAux27(valor, opciones = {}) {
const previo = opciones.previo ?? 27;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 28
export function fechaAux28(valor, opciones = {}) {
const previo = opciones.previo ?? 28;
if (valor == null) return previo;
return valor + previo;
}
// fecha auxiliar 29
export function fechaAux29(valor, opciones = {}) {
const previo = opciones.previo ?? 29;
if (valor == null) return previo;
return valor + previo;
}
`,
'spec/dias-entre.md': '# diasEntre(a, b)\ndiasEntre("2026-01-01","2026-01-03") → 2. No se suma un día extra.',
},
task: 'diasEntre() devuelve un día de más; quita ese +1.',
test: m => m.diasEntre('2026-01-01','2026-01-03') === 2 && m.diasEntre('2026-01-01','2026-01-01') === 0,
},
{
id: 'dos-sitios',
target: 'src/valida.js',
files: {
'src/valida.js': `// valida auxiliar 0
export function validaAux0(valor, opciones = {}) {
const previo = opciones.previo ?? 0;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 1
export function validaAux1(valor, opciones = {}) {
const previo = opciones.previo ?? 1;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 2
export function validaAux2(valor, opciones = {}) {
const previo = opciones.previo ?? 2;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 3
export function validaAux3(valor, opciones = {}) {
const previo = opciones.previo ?? 3;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 4
export function validaAux4(valor, opciones = {}) {
const previo = opciones.previo ?? 4;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 5
export function validaAux5(valor, opciones = {}) {
const previo = opciones.previo ?? 5;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 6
export function validaAux6(valor, opciones = {}) {
const previo = opciones.previo ?? 6;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 7
export function validaAux7(valor, opciones = {}) {
const previo = opciones.previo ?? 7;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 8
export function validaAux8(valor, opciones = {}) {
const previo = opciones.previo ?? 8;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 9
export function validaAux9(valor, opciones = {}) {
const previo = opciones.previo ?? 9;
if (valor == null) return previo;
return valor + previo;
}
const MINIMO = 3;
export function validaUsuario(nombre) {
if (nombre.length < MINIMO) return false; // BUG: debe ser <= para exigir MÁS de 3
return true;
}
export function validaAlias(alias) {
if (alias.length < MINIMO) return false; // BUG: mismo fallo aquí
return true;
}
// valida auxiliar 10
export function validaAux10(valor, opciones = {}) {
const previo = opciones.previo ?? 10;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 11
export function validaAux11(valor, opciones = {}) {
const previo = opciones.previo ?? 11;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 12
export function validaAux12(valor, opciones = {}) {
const previo = opciones.previo ?? 12;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 13
export function validaAux13(valor, opciones = {}) {
const previo = opciones.previo ?? 13;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 14
export function validaAux14(valor, opciones = {}) {
const previo = opciones.previo ?? 14;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 15
export function validaAux15(valor, opciones = {}) {
const previo = opciones.previo ?? 15;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 16
export function validaAux16(valor, opciones = {}) {
const previo = opciones.previo ?? 16;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 17
export function validaAux17(valor, opciones = {}) {
const previo = opciones.previo ?? 17;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 18
export function validaAux18(valor, opciones = {}) {
const previo = opciones.previo ?? 18;
if (valor == null) return previo;
return valor + previo;
}
// valida auxiliar 19
export function validaAux19(valor, opciones = {}) {
const previo = opciones.previo ?? 19;
if (valor == null) return previo;
return valor + previo;
}
`,
'spec/dos-sitios.md': '# validaUsuario / validaAlias\nAmbas deben exigir MÁS de 3 caracteres: una cadena de 3 es inválida, una de 4 es válida.',
},
task: 'validaUsuario() y validaAlias() aceptan cadenas de 3 caracteres y no deberían: hay que exigir más de 3 en LAS DOS.',
test: m => m.validaUsuario('abc')===false && m.validaUsuario('abcd')===true && m.validaAlias('abc')===false && m.validaAlias('abcd')===true,
},
{
id: 'orden-descendente',
target: 'src/informe.js',
files: {
'src/informe.js': `// informe auxiliar 0
export function informeAux0(valor, opciones = {}) {
const previo = opciones.previo ?? 0;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 1
export function informeAux1(valor, opciones = {}) {
const previo = opciones.previo ?? 1;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 2
export function informeAux2(valor, opciones = {}) {
const previo = opciones.previo ?? 2;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 3
export function informeAux3(valor, opciones = {}) {
const previo = opciones.previo ?? 3;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 4
export function informeAux4(valor, opciones = {}) {
const previo = opciones.previo ?? 4;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 5
export function informeAux5(valor, opciones = {}) {
const previo = opciones.previo ?? 5;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 6
export function informeAux6(valor, opciones = {}) {
const previo = opciones.previo ?? 6;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 7
export function informeAux7(valor, opciones = {}) {
const previo = opciones.previo ?? 7;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 8
export function informeAux8(valor, opciones = {}) {
const previo = opciones.previo ?? 8;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 9
export function informeAux9(valor, opciones = {}) {
const previo = opciones.previo ?? 9;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 10
export function informeAux10(valor, opciones = {}) {
const previo = opciones.previo ?? 10;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 11
export function informeAux11(valor, opciones = {}) {
const previo = opciones.previo ?? 11;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 12
export function informeAux12(valor, opciones = {}) {
const previo = opciones.previo ?? 12;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 13
export function informeAux13(valor, opciones = {}) {
const previo = opciones.previo ?? 13;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 14
export function informeAux14(valor, opciones = {}) {
const previo = opciones.previo ?? 14;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 15
export function informeAux15(valor, opciones = {}) {
const previo = opciones.previo ?? 15;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 16
export function informeAux16(valor, opciones = {}) {
const previo = opciones.previo ?? 16;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 17
export function informeAux17(valor, opciones = {}) {
const previo = opciones.previo ?? 17;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 18
export function informeAux18(valor, opciones = {}) {
const previo = opciones.previo ?? 18;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 19
export function informeAux19(valor, opciones = {}) {
const previo = opciones.previo ?? 19;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 20
export function informeAux20(valor, opciones = {}) {
const previo = opciones.previo ?? 20;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 21
export function informeAux21(valor, opciones = {}) {
const previo = opciones.previo ?? 21;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 22
export function informeAux22(valor, opciones = {}) {
const previo = opciones.previo ?? 22;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 23
export function informeAux23(valor, opciones = {}) {
const previo = opciones.previo ?? 23;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 24
export function informeAux24(valor, opciones = {}) {
const previo = opciones.previo ?? 24;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 25
export function informeAux25(valor, opciones = {}) {
const previo = opciones.previo ?? 25;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 26
export function informeAux26(valor, opciones = {}) {
const previo = opciones.previo ?? 26;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 27
export function informeAux27(valor, opciones = {}) {
const previo = opciones.previo ?? 27;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 28
export function informeAux28(valor, opciones = {}) {
const previo = opciones.previo ?? 28;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 29
export function informeAux29(valor, opciones = {}) {
const previo = opciones.previo ?? 29;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 30
export function informeAux30(valor, opciones = {}) {
const previo = opciones.previo ?? 30;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 31
export function informeAux31(valor, opciones = {}) {
const previo = opciones.previo ?? 31;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 32
export function informeAux32(valor, opciones = {}) {
const previo = opciones.previo ?? 32;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 33
export function informeAux33(valor, opciones = {}) {
const previo = opciones.previo ?? 33;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 34
export function informeAux34(valor, opciones = {}) {
const previo = opciones.previo ?? 34;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 35
export function informeAux35(valor, opciones = {}) {
const previo = opciones.previo ?? 35;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 36
export function informeAux36(valor, opciones = {}) {
const previo = opciones.previo ?? 36;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 37
export function informeAux37(valor, opciones = {}) {
const previo = opciones.previo ?? 37;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 38
export function informeAux38(valor, opciones = {}) {
const previo = opciones.previo ?? 38;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 39
export function informeAux39(valor, opciones = {}) {
const previo = opciones.previo ?? 39;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 40
export function informeAux40(valor, opciones = {}) {
const previo = opciones.previo ?? 40;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 41
export function informeAux41(valor, opciones = {}) {
const previo = opciones.previo ?? 41;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 42
export function informeAux42(valor, opciones = {}) {
const previo = opciones.previo ?? 42;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 43
export function informeAux43(valor, opciones = {}) {
const previo = opciones.previo ?? 43;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 44
export function informeAux44(valor, opciones = {}) {
const previo = opciones.previo ?? 44;
if (valor == null) return previo;
return valor + previo;
}
export function ordenaPorFecha(filas) {
return filas.slice().sort((a, b) => a.fecha - b.fecha); // BUG: debe ser descendente
}
// informe auxiliar 45
export function informeAux45(valor, opciones = {}) {
const previo = opciones.previo ?? 45;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 46
export function informeAux46(valor, opciones = {}) {
const previo = opciones.previo ?? 46;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 47
export function informeAux47(valor, opciones = {}) {
const previo = opciones.previo ?? 47;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 48
export function informeAux48(valor, opciones = {}) {
const previo = opciones.previo ?? 48;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 49
export function informeAux49(valor, opciones = {}) {
const previo = opciones.previo ?? 49;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 50
export function informeAux50(valor, opciones = {}) {
const previo = opciones.previo ?? 50;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 51
export function informeAux51(valor, opciones = {}) {
const previo = opciones.previo ?? 51;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 52
export function informeAux52(valor, opciones = {}) {
const previo = opciones.previo ?? 52;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 53
export function informeAux53(valor, opciones = {}) {
const previo = opciones.previo ?? 53;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 54
export function informeAux54(valor, opciones = {}) {
const previo = opciones.previo ?? 54;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 55
export function informeAux55(valor, opciones = {}) {
const previo = opciones.previo ?? 55;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 56
export function informeAux56(valor, opciones = {}) {
const previo = opciones.previo ?? 56;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 57
export function informeAux57(valor, opciones = {}) {
const previo = opciones.previo ?? 57;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 58
export function informeAux58(valor, opciones = {}) {
const previo = opciones.previo ?? 58;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 59
export function informeAux59(valor, opciones = {}) {
const previo = opciones.previo ?? 59;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 60
export function informeAux60(valor, opciones = {}) {
const previo = opciones.previo ?? 60;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 61
export function informeAux61(valor, opciones = {}) {
const previo = opciones.previo ?? 61;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 62
export function informeAux62(valor, opciones = {}) {
const previo = opciones.previo ?? 62;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 63
export function informeAux63(valor, opciones = {}) {
const previo = opciones.previo ?? 63;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 64
export function informeAux64(valor, opciones = {}) {
const previo = opciones.previo ?? 64;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 65
export function informeAux65(valor, opciones = {}) {
const previo = opciones.previo ?? 65;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 66
export function informeAux66(valor, opciones = {}) {
const previo = opciones.previo ?? 66;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 67
export function informeAux67(valor, opciones = {}) {
const previo = opciones.previo ?? 67;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 68
export function informeAux68(valor, opciones = {}) {
const previo = opciones.previo ?? 68;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 69
export function informeAux69(valor, opciones = {}) {
const previo = opciones.previo ?? 69;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 70
export function informeAux70(valor, opciones = {}) {
const previo = opciones.previo ?? 70;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 71
export function informeAux71(valor, opciones = {}) {
const previo = opciones.previo ?? 71;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 72
export function informeAux72(valor, opciones = {}) {
const previo = opciones.previo ?? 72;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 73
export function informeAux73(valor, opciones = {}) {
const previo = opciones.previo ?? 73;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 74
export function informeAux74(valor, opciones = {}) {
const previo = opciones.previo ?? 74;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 75
export function informeAux75(valor, opciones = {}) {
const previo = opciones.previo ?? 75;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 76
export function informeAux76(valor, opciones = {}) {
const previo = opciones.previo ?? 76;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 77
export function informeAux77(valor, opciones = {}) {
const previo = opciones.previo ?? 77;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 78
export function informeAux78(valor, opciones = {}) {
const previo = opciones.previo ?? 78;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 79
export function informeAux79(valor, opciones = {}) {
const previo = opciones.previo ?? 79;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 80
export function informeAux80(valor, opciones = {}) {
const previo = opciones.previo ?? 80;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 81
export function informeAux81(valor, opciones = {}) {
const previo = opciones.previo ?? 81;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 82
export function informeAux82(valor, opciones = {}) {
const previo = opciones.previo ?? 82;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 83
export function informeAux83(valor, opciones = {}) {
const previo = opciones.previo ?? 83;
if (valor == null) return previo;
return valor + previo;
}
// informe auxiliar 84
export function informeAux84(valor, opciones = {}) {
const previo = opciones.previo ?? 84;
if (valor == null) return previo;
return valor + previo;
}
`,
'spec/orden-descendente.md': '# ordenaPorFecha(filas)\nDe más reciente a más antigua.',
},
task: 'ordenaPorFecha() ordena de más antigua a más reciente; debe ser al revés, la más reciente primero.',
test: m => { const r = m.ordenaPorFecha([{fecha:1},{fecha:3},{fecha:2}]); return r[0].fecha===3 && r[2].fecha===1; },
},
];