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
1565 lines
43 KiB
JavaScript
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; },
|
|
},
|
|
];
|