Roadmap Update Checklist / Registro de cierre
Este archivo registra los cierres que autorizan una actualización de
docs/ROADMAP.md. Es parte del flujo de documentación: una delegación no está
finalizada hasta que el registro y el roadmap reflejan el mismo estado.
Regla de cierre / Completion rule
Para cerrar un módulo, comprobar código, tests y README. Para cerrar una fase,
comprobar además todos sus módulos requeridos. Solo después se cambia el estado
en ROADMAP.md.
Cada entrada debe incluir la fecha, la fase, el módulo o conjunto de módulos, los lenguajes verificados, los comandos ejecutados y el cambio de estado realizado en el roadmap. No se deben inventar resultados.
Plantilla de registro / Entry template
Fecha / Date: YYYY-MM-DD
Fase / Phase: core.<phase>
Módulo(s) / Module(s): core.<phase>.<module>
Lenguaje(s) / Language(s): language-a, language-b
Código verificado / Code verified: yes/no
Tests y comandos / Tests and commands:
- `command` -> result
README(s) verificado(s) / README(s) verified: yes/no
Cambio en ROADMAP.md / ROADMAP.md change: old status -> new status
Observaciones / Notes:
Pendientes / Pending closures
Sin pendientes a 2026-09-28: la implementación, la documentación y el registro de cierre de core.algorithms.data_structures_basics (Clojure y COBOL) están completos.
Historial / History
Fecha / Date: 2026-10-17
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics (especificación 06_Data_Structures_Basics)
Lenguaje(s) / Language(s): 50 auditados; 10 con hallazgo corregido (ocaml, groovy, nim, common-lisp, fsharp, haskell, haxe, php, purescript, python)
Código verificado / Code verified: yes (auditoría en docs/audits/06_Audited_Data_Structures_Basics.md)
Tests y comandos / Tests and commands:
- Las 50 suites del catálogo -> 50/50 rc=0
- Re-ejecución sobre el `main` integrado de los diez -> `dune runtest --force` 4 tests; `dotnet test` 23; groovy 4 (XML); `cabal test` PASS; haxe 4 bloques; `nimble test` todas; `composer test` 4 tests y 15 aserciones; `spago test` 5; `pytest` 4; common-lisp 15 comprobaciones
README(s) verificado(s) / README(s) verified: yes (los 50 README del módulo contra la plantilla de Nivel 3; `groovy` declara `lib/bin` como salida generada y `common-lisp` deja un solo README)
Cambio en ROADMAP.md / ROADMAP.md change: core.algorithms.data_structures_basics sigue en ✅ 50/50; se añade a la nota del módulo el cierre de la auditoría 06 (el contador del sprint no se toca)
Observaciones / Notes: Cierre de la pasada 06. El pase verificó las 50 implementaciones (un solo `Node` compartido, sin delegación entre estructuras ni colecciones de biblioteca, `init` antes de `is_empty`, indicador por tipo de retorno, `O(1)` salvo `delete` y los 15 pasos de caso) y dejó 10 hallazgos, todos corregidos e integrados en 10 commits de `align`. `ocaml` devolvía `int option` en las cuatro lecturas: se comprobó en la documentación oficial que era convención y no restricción del lenguaje, y pasa al centinela `-1` dejando `option` solo en los enlaces. Además, `lib/bin` de `groovy` y el binario `.out` de `nim` salen del índice, `common-lisp` queda con un README y ocho lenguajes pierden sus cabeceras de andamiaje del paso 4b.
Fecha / Date: 2026-10-17
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort (especificación 05_Naive_Sort)
Lenguaje(s) / Language(s): 50 auditados; 4 con hallazgo corregido (ocaml, scheme, haskell, cobol)
Código verificado / Code verified: yes (auditoría en docs/audits/05_Audited_Naive_Sort.md)
Tests y comandos / Tests and commands:
- Las 50 suites del catálogo antes del `align` -> 49 rc=0; `ocaml` rc=1 (`Module "Main" doesn't exist`)
- Re-ejecución sobre el `main` integrado -> `dune runtest --force` 3 tests; suite de Guile 24 comprobaciones; `cabal test` PASS; `make test` de `cobol` 78/78
README(s) verificado(s) / README(s) verified: yes (los 50 README del módulo contra la plantilla de Nivel 3; `cobol` documenta la representación equivalente de la entrada inválida)
Cambio en ROADMAP.md / ROADMAP.md change: core.algorithms.naive_sort sigue en ✅ 50/50; se añade a la nota del módulo el cierre de la auditoría 05 (el contador del sprint no se toca)
Observaciones / Notes: Cierre de la pasada 05. El pase verificó las 50 implementaciones (los tres algoritmos, corte temprano real de la burbuja, indicador de fallo, los 7 casos sobre fixture nuevo y la separación código/pruebas) y dejó 4 hallazgos, todos corregidos e integrados en 4 commits de `align`: el `bin/dune` huérfano de `ocaml` (tercera aparición del caso), `(apply min …)` de biblioteca en `scheme`, un `error` inalcanzable en `haskell` y la representación de entrada inválida sin documentar en `cobol`. Se retiró un hallazgo provisional: el `.github/workflows/test.yml` de `gleam` es convención de sus cinco módulos. Al abrir el pase se corrigieron tres criterios de la especificación: el indicador de fallo sin `Option`/`Result`, la prohibición de `min`/`max` anclada al enunciado y las dos formas de mutación marcadas con `✅`.
Fecha / Date: 2026-10-16
Fase / Phase: core.foundations
Módulo(s) / Module(s): core.foundations.numbers (especificación 04_Numbers)
Lenguaje(s) / Language(s): 50 auditados; 7 con hallazgo corregido (ballerina, clojure, crystal, dart, elm, ocaml, tcl-tk)
Código verificado / Code verified: yes (auditoría en docs/audits/04_Audited_Numbers.md)
Tests y comandos / Tests and commands:
- Los comandos del catálogo sobre el `main` integrado de los siete -> 8/8 rc=0 (clojure: 33 aserciones; elm: 33 pruebas; crystal y dart: 10 cada uno; tcl-tk: Total 11 Passed 11 por suite)
- `dune runtest` en `ocaml/` -> rc=0 tras añadir `bin/main.ml`; `dune exec numbers` imprime los cinco resultados
README(s) verificado(s) / README(s) verified: yes (los 50 README del módulo contra la plantilla de Nivel 3; `elm` reestructurado y `tcl-tk` con la cabecera de compilación restaurada)
Cambio en ROADMAP.md / ROADMAP.md change: core.foundations.numbers sigue en ✅ 50/50; la nota del módulo pasa a nombrar la auditoría 04 cerrada (el contador del sprint no se toca)
Observaciones / Notes: Cierre de la pasada 04. El pase verificó las 50 implementaciones (los cinco algoritmos en las variantes que cada lenguaje permite, con la combinación de suites declarada en el README y los 11 casos por variante cubiertos) y dejó 7 hallazgos, todos corregidos e integrados en 7 commits de `align`. Dos hallazgos provisionales se retiraron al comprobarlos: `ada` (sus tres suites llevan 11 aserciones agrupadas en 5 procedimientos de AUnit) y `common-lisp` (su `run-tests` sí ejecuta las tres suites: 33 checks).
Fecha / Date: 2026-10-14
Fase / Phase: core.foundations
Módulo(s) / Module(s): core.foundations.hello_user (especificación 02_Hello_User)
Lenguaje(s) / Language(s): 50 auditados; 32 con hallazgo corregido (11 de prompt/saludo y 20 de nombre de fichero, con solapes) y `grain` aceptado
Código verificado / Code verified: yes (auditoría en docs/audits/02_Audited_Hello_User.md)
Tests y comandos / Tests and commands:
- Los comandos documentados por módulo, con la entrada `John` (`Ada` en `rexx`) -> 49/50 rc=0; `grain` no tiene módulo porque el lenguaje no lee de stdin
- Re-ejecución tras los arreglos -> 49/50 rc=0 con la salida del criterio
README(s) verificado(s) / README(s) verified: yes (los 50 README del módulo contra la plantilla de Nivel 3)
Cambio en ROADMAP.md / ROADMAP.md change: core.foundations.hello_user sigue en ✅ 50/50; la nota del módulo pasa a nombrar la auditoría 02 cerrada (el contador del sprint no se toca)
Observaciones / Notes: Cierre de la pasada 02. Criterio del módulo corregido durante el pase: el prompt de la especificación pasó de «What is your name?» a «Enter your name: », porque el autor lo había documentado mal; el cambio quedó anotado con fecha en la especificación y en los documentos afectados. Desviación aceptada: `grain` no tiene stdin, así que el módulo interactivo no existe (docs/ruleset/idioms/grain.md). Se corrigieron además `rexx` (`parse pull` en vez de `pull`, que pasa el texto a mayúsculas), `rescript` (`Js.log` con concatenación, porque `Js.log3` inserta espacios) y `forth` (una línea suelta que rompía la ejecución). 34 commits en 32 submódulos, integrados y empujados.
Fecha / Date: 2026-10-13
Fase / Phase: core.foundations
Módulo(s) / Module(s): core.foundations.hello_world (especificación 01_Hello_World)
Lenguaje(s) / Language(s): 50 auditados; 35 con hallazgo corregido (34 del módulo y `haxe`)
Código verificado / Code verified: yes (auditoría en docs/audits/01_Audited_Hello_World.md)
Tests y comandos / Tests and commands:
- La ejecución del programa en los 50 lenguajes con su comando documentado -> 50/50 rc=0
- Re-ejecución tras los arreglos -> 50/50 rc=0, con el mensaje exacto salvo `elm` (`: ()`), `r` (`[1] "…"`) y `zig` (que lo escribe por stderr)
README(s) verificado(s) / README(s) verified: yes (los 50 README del módulo contra la plantilla de Nivel 3; 5 completados y 14 citas del mensaje corregidas)
Cambio en ROADMAP.md / ROADMAP.md change: core.foundations.hello_world sigue en ✅ 50/50; la nota del módulo pasa a nombrar la auditoría 01 cerrada (el contador del sprint no se toca)
Observaciones / Notes: Cierre de la pasada 01. 40 commits de `align` (21 por el mensaje exacto y 20 por el nombre del fichero, 7 en las dos listas) y 27 de corrección en una segunda pasada (impresión en `r`, `racket` y `zig`, `.gitignore` de artefactos en 14 lenguajes, 5 READMEs y el nombre del paquete de `purescript`). Desviación aceptada: `elm` no tiene salida por consola en su biblioteca estándar y usa `Debug.log` (docs/ruleset/idioms/elm.md).
Fecha / Date: 2026-10-16
Fase / Phase: core.foundations
Módulo(s) / Module(s): core.foundations.unit_test (especificación 03_Unit_Test_Calculator)
Lenguaje(s) / Language(s): 50 auditados; 15 con hallazgo corregido (ballerina, clojure, common-lisp, cpp, crystal, csharp, dart, erlang, fsharp, forth, grain, julia, ocaml, scheme, tcl-tk)
Código verificado / Code verified: yes (auditoría en docs/audits/03_Audited_Unit_Test_Calculator.md)
Tests y comandos / Tests and commands:
- Los 15 comandos del catálogo sobre el `main` integrado -> 15/15 rc=0 con 5 pruebas cada uno
- `dune runtest` en `ocaml/` -> rc=0 tras añadir `bin/main.ml`; `dune exec test/test_calculator.exe` -> `Test Successful in 0.001s. 5 tests run.`
README(s) verificado(s) / README(s) verified: yes (los 50 README del módulo contra la plantilla de Nivel 3: 50/50 con las cuatro secciones aplicables)
Cambio en ROADMAP.md / ROADMAP.md change: core.foundations.unit_test sigue en ✅ 50/50; se añade a la nota del módulo el cierre de la auditoría 03 (el contador del sprint no se toca)
Observaciones / Notes: Cierre de la pasada 03. El pase verificó las 50 implementaciones (cinco operaciones, multiplicación por suma repetitiva, división por resta repetitiva y módulo construido con ambas, solo biblioteca estándar) y dejó 15 hallazgos, todos corregidos e integrados: 5 de nombres, 6 de comentarios de plantilla, 3 de cabeceras de README y el `bin/dune` huérfano de `ocaml`. Cuatro hallazgos se retiraron al comprobar la convención en el módulo hermano homologado `04_Numbers` (`src` como módulo o paquete en `v`, `go` y `haxe`, `*_base.dart` en `dart` y `testify` en `go`). Deuda heredada por la auditoría 04: los mismos placeholders de plantilla y el mismo `bin/dune` huérfano en `04_Numbers`.
Fecha / Date: 2026-09-28
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): cobol
Código verificado / Code verified: yes
Tests y comandos / Tests and commands:
- `make clean && make build` en `cobol/core/algorithms/data_structures_basics` -> exit 0, sin warnings (GnuCOBOL, formato libre)
- `make test` -> `Total: 049 / Passed: 049 / Failed: 000 / >>> ALL TESTS PASSED <<<`
README(s) verificado(s) / README(s) verified: yes (cobol/core/algorithms/data_structures_basics/README.md)
Cambio en ROADMAP.md / ROADMAP.md change: core.algorithms.data_structures_basics 5/50 (Ada, Assembly, Ballerina, C, Clojure) -> 6/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL)
Observaciones / Notes: Sexta implementación homologada de data_structures_basics. No cierra el módulo: faltan los demás lenguajes. COBOL es procedimental sin objetos: el contrato se declara como un conjunto de subprogramas PROGRAM-ID compilados en el mismo archivo fuente; la familia idiomática es «C, Assembly, COBOL, Forth» según AGENT_Template.md. Los nodos se gestionan con ALLOCATE/FREE (ISO COBOL 2002+) y el tipo DS-NODE es BASED; el acceso a campos usa SET ADDRESS OF DS-NODE TO <puntero>. Ausencia nativa de puntero: NULL. Indicador de fallo numérico: -1 (DS-FAILURE-VALUE, PIC S9(9)). Los booleanos se representan con PIC 9 (1 = vacía, 0 = no vacía). No hay framework de pruebas externo: la suite es artesanal con contadores propios en RUN-TESTS.cbl. No se usa recursión (COBOL tiene soporte limitado); todos los recorridos son iterativos con PERFORM UNTIL. Los índices Nivel 2 (algorithms/README.md), Nivel 1 (core/README.md y cobol/README.md) se actualizaron en el mismo cambio.
Fecha / Date: 2026-09-28
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): clojure
Código verificado / Code verified: yes
Tests y comandos / Tests and commands:
- `clojure -M -e "(require 'data-structures-basics.data-structures-basics)"` -> exit 0, sin warnings
- `clojure -M:test -m cognitect.test-runner` -> `Ran 4 tests containing 46 assertions. 0 failures, 0 errors.`
README(s) verificado(s) / README(s) verified: yes (clojure/core/algorithms/data_structures_basics/README.md)
Cambio en ROADMAP.md / ROADMAP.md change: core.algorithms.data_structures_basics 4/50 (Ada, Assembly, Ballerina, C) -> 5/50 (Ada, Assembly, Ballerina, C, Clojure)
Observaciones / Notes: Quinta implementación homologada de data_structures_basics. No cierra el módulo: faltan los demás lenguajes. Clojure es funcional e inmutable: `defrecord` crea tipos de valor, cada operación devuelve una nueva instancia, y `pop`/`dequeue` devuelven un mapa `{:stack/:queue …, :value …}` para proporcionar ambos — la estructura actualizada y el valor extraído — sin mutación. `ll-insert-tail` y `queue-enqueue` son O(n) en lugar de O(1) porque el nodo existente en cola no puede enlazarse en su lugar. Los getters/setters del pseudocódigo se expresan como acceso por keyword (`:value`, `:next`) y `assoc` respectivamente, que es la forma idiomática de los campos de un `defrecord`. No se añade `interface`/`protocol`: la especificación (Fase 1) y AGENT_Template.md prohíben el contrato aparte mientras haya una sola implementación. Los índices Nivel 2 (algorithms/README.md), Nivel 1 (core/README.md y clojure/README.md) se actualizaron en el mismo cambio.
Fecha / Date: 2026-09-21
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): 50 (auditados); 6 arreglos de fidelidad o de tests (racket, cpp, csharp, clojure, swift, tcl-tk) y 8 de comentarios (java, dart, haskell, elm, erlang, haxe, common-lisp, cpp)
Código verificado / Code verified: yes (auditoría en docs/audits/05_Audited_Naive_Sort.md)
Tests y comandos / Tests and commands:
- `raco make ... && racket test/run_tests.rkt` en `racket/` -> `3 success(es) 0 failure(s) 0 error(s) 3 test(s) run` tras el refactor a vectores
- `bazelisk test //:naive_sort_tests --test_output=summary` en `cpp/` -> `PASSED in 0.0s`, `Executed 1 out of 1 test: 1 test passes` tras añadir el guardia `min_idx != i`
- `dotnet test NaiveSort.slnx` en `csharp/` -> `Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3` tras clonar los fixtures
- `clojure -T:build test` en `clojure/` -> `Ran 6 tests containing 48 assertions. 0 failures, 0 errors.` (valida el arreglo pendiente de commit)
- `TCLLIBPATH="$(cd ../src && pwd)" tclsh9.0 naive_sort.test` en `tcl-tk/test` -> `Total 21 Passed 21 Skipped 0 Failed 0` (valida el arreglo pendiente de commit)
- `swift test` en `swift/` -> `Executed 3 tests, with 0 failures (0 unexpected)` (valida el arreglo pendiente de commit)
- Barrido léxico en los 50 lenguajes (solo archivos rastreados por git) -> 0 invocaciones de ordenamiento de biblioteca y 0 retornos monádicos o excepciones como contrato
README(s) verificado(s) / README(s) verified: yes (50/50 con las tres secciones obligatorias de `README_Template.md`)
- Integración: `git -C <lenguaje> log --oneline -2` y `git submodule status cpp csharp racket swift tcl-tk clojure` -> merges `refactor/naive-sort` en el `main` de los 6 submódulos y punteros del monorepo apuntando a ellos
- Criterio 4 (comentarios): 8 lenguajes corregidos y verificados -> `mvn test` en `java/` -> `Tests run: 3, Failures: 0, Errors: 0` y `BUILD SUCCESS`; `dart test` en `dart/` -> `+3: All tests passed!`; `elm-test` en `elm/` -> `TEST RUN PASSED`, `Passed: 21`, `Failed: 0`; `cabal test --test-show-details=direct` en `haskell/` -> `21 examples, 0 failures`; `rebar3 eunit` en `erlang/` -> `21 tests, 0 failures`; `haxe build.hxml` en `haxe/` -> `results: ALL TESTS OK (success: true)`; `ros run --load run-tests.lisp --eval '(uiop:quit)'` en `common-lisp/` -> `Pass: 24 (100%)`, `Fail: 0 ( 0%)`; `bazelisk test //:naive_sort_tests --nocache_test_results` en `cpp/` -> `PASSED`, `1 test passes`
- Generadores formales tras la corrección: `grep` en los 9 archivos tocados -> 0 coincidencias (`@param`, `{@code}`, `///`, `/**`, `-- \|`, `{- \|`)
- Ada (tras restaurar `alr` con `~/temp/fix-alr.sh`): `alr -C test run` en `ada/` -> `Total Tests Run: 3`, `Successful Tests: 3`, `Failed Assertions: 0`, `Unexpected Errors: 0`
Cambio en ROADMAP.md / ROADMAP.md change: Foundations 49/49 -> 50/50; `core.algorithms.naive_sort` 49/49 -> 50/50; leyenda y contadores `X/49` -> `X/50`; `php` añadido a la lista de lenguajes del módulo
Observaciones / Notes: `php` entra en el contador como quincuagésimo submódulo (cierra la decisión abierta del cierre anterior del 2026-09-20) y `core.algorithms.naive_sort` queda cerrado en 50/50. Los seis arreglos de fidelidad o de tests y los ocho de comentarios (criterio 4) están aplicados y verificados con la suite de cada lenguaje, y el resto de suites del módulo se ejecutó el 2026-09-21 (42 más, todas en verde, incluida la de Ada con `alr -C test run` tras restaurar el binario con `~/temp/fix-alr.sh`). El detalle vive en `docs/audits/05_Audited_Naive_Sort.md`.
Fecha / Date: 2026-09-11 Fase / Phase: core.algorithms Módulo(s) / Module(s): core.algorithms.naive_sort Lenguaje(s) / Language(s): ada Código verificado / Code verified: yes Tests y comandos / Tests and commands:
alr -C test runenada/core/algorithms/naive_sort-> 3 tests ejecutados, 3 exitosos, 0 aserciones fallidas, 0 errores inesperados README(s) verificado(s) / README(s) verified: yes (ada/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort📋 -> 🔄 (1/49) Observaciones / Notes: Primera implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. En Ada no existe representación de array nulo, por lo que el escenario inválido de la especificación queda documentado como no representable.
Fecha / Date: 2026-09-12
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): assembly
Código verificado / Code verified: yes (bugs corregidos: sintaxis GAS en vez de NASM, rsi/esi reutilizado para la bandera swapped en bubble_sort, límite fuera de uno en el bucle interno de bubble_sort, rbx sin preservar, rax sin fijar en los casos vacío/un elemento)
Tests y comandos / Tests and commands:
make runenassembly/core/algorithms/naive_sort-> 24 tests ejecutados, 24 exitosos, 0 fallidos README(s) verificado(s) / README(s) verified: yes (assembly/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort1/49 (Ada) -> 2/49 (Ada, Assembly) Observaciones / Notes: Segunda implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. A diferencia de Ada, en Assembly el array es un puntero crudo, por lo quenullsí es representable; se añadió un octavo caso de prueba (puntero nulo) además de los 7 del enunciado.
Fecha / Date: 2026-09-12 Fase / Phase: core.algorithms Módulo(s) / Module(s): core.algorithms.naive_sort Lenguaje(s) / Language(s): ballerina Código verificado / Code verified: yes Tests y comandos / Tests and commands:
bal testenballerina/core/algorithms/naive_sort-> 3 tests ejecutados, 3 exitosos, 0 fallidos (24 aserciones)- Prueba negativa: con
insertionSortinvertido -> 2 passing, 1 failing, confirmando que la suite detecta fallos README(s) verificado(s) / README(s) verified: yes (ballerina/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort2/49 (Ada, Assembly) -> 3/49 (Ada, Assembly, Ballerina) Observaciones / Notes: Tercera implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Ballerina no admiteint[]nulo, pero sí el tipo nillableint[]?, que se usa como indicador de fallo; se añadió el octavo caso (()). El clonado es responsabilidad de la implementación, por lo que los fixtures compartidos se pasan como entradas de solo lectura sin clonar en el test.
Fecha / Date: 2026-09-12 Fase / Phase: core.algorithms Módulo(s) / Module(s): core.algorithms.naive_sort Lenguaje(s) / Language(s): c Código verificado / Code verified: yes Tests y comandos / Tests and commands:
make testenc/core/algorithms/naive_sort(compilación limpia, sin warnings con-Wall -Wextra -std=c99) ->Tested: 3 | Passing: 3 | Failing: 0 | Crashing: 0(24 aserciones)- Prueba negativa: con la comparación de
insertion_sortinvertida ->Passing: 2 | Failing: 1, confirmando que la suite detecta fallos README(s) verificado(s) / README(s) verified: yes (c/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort3/49 (Ada, Assembly, Ballerina) -> 4/49 (Ada, Assembly, Ballerina, C) Observaciones / Notes: Cuarta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. En C el ordenamiento es in-place (paradigma del lenguaje, permitido por la especificación); el indicador de fallo esNULLy se añadió el octavo caso (arr = NULL). Las pruebas copian cada fixture a un bufferscratchconmemcpyporque los fixtures sonconsty compartidos entre los tres algoritmos.
Fecha / Date: 2026-09-12 Fase / Phase: core.algorithms Módulo(s) / Module(s): core.algorithms.naive_sort Lenguaje(s) / Language(s): clojure Código verificado / Code verified: yes Tests y comandos / Tests and commands:
clojure -T:build testenclojure/core/algorithms/naive_sort->Ran 3 tests containing 24 assertions. 0 failures, 0 errors.- Verificación previa en copia desechable fuera del repositorio, para no tocar
src/durante la generación de tests: implementación funcional correcta -> 0 failures; implementación rota a propósito -> 3 failures con mensajes comoinsertion-sort should sort negative valuesREADME(s) verificado(s) / README(s) verified: yes (clojure/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort4/49 (Ada, Assembly, Ballerina, C) -> 5/49 (Ada, Assembly, Ballerina, C, Clojure) Observaciones / Notes: Quinta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. La realización difiere de la establecida en la especificación: Clojure es funcional y su idioma evita la mutación, así que las tres funciones devuelven siempre una colección nueva en lugar de ordenar in-place; el concepto algorítmico es el mismo. El indicador de fallo esnil(valor válido en Clojure) y se añadió el octavo caso. El runner nativo ya existía (build.clj->cognitect.test-runner), por lo que no se generó un archivo de ejecución aparte.
Fecha / Date: 2026-09-13 Fase / Phase: core.algorithms Módulo(s) / Module(s): core.algorithms.naive_sort Lenguaje(s) / Language(s): cobol Código verificado / Code verified: yes Tests y comandos / Tests and commands:
make clean && make && ./run_testsencobol/core/algorithms/naive_sort-> 78 tests ejecutados, 78 exitosos, 0 fallidos README(s) verificado(s) / README(s) verified: yes (cobol/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort5/49 (Ada, Assembly, Ballerina, C, Clojure) -> 6/49 (Ada, Assembly, Ballerina, C, Clojure, COBOL) Observaciones / Notes: Sexta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. COBOL es un lenguaje orientado a procedimientos que no soporta recursión de forma natural. Todos los algoritmos se implementaron de manera iterativa. El manejo de arrays se realiza mediante estructuras con cláusulas OCCURS. La implementación sigue el patrón de devolver un código de retorno (RETURN-CODE) para indicar éxito o fracaso.
Fecha / Date: 2026-09-13 Fase / Phase: core.algorithms Módulo(s) / Module(s): core.algorithms.naive_sort Lenguaje(s) / Language(s): common-lisp Código verificado / Code verified: yes Tests y comandos / Tests and commands:
ros run --load run-tests.lisp --eval '(uiop:quit)'encommon-lisp/core/algorithms/naive_sort->Running test suite NAIVE-SORT-SUITE ... Did 24 checks. Pass: 24 (100%) Skip: 0 (0%) Fail: 0 (0%)(asdf:test-system :naive-sort)(vía ASDF) -> mismos resultados, 24 checks- Prueba negativa: con la comparación de la suite devolviendo siempre
nil-> 24 fallos, confirmando que la suite detecta fallos README(s) verificado(s) / README(s) verified: yes (common-lisp/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort6/49 (Ada, Assembly, Ballerina, C, Clojure, COBOL) -> 7/49 (Ada, Assembly, Ballerina, C, Clojure, COBOL, Common Lisp) Observaciones / Notes: Séptima implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. La realización difiere del pseudocódigo por convención del lenguaje: Common Lisp es funcional y su idioma evita la mutación, así que las tres funciones devuelven una copia ordenada en lugar de ordenar in-place (la especificación permite ambas variantes). El indicador de fallo esnil(valor válido en Common Lisp) y se añadió el octavo caso controlado (nil->nil), ya que el lenguaje puede representarlo. El sistema base no tiene dependencias externas; se eliminóalexandria, que estaba declarada pero sin usar, yfiveamse usa solo en el sistema de pruebas. Las aserciones usanequalpen vez deequal, porqueequalno compara vectores generales elemento a elemento. El runner nativo funciona con(asdf:test-system :naive-sort)gracias altest-opdeclarado ennaive-sort.asd.
Fecha / Date: 2026-09-13
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): cpp
Código verificado / Code verified: yes (mitigación aplicada: bubble_sort no incluía la salida temprana con bandera swapped exigida por los criterios de aceptación; se añadió y se re-verificó)
Tests y comandos / Tests and commands:
bazelisk test //...encpp/core/algorithms/naive_sort->[==========] 3 tests from 1 test suite ran. [ PASSED ] 3 tests.(21 aserciones: 7 casos × 3 algoritmos)g++ -std=c++17 -Wall -Wextra -Wpedantic -Iinclude -c src/naive_sort.cpp-> sin warnings README(s) verificado(s) / README(s) verified: yes (cpp/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort7/49 (Ada, Assembly, Ballerina, C, Clojure, COBOL, Common Lisp) -> 8/49 (Ada, Assembly, Ballerina, C, Clojure, COBOL, Common Lisp, C++) Observaciones / Notes: Octava implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Verificación previa al README: se comparó la implementación con el pseudocódigo y se detectó quebubble_sortomitía la salida temprana con banderaswapped(criterio de aceptación de05_Naive_Sort.md), lo que degradaba el mejor caso a O(n²); se notificó al desarrollador y se mitigó antes de generar el README. Las demás divergencias no son funcionales: las funciones reciben el vector por valor y devuelven una copia ordenada (la especificación permite in-place o copia), yselection_sortsiempre intercambia, lo que equivale al guardasif (min_idx != i)del pseudocódigo. El caso nulo no es representable constd::vector<int>por valor; se documenta como no representable y se conservan los 7 casos canónicos. La implementación compila sin warnings con-Wall -Wextra -Wpedantic.
Fecha / Date: 2026-09-13
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): crystal
Código verificado / Code verified: yes (corrección aplicada: eliminado return nil if arr.nil? de los tres algoritmos y corregida la sintaxis de lambda en tests)
Tests y comandos / Tests and commands:
crystal specencrystal/core/algorithms/naive_sort-> 3 tests ejecutados, 3 exitosos, 0 fallidos (21 aserciones: 7 casos × 3 algoritmos)crystal build src/naive_sort.cr-> sin warnings ni errores README(s) verificado(s) / README(s) verified: yes (crystal/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort8/49 (Ada, Assembly, Ballerina, C, Clojure, COBOL, Common Lisp, C++) -> 9/49 (Ada, Assembly, Ballerina, C, Clojure, COBOL, Common Lisp, C++, Crystal) Observaciones / Notes: Novena implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Crystal es un lenguaje orientado a objetos con tipado estático inferido. Los tres algoritmos operan in-place sobre el array recibido (paradigma imperativo del lenguaje, permitido por la especificación). El tipoArray(Int32)no permitenil, por lo que el caso de entrada nula no es representable y se documenta como tal. Todos los algoritmos usan iteración (bucleseach,loop,while) siguiendo el estilo idiomático de Crystal, que no garantiza TCO. Las pruebas usan el framework estándarspecde Crystal y clonan los fixtures con.duppara evitar efectos secundarios al ordenar in-place.
Fecha / Date: 2026-09-14
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): csharp
Código verificado / Code verified: yes (mitigación aplicada: las firmas de SelectionSort, BubbleSort e InsertionSort declaraban int[] no anulable pese a comprobar arr == null, lo que producía CS8603 en src/ y CS8622 al pasar los métodos a Func<int[]?, int[]?> en los tests; se cambiaron parámetro y retorno a int[]? y se re-verificó)
Tests y comandos / Tests and commands:
dotnet build NaiveSort.slnxencsharp/core/algorithms/naive_sort-> build correcto, 0 warnings, 0 erroresdotnet test NaiveSort.slnx->Test summary: total: 3, failed: 0, succeeded: 3, skipped: 0, duration: 0.7s(24 aserciones: 8 casos × 3 algoritmos) README(s) verificado(s) / README(s) verified: yes (csharp/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort9/49 (Ada, Assembly, Ballerina, C, Clojure, COBOL, Common Lisp, C++, Crystal) -> 10/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal) Observaciones / Notes: Décima implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. C# tiene los nullable reference types habilitados (<Nullable>enable</Nullable>), por lo que el indicador de fallonullexige declarar parámetro y retorno comoint[]?; se añadió el octavo caso controlado (null->null). Los tres algoritmos ordenan in-place (paradigma imperativo, permitido por la especificación). La clase se llamaNaiveSortImplpara no chocar con el namespaceNaiveSort. El runner esdotnet testsobre la solución.slnx; no se generó un archivo de ejecución aparte porque .NET descubre automáticamente los[Fact]. Se añadió.gitignoredel módulo, pero permanecen 25 archivosbin//obj/ya rastreados en el índice anteriores a su creación.
Fecha / Date: 2026-09-14 Fase / Phase: core.algorithms Módulo(s) / Module(s): core.algorithms.naive_sort Lenguaje(s) / Language(s): d Código verificado / Code verified: yes Tests y comandos / Tests and commands:
dub testend/core/algorithms/naive_sort->1 modules passed unittests(3 bloquesunittest, 24 aserciones: 8 casos × 3 algoritmos)dmd -c -o- -w -wi source/naive_sort.d-> sin salida, exit 0 (compila sin warnings) README(s) verificado(s) / README(s) verified: yes (d/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort10/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal) -> 11/49 (…, C++, Crystal, D) Observaciones / Notes: Undécima implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Los arrays de D son slices (puntero + longitud), por lo quenulles representable y se añadió el octavo caso (null->null). Los tres algoritmos ordenan in-place sobre el slice recibido (idiomático en D).insertionSortusasize_ty la variante de desplazamientowhile (j > 0 && arr[j - 1] > key), equivalente al pseudocódigo sin índice con signo. El paquete se configuró comotargetType "library"y se eliminó elsource/app.dgenerado pordub initporque suvoid main()choca con el runner dedub test(only one entry point 'main' is allowed). Los fixtures del test sonstatic immutabley cada caso ordena una copia con.dup.
Fecha / Date: 2026-09-14
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): dart
Código verificado / Code verified: yes (mitigación aplicada: el scaffold de dart create en example/naive_sort_example.dart seguía referenciando la clase Awesome, eliminada al implementar NaiveSort, y hacía fallar dart analyze con undefined_function; se actualizó el ejemplo a una llamada real a NaiveSort.selectionSort)
Tests y comandos / Tests and commands:
dart testendart/core/algorithms/naive_sort->00:00 +3: All tests passed!(3 tests, 8 casos × 3 algoritmos = 24 aserciones)dart analyze->No issues found!(exit 0) README(s) verificado(s) / README(s) verified: yes (dart/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort11/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D) -> 12/49 (…, D, Dart) Observaciones / Notes: Duodécima implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. El parámetro y el retorno sonList<int>?porquenulles el indicador de fallo del lenguaje, y se añadió el octavo caso (null->null). Los tres algoritmos ordenan in-place sobre la lista recibida (idiomático en Dart). La claseNaiveSortagrupa métodosstatic, siguiendo la convención deNumbersennumbers/. Los fixtures del test sonconsty cada caso ordena una copia conList<int>.of, evitando que la mutación in-place contamine los demás casos o falle contra una lista inmutable.dart analyzeusapackage:lints/recommended.yamlvíaanalysis_options.yaml.
Fecha / Date: 2026-09-14
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): elixir
Código verificado / Code verified: yes (mitigaciones aplicadas: en lib/naive_sort.ex:38, {swapped, rest} = bubble_pass([a | tail]) declaraba una variable swapped sin usar, que hacía fallar mix compile --warnings-as-errors; se renombró a _swapped. Además lib/naive_sort.ex no cumplía mix format --check-formatted por líneas en blanco sobrantes; se aplicó mix format)
Tests y comandos / Tests and commands:
mix compile --force --warnings-as-errorsenelixir/core/algorithms/naive_sort->Compiling 1 file (.ex)yGenerated naive_sort app(exit 0, 0 warnings)mix format --check-formatted-> sin archivos pendientes (exit 0)mix test->Finished in 0.01 seconds (0.00s async, 0.01s sync)yResult: 3 passed(3 tests, 8 casos × 3 algoritmos = 24 aserciones) README(s) verificado(s) / README(s) verified: yes (elixir/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort12/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart) -> 13/49 (…, D, Dart, Elixir) Observaciones / Notes: Decimotercera implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Elixir no tiene bucles imperativos ni listas mutables, así que los tres algoritmos son recursivos y devuelven una lista nueva: elswapin-place del pseudocódigo no es representable (divergencia idiomática aceptada). La banderaswappeddebubble_sortse conserva como el valor de retorno debubble_pass/1, que empaqueta{swapped, lista}, manteniendo la salida temprana.niles el indicador de fallo y se retorna como valor, con el octavo casoassert sort_function.(nil) == nil. Los casos base[]y[a]se resuelven por cláusulas en lugar de unif n <= 1. Ubicación desviada de la especificación: el código va enlib/(convención de Mix) y no hayrun_tests.exsporque ExUnit incorpora su propio runner víamix test. El índice de faseelixir/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-15
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): elm
Código verificado / Code verified: yes (mitigación aplicada: el listado exposing de src/NaiveSort.elm estaba sin cerrar, lo que producía UNFINISHED EXPOSING y hacía fallar elm make y elm-test con exit 1; se añadió el paréntesis de cierre)
Tests y comandos / Tests and commands:
elm make src/NaiveSort.elm --output=/dev/nullenelm/core/algorithms/naive_sort->Success! Compiled 1 module.(exit 0)elm-test->TEST RUN PASSED,Duration: 117 ms,Passed: 21,Failed: 0(3 algoritmos × 7 casos) README(s) verificado(s) / README(s) verified: yes (elm/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort13/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir) -> 14/49 (…, Elixir, Elm) Observaciones / Notes: Decimocuarta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Elm no tiene bucles imperativos ni listas mutables, así que los tres algoritmos son recursivos y devuelven una lista nueva: elswapin-place del pseudocódigo no es representable (divergencia idiomática aceptada). La banderaswappedse devuelve como parte de un par (bubblePass : List Int -> (List Int, Bool)), conservando la salida temprana.pickMinreconstruye la lista restante en un orden distinto al original, sin efecto observable porque se vuelve a ordenar de inmediato. Caso nulo omitido: Elm no tienenull/nilyList Intno admite entradas inválidas; el criterio «sin lanzar excepciones» se cumple porque Elm no tiene excepciones. Ubicación desviada de la especificación: el archivo debe llamarseNaiveSort.elm(PascalCase, igual que el módulo), el directorio de pruebas estests/en plural y no hayrun_tests.elmporqueelm-testdescubre las suites automáticamente.elm.jsondeclaraelm-explorations/testentest-dependencies, no endependencies. El índice de faseelm/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-15
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): erlang
Código verificado / Code verified: yes (sin mitigaciones: rebar3 compile sin warnings y rebar3 eunit en verde tras implementar el módulo, que partía del esqueleto -export([]). de rebar3 new lib)
Tests y comandos / Tests and commands:
rebar3 compileenerlang/core/algorithms/naive_sort->===> Compiling naive_sort(exit 0, 0 warnings)rebar3 eunit->Finished in 0.068 secondsy21 tests, 0 failures(exit 0; 3 algoritmos × 7 casos) README(s) verificado(s) / README(s) verified: yes (erlang/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort14/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm) -> 15/49 (…, Elm, Erlang) Observaciones / Notes: Decimoquinta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Erlang no tiene estructuras mutables (single assignment), así que los tres algoritmos son recursivos y devuelven una lista nueva: elswapin-place del pseudocódigo no es representable (divergencia idiomática aceptada). La banderaswappedse devuelve dentro de un par (bubble_pass/1->{Lista, Swapped}), conservando la salida temprana.rest/2elimina la primera aparición del mínimo en lugar de una posición concreta, sin efecto observable porque ese valor es el que acaba de extraerse. Caso nulo omitido: Erlang no tienenull/nily el tipolist()no admite entradas inválidas; una llamada con un término que no sea lista queda fuera del contrato y provocafunction_clause. Ubicación desviada de la especificación: no hayrun_tests.erlporquerebar3 eunitdescubre automáticamente los módulos*_test.erldetest/; los nombres de archivo y la separaciónsrc/↔test/sí coinciden. La suite usa generadores de EUnit (funciones*_test_()), de modo que cada uno de los 21 tests aparece en la salida con su nombre descriptivo. El índice de faseerlang/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-15
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): forth
Código verificado / Code verified: yes (mitigaciones aplicadas: (1) selection-sort usaba la palabra inexistente min_idx, que impedía cargar el módulo — se declaró variable min-idx y se reescribió el bucle interno; (2) swap-cells era over @ over @ rot ! swap !, que por el orden de ! almacenaba cada valor en su propia celda, es decir un no-op silencioso — se reescribió cruzando los dos almacenamientos con swap-tmp; (3) bubble-sort usaba j (índice externo) dentro del bucle interno, donde el índice interno es i, y la bandera swapped? se asignaba pero nunca se leía — se corrigió el índice y se añadió la salida temprana con leave)
Tests y comandos / Tests and commands:
gforth -e "include src/naive_sort.forth bye"enforth/core/algorithms/naive_sort-> sin salida (exit 0, el módulo carga sin errores)cd test && gforth run-tests.forth->tests runned 78,passed 78,failed 0(exit 0; 3 algoritmos × 26 aserciones) README(s) verificado(s) / README(s) verified: yes (forth/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort15/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang) -> 16/49 (…, Erlang, Forth) Observaciones / Notes: Decimosexta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Forth no tiene tipo array: una secuencia es una dirección más un número de celdas, así que el contrato es( addr count -- )y ordena in-place (divergencia idiomática aceptada frente alselection_sort(arr)del pseudocódigo). La especificación exige entradas de longitud variable (0, 1, 5 y 6 elementos), imposible con aridad fija. En bucles?doanidados Forth da el índice interno eniy el externo enj, al revés de lo que sugiere el pseudocódigo.swap-cellsdocumenta que!es( x addr -- ), por lo que un intercambio debe cruzar los dos almacenamientos y no puede reutilizarlos. Caso nulo omitido: no existe representación de array inválido. Ubicación desviada de la especificación: extensión.forthy namingkebab-case(naive-sort-tests.forth), siguiendo la convención denumbers/; el punto de entradatest/run-tests.forthsí existe y se añade el frameworktest/test.forth. El runner se extendió conset-label/append-labelpara que cada fallo identifique el caso con el formato"{algoritmo} should sort {caso}", verificado con una contra-verificación. El caso del array vacío se ejecuta pero no produce aserciones: con( addr count -- )y count 0 no hay estado observable. El índice de faseforth/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-15
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): fsharp
Código verificado / Code verified: yes (el esqueleto tuvo que recrearse: dotnet new classlib y dotnet new xunit se habían ejecutado sin -lang F# y generaron proyectos de C# — Class1.cs, UnitTest1.cs, Naivesort.csproj — sin <ProjectReference>; se borraron y se recrearon con las plantillas de F#, se apuntaron los .fsproj a NaiveSort.fs y NaiveSortTests.fs y se añadió la referencia entre proyectos. La implementación pasó ambas compuertas sin mitigaciones)
Tests y comandos / Tests and commands:
dotnet build NaiveSort.slnxenfsharp/core/algorithms/naive_sort->Build succeeded.con0 Warning(s)y0 Error(s)(exit 0)dotnet test NaiveSort.slnx->Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 21 ms(exit 0; 3 algoritmos × 7 casos = 21 aserciones) README(s) verificado(s) / README(s) verified: yes (fsharp/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort16/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth) -> 17/49 (…, Forth, F#) Observaciones / Notes: Decimoséptima implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. F# usaint list, que es inmutable, así que los tres algoritmos devuelven una lista nueva y elswapin-place del pseudocódigo no es representable (divergencia idiomática aceptada). La banderaswappedse devuelve dentro de un par (bubblePass->int list * bool), conservando la salida temprana. Los helpers (pickMin,bubblePass,insert) son funciones locales, de modo que la única API son las 3 funciones del contrato — a diferencia denumbers/, donde los helpers son públicos.insertusax <= y, lo que hace la ordenación estable. Caso nulo omitido: F# no permite el literalnullparaint listy no existe representación de lista inválida; el hermano de C# sí lo modela porque tiene los nullable reference types habilitados. Ubicación desviada de la especificación:src/NaiveSort.fs(PascalCase, igual que el módulo, comoNumbers.fs) ytest/NaiveSortTests.fs; no hayrun_testsporquedotnet testdescubre los tests de la solución. El layout es plano (src/{Modulo}.fsprojytest/{Modulo}.Tests.fsproj), siguiendonumbers/en lugar del-o src/{Modulo}de la guía. El.gitignorede la raíz del submódulo cubrebin/yobj/, con 0 artefactos rastreados. El índice de fasefsharp/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-15
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): gleam
Código verificado / Code verified: yes (mitigaciones aplicadas: la primera pasada sólo tenía selection_sort, así que bubble_sort e insertion_sort faltaban y el archivo no estaba formateado; el autor los completó y el formato quedó limpio. Sin cambios míos sobre el código)
Tests y comandos / Tests and commands:
gleam buildengleam/core/algorithms/naive_sort->Compiled in 0.27ssin warnings (exit 0)gleam format --check src test-> sin salida (exit 0); es el comando que ejecuta el CI del propio scaffoldgleam test->3 passed, no failures(exit 0; 3 algoritmos × 7 casos = 21 aserciones) README(s) verificado(s) / README(s) verified: yes (gleam/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort17/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#) -> 18/49 (…, F#, Gleam) Observaciones / Notes: Decimoctava implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Gleam no tiene bucles ni mutabilidad, así que los tres algoritmos son recursivos y devuelven una lista nueva: elswapin-place del pseudocódigo no es representable (divergencia idiomática aceptada). La banderaswappedse pasa como parámetro abubble_passy se devuelve dentro de un par#(List(Int), Bool), conservando la salida temprana. Los helpers (pick_min,bubble_pass,insert) son privados (fnsinpub), de modo que la única API son las 3 funciones del contrato.insertusax <= y, lo que hace la ordenación estable.pick_mindevuelve el resto en el orden en que lo acumuló, sin efecto observable porque se vuelve a ordenar. Caso nulo omitido: Gleam no tienenull/nilni representación de lista inválida. Ubicación:src/naive_sort.gleamytest/naive_sort_test.gleamcoinciden con el naming esperado; no hayrun_testsporque el entry point de gleeunit es una funciónmaindentro del propio módulo de pruebas, ygleam testademás exige que ese módulo se llame<name>_testsegún el camponamedegleam.toml. Se eliminó la funciónmainde ejemplo que generagleam newensrc/, igual que ennumbers/. El índice de fasegleam/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-15
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): go
Código verificado / Code verified: yes (el esqueleto se entregó sin implementación — sólo package src y la cabecera del contrato — y go test ./... fallaba con imported and not used y undefined: SelectionSort/BubbleSort/InsertionSort; el autor añadió las tres funciones y ambas compuertas pasaron sin mitigaciones. Sin cambios míos sobre el código)
Tests y comandos / Tests and commands:
go vet ./...engo/core/algorithms/naive_sort-> sin salida (exit 0)gofmt -l .-> sin salida (exit 0)go build ./...-> sin salida (exit 0)go test ./... -v -count=1->--- PASS: TestSelectionSort,--- PASS: TestBubbleSort,--- PASS: TestInsertionSort,PASS,ok example.com/naive_sort/tests 0.003s(exit 0; 3 algoritmos × (7 casos + caso nulo) = 24 aserciones)- Contra-verificación en copia desechable (
/tmp, ya eliminada): cambiandoarr[j] < arr[minIdx]por>enselection_sort->--- FAIL: TestSelectionSortconMessages: selection_sort should sort an unsorted array(y los demás casos afectados), exit 1; revertido ->okREADME(s) verificado(s) / README(s) verified: yes (go/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort18/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam) -> 19/49 (…, Gleam, Go) Observaciones / Notes: Decimonovena implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Go sí puede representar el caso nulo y ordenar in-place, así que los tres algoritmos mutan el slice recibido y lo devuelven, y el indicador de fallo es el slicenil: la guardalen(arr) <= 1devuelve el propio slice sin tocarlo, de modo quenilentra ynilsale sin comprobación especial nipanic. Es el segundo hermano de la fase, tras C# conint[]?, que cubre el caso nulo de forma explícita; el caso nulo se prueba por separado del caso vacío porquenily[]int{}son valores distintos en Go. Como los fixtures de la suite son variables compartidas a nivel de paquete y los algoritmos mutan in-place, cada caso ordena una copia creada concopyInput(make+copy). La banderaswappedse conserva usandofor swappedcomo condición del bucle externo, equivalente alswapped+breakdel pseudocódigo sin contar pasadas con un índice externo;selection_sortintercambia sin la guardaif min_idx != idel pseudocódigo, sin efecto observable porque un auto-intercambio es un no-op. Naming exportado enPascalCase(SelectionSort,BubbleSort,InsertionSort), obligatorio porque los tests viven en el paquetetestsseparado del paquetesrc. Ubicación desviada de la especificación: el directorio de pruebas estests/en plural (siguiendonumbers/) y no existerun_testsporquego test ./...descubre automáticamente las funcionesTestXxx; la extensión.goy el nombrenaive_sort.gosí coinciden..gitignore: no se añade uno de módulo porque el de la raíz dego/ya cubre los artefactos, verificado congit check-ignore -v tests/tests.test->.gitignore:12:*.test, con 0 artefactos rastreados. La versión detestifyse fijó av1.11.1para quego.modcoincida exactamente con el denumbers/(go mod tidyhabía resueltov1.12.1). El índice de fasego/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-15
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): grain
Código verificado / Code verified: yes (tres pasadas. Las dos primeras no compilaban: faltaba => en las ocho definiciones de función, los match no llevaban paréntesis, los brazos usaban | inicial y comas omitidas, el patrón x::xs no existe en Grain, not swapped no es operador y List.get/List.set no existen en la biblioteca estándar; además los nombres exportados eran selectionsort/bubblesort/insertionsort. Con autorización del autor se reescribió el módulo: sintaxis válida de Grain 0.7.2, naming camelCase, pickMin/removeFirst/bubblePass/insert anidados con let rec dentro de su función padre como en numbers/, y sin ninguna llamada a biblioteca — se eliminó el List.reduce que usaba insertionSort y el from "list" include List, de modo que el módulo sólo usa literales [...], pattern matching [x, ...xs], comparaciones y recursión)
Tests y comandos / Tests and commands:
make buildengrain/core/algorithms/naive_sort-> sin salida (exit 0, sin warnings)make test->grain compile tests/run_tests.gr+grain run tests/run_tests.wasm,--- Test Summary ---,Tests: 21 passed, 0 failed, 21 total(exit 0; 3 algoritmos × 7 casos)grep -n "List\.\|include\|import" src/naive_sort.gr-> sin coincidencias (0 llamadas a biblioteca en la implementación)- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendox < minValueporx > minValueen elpickMindeselectionSort->FAILED: selection_sort should sort an unsorted array — expected [1, 2, 5, 5, 6, 9], got [9, 6, 5, 5, 2, 1]y otros 3 casos,Tests: 17 passed, 4 failed, 21 total; revertido ->21 passed, 0 failedREADME(s) verificado(s) / README(s) verified: yes (grain/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort19/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go) -> 20/49 (…, Go, Grain) Observaciones / Notes: Vigésima implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. El literal[1, 2, 3]de Grain construye unaList<Number>, que es inmutable —Arrayes el tipo mutable, pero ni el literal idiomático ninumbers/lo usan —, así que los tres algoritmos son recursivos y devuelven una lista nueva: elswapin-place del pseudocódigo no es representable (divergencia idiomática aceptada). La banderaswappedse devuelve dentro de un par(List<Number>, Bool), conservando la salida temprana: una lista ya ordenada se resuelve en una sola pasada.insertusax <= y, lo que hace la ordenación estable.removeFirstelimina la primera aparición del mínimo, sin efecto observable aunque el mínimo se repita (caso[7, 7, 7, 7]). Caso nulo omitido: Grain no tienenull/nilni listas inválidas, igual que F# y Gleam. La implementación no importa ningún módulo de la biblioteca estándar y no hace ninguna llamadaList.*, en línea con el criterio de aceptación de la especificación; los helpers van anidados conlet recdentro de la función padre, por lo que son privados a ese ámbito y la única API pública son las 3 funciones del contrato (insertionSortno llevarecporque la recursión vive en su helperloop, igual que el enfoque con acumulador denumbers/). Ubicación desviada de la especificación: el directorio de pruebas estests/en plural (siguiendonumbers/) y la extensión es.gr; el punto de entradatests/run_tests.grsí existe y se le añadetests/testing.gr, el mini framework reutilizado literalmente denumbers/(md5b50574efd745fbc03c47c3c30ded2312)..gitignorepropio contarget/,*.gro,*.wasmy*.wasm.map: los dos últimos no estaban cubiertos ennumbers/(dondetests/run_tests.wasmqueda como artefacto no ignorado), verificado congit check-ignore -vsobre los 5 artefactos y con 0 artefactos rastreados. El índice de fasegrain/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-16
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): groovy
Código verificado / Code verified: yes (sin mitigaciones. ./gradlew compileGroovy compileTestGroovy compila src/main y src/test sin ningún diagnóstico; los 4 avisos Deprecated Gradle features que emite Gradle provienen del bloque testlogger de lib/build.gradle:53-57 —sintaxis de asignación con espacio, retirada en Gradle 10— y son idénticos, línea por línea, en el bloque homólogo de foundations/numbers, así que se documentan en el README como aviso heredado del scaffold y no como defecto del código)
Tests y comandos / Tests and commands:
./gradlew clean test --rerun-tasks --console=plainengroovy/core/algorithms/naive_sort->> Task :lib:test,org.example.NaiveSortTest,Test selection_sort should sort all cases PASSED,Test bubble_sort should sort all cases PASSED,Test insertion_sort should sort all cases PASSED,SUCCESS: Executed 3 tests in 655ms,BUILD SUCCESSFUL in 2s(exit 0; 3 tests × (7 casos + caso nulo) = 24 aserciones)git check-ignore -vsobre.gradle/8.14.3/gc.properties,lib/build/.../NaiveSort.class,build/reports/.../index.htmlylib/bin/.../NaiveSort.groovy-> cubiertos por.gitignore:2:.gradle,.gitignore:5:buildy.gitignore:11:bin; 0 artefactos rastreados en el módulo- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendoarr[j] > keyporarr[j] < keyen el bucle interno deinsertionSort->Test insertion_sort should sort all cases FAILED,insertion_sort should sort an unsorted array,FAILURE: Executed 3 tests in 937ms (1 failed); revertido ->SUCCESS: Executed 3 testsREADME(s) verificado(s) / README(s) verified: yes (groovy/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort20/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain) -> 21/49 (…, Grain, Groovy) Observaciones / Notes: Vigesimoprimera implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. El scaffold se generó congradle init --type groovy-library, que produce un proyecto Gradle multiproyecto con submódulolib; se eliminaron los placeholdersLibrary.groovyyLibraryTest.groovyy se añadió alib/build.gradleel plugincom.adarshr.test-logger4.0.0 con su bloquetestlogger, para que la salida muestre cada test por nombre igual que ennumbers/. La especificación admite ordenar in-place o devolver una copia: las tres funciones hacenlist.clone()y ordenan la copia, de modo que la lista del llamador nunca se muta mientras la mutación interna sigue siendo la del pseudocódigo. Groovy admitenullenList<Integer>, así que el caso nulo sí es representable y se cubre de forma explícita:if (list == null) return null, sin lanzar excepciones, y separado del caso vacío porquenully[]son valores distintos. La banderaswappedse implementa condo { ... } while (swapped), equivalente alswapped+breakdel pseudocódigo, conservando el mejor caso $O(n)$; el bucle interno no se acorta con el contador de pasadas (for j = 0 to n - 2 - i), lo que no altera el comportamiento observable ni la complejidad prometida y queda documentado en el README.insertionSortdesplaza conarr[j] > keyestricto, lo que la hace estable. NamingcamelCase(NaiveSort.selectionSort(list)), coherente conNumbers.sumFirstNRec(n); los tres cuerpos son autocontenidos, con los bucles internos inline. Ubicación desviada de la especificación: el layout eslib/src/main/groovy/org/example/ylib/src/test/groovy/org/example/(árbol estándar de Gradle y paqueteorg.example, igual quenumbers/) y no existerun_testsporque./gradlew testdescubre las clasesSpecificationde Spock. El.gitignoreañadebina las entradas generadas (.gradle,build,.kotlin) para cubrir las clases que algunos IDE compilan fuera debuild/, verificado congit check-ignore -v. El índice de fasegroovy/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-16
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): haskell
Código verificado / Code verified: yes (mitigación aplicada con autorización: cabal build all con -Wall reportaba lib/NaiveSort.hs:44:24: warning: [GHC-40910] [-Wunused-local-binds] Defined but not used: 'swapped' — en la rama x > y de bubblePass se ligaba la bandera de la llamada recursiva y se descartaba, porque esa rama devuelve True incondicionalmente; se cambió let (swapped, rest) por let (_, rest). Tras la mitigación lib/ y test/ compilan sin ningún warning con -Wall)
Tests y comandos / Tests and commands:
cabal build all --enable-testsenhaskell/core/algorithms/naive_sort-> compila la librería ([1 of 1] Compiling NaiveSort), el spec ([1 of 2] Compiling NaiveSortSpec) y el runner ([2 of 2] Compiling Main) sin ningún warning (exit 0)cabal test --test-show-details=direct-> 21 ejemplos con nombre"{algoritmo} should sort {caso}",Finished in 0.0008 seconds,21 examples, 0 failures,Test suite naive-sort-test: PASS,1 of 1 test suites (1 of 1 test cases) passed.(exit 0; 3 algoritmos × 7 casos)git check-ignore -v dist-newstyle/build/.../NaiveSort.o->.gitignore:2:dist-*(el.gitignorede la raíz dehaskell/ya cubre los artefactos; no se añade uno de módulo, igual que ennumbers/), con 0 artefactos rastreados- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendox > yporx < yenbubblePass->bubble_sort should sort an unsorted array [✘],bubble_sort should sort an already sorted array [✘],bubble_sort should sort a reverse ordered array [✘]ybubble_sort should sort an array with negative numbers [✘](los casos de un elemento, idénticos y vacío siguen pasando, como es de esperar); revertido ->21 examples, 0 failuresREADME(s) verificado(s) / README(s) verified: yes (haskell/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort21/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy) -> 22/49 (…, Groovy, Haskell) Observaciones / Notes: Vigesimosegunda implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. El scaffold se generó concabal init --lib; se eliminó el placeholderMyLib.hsy el manifiesto se alineó connumbers.cabal:exposed-modules: NaiveSort,other-modules: NaiveSortSpecyhspec ^>=2.11.0enbuild-dependsdel test-suite.[Int]es inmutable, así que los tres algoritmos devuelven una lista nueva: elswapin-place del pseudocódigo no es representable (divergencia idiomática aceptada). Caso nulo omitido: Haskell no tienenullni listas inválidas, igual que F# y Gleam. La banderaswappedviaja en un par(Bool, [Int])devuelto porbubblePass, conservando la salida temprana; la ramax > ydescarta la bandera de la recursión porque devuelveTrueincondicionalmente; esa ligadura sin usar era el único warning de-Wally quedó mitigada.bubblePassno acorta la pasada con el contador externo del pseudocódigo (0 to n-2-i), sin cambio observable ni de complejidad.insertionSortordena la cola y luego inserta la cabeza (insert x (insertionSort xs)) en lugar de acumular un prefijo ordenado de izquierda a derecha, yinsertusax <= y, lo que hace la ordenación estable.pickMin :: [Int] -> (Int, [Int])fusiona en una sola pasada la búsqueda del mínimo y su extracción del resto, así queselectionSortno necesita un segundo recorrido; su guardaerrores inalcanzable desde la API exportada porqueselectionSortresuelve antes[]y[x], de modo que ninguna función del contrato lanza excepciones. El módulo exporta sólo las 3 funciones del contrato;pickMin,bubblePasseinsertson privados. Ubicación desviada de la especificación:lib/NaiveSort.hs(PascalCase, igual queNumbers.hs),test/NaiveSortSpec.hs(sufijoSpec, comoRecursiveSpec.hs) ytest/RunTests.hs, que sí existe como punto de entrada declarado enmain-is. El índice de fasehaskell/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): haxe
Código verificado / Code verified: yes (sin mitigaciones. haxe build.hxml compila src/ y test/ sin ningún diagnóstico; el build.hxml sólo desactiva un aviso interno de la propia librería utest con -w -WDeprecatedEnumAbstract, como en numbers/)
Tests y comandos / Tests and commands:
haxe build.hxmlenhaxe/core/algorithms/naive_sort->assertations: 123,successes: 123,errors: 0,failures: 0,warnings: 0,results: ALL TESTS OK (success: true),test.NaiveSortTestcontestBubbleSort: OK,testInsertionSort: OK,testSelectionSort: OK(exit 0; 3 funciones × 8 casos —7 de la especificación + el nulo—, 123 aserciones por el desglose deassertArrayEqualsen longitud + elemento)cat -A .gitignore->.haxelib/,.haxelsp/recording/,dump/ybin/;--interpno genera artefactos, así que no hay nada que destrackear (0 artefactos rastreados en el módulo)- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendoarr[j] < arr[minIndex]porarr[j] > arr[minIndex]enselectionSort->failures: 16frente asuccesses: 107, con mensajesline: 40, selection_sort should sort an unsorted array (mismatch at index 0),… (mismatch at index 1), y los mismos paraan already sorted array; revertido ->123 successes, 0 failuresREADME(s) verificado(s) / README(s) verified: yes (haxe/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort22/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell) -> 23/49 (…, Haskell, Haxe) Observaciones / Notes: Vigesimotercera implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Haxe permite reproducir el pseudocódigo casi literalmente:Array<Int>es mutable y se pasa por referencia, así que los tres algoritmos ordenan in-place el array recibido y lo devuelven, y las cotas de los bucles se copian tal cual (0...n - 1,i + 1...ny0...n - i - 1, cuyos rangos excluyen el límite superior). La banderaswappedse implementa conif (!swapped) break;, igual que el pseudocódigo.insertionSortdesplaza conarr[j] > keyestricto, lo que la hace estable.Array<Int>admitenull, así que el caso nulo sí es representable y se cubre de forma explícita conif (arr == null) return null;, sin lanzar excepciones y separado del caso vacío porquenully[]son valores distintos. Como los fixtures de la suite son constantes compartidas a nivel de clase y los algoritmos mutan in-place, cada caso ordena una copia creada con.copy(). NamingcamelCase(NaiveSort.selectionSort(arr)), coherente conNumbers.sumOfFirstNRec(n); los tres cuerpos son autocontenidos, con los bucles inline. Ubicación desviada de la especificación:src/NaiveSort.hxytest/NaiveSortTest.hx(Haxe exige que el archivo se llame como la clase), y el punto de entradaRunTests.hxvive en la raíz del módulo, no entest/, porque-cp .cubre el directorio y así lo hacenumbers/. El índice de fasehaxe/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): java
Código verificado / Code verified: yes (sin mitigaciones sobre el código. El scaffold del archetype tuvo que reestructurarse: mvn archetype:generate con maven-archetype-quickstart:1.4 generó layout anidado naive_sort/naive_sort/, groupId com.example, Java 1.7, JUnit 4.11, paquete com.example y un App.java con main; se aplanó el layout, se reescribió pom.xml como el de numbers/ y se eliminó el placeholder. Sobre el pom.xml se aplicó una segunda corrección autorizada: maven.compiler.source/target = 17 emitía [WARNING] location of system modules is not set in conjunction with -source 17 bajo el JDK 25 del entorno, así que se sustituyó por <maven.compiler.release>25</maven.compiler.release>, que fija source, target y la plataforma de APIs y elimina el aviso)
Tests y comandos / Tests and commands:
mvn clean test-compileenjava/core/algorithms/naive_sort->[INFO] Building naive_sort 1.0.0,[INFO] BUILD SUCCESS, sin ningún warning (exit 0)mvn test->[INFO] Running naive_sort.NaiveSortTest,[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.039 s -- in naive_sort.NaiveSortTest,[INFO] BUILD SUCCESS(exit 0; 3 algoritmos × 8 casos —7 de la especificación + el nulo— = 24 aserciones)git check-ignore -v target/classes/naive_sort/NaiveSort.class->core/algorithms/naive_sort/.gitignore:1:target/ target/classes/naive_sort/NaiveSort.class, con 0 artefactos rastreados- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendoarr[j] > arr[j + 1]porarr[j] < arr[j + 1]enbubbleSort->naive_sort.NaiveSortTest.testBubbleSort -- Time elapsed: 0.006 s <<< FAILURE!,org.opentest4j.AssertionFailedError: bubble_sort should sort an unsorted array ==> array contents differ at index [0], expected: <1> but was: <9>,Failures: 1; revertido ->Tests run: 3, Failures: 0README(s) verificado(s) / README(s) verified: yes (java/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort23/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe) -> 24/49 (…, Haxe, Java) Observaciones / Notes: Vigesimocuarta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Java permite reproducir el pseudocódigo casi literalmente:int[]es mutable y se pasa por referencia, así que los tres algoritmos ordenan in-place el array recibido y lo devuelven, y las cotas de los bucles se copian tal cual (i < n - 1,j = i + 1,j < n - i - 1). La banderaswappedse implementa conif (!swapped) break;, igual que el pseudocódigo.insertionSortdesplaza conarr[j] > keyestricto, lo que la hace estable.int[]admitenull, así que el caso nulo sí es representable y se cubre de forma explícita conif (arr == null) return null;, sin lanzar excepciones y separado del caso vacío porquenullynew int[0]son valores distintos. Como los fixtures de la suite son constantesstatic finaly los arrays de Java son mutables, cada caso ordena una copia creada con.clone(). NamingcamelCase(NaiveSort.selectionSort(arr)), coherente conNumbers.sumOfFirstNRec(n); los tres cuerpos son autocontenidos, con los bucles inline. Ubicación desviada de la especificación: layout estándar de Maven (src/main/java/naive_sort/NaiveSort.javaysrc/test/java/naive_sort/NaiveSortTest.java), con el paquete igual al nombre del módulo como ennumbers/, y sinrun_testsporquemvn testdescubre los métodos@Testcon surefire. Nivel de Java: los tres módulos del submódulo (naive_sort,numbersycalculator) declaran<maven.compiler.release>25</maven.compiler.release>porque el JDK por defecto del entorno es el 25.0.4;numbers/ycalculator/se alinearon en el mismo cambio (ver la entradacore.foundations.numbers+core.foundations.unit_testde esta misma fecha). El índice de fasejava/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18
Fase / Phase: core
Módulo(s) / Module(s): core.foundations.numbers + core.foundations.unit_test
Lenguaje(s) / Language(s): java
Código verificado / Code verified: yes (cambio de toolchain, sin tocar código ni pruebas: maven.compiler.source/target = 17 sustituido por <maven.compiler.release>25</maven.compiler.release> en los dos pom.xml, alineándolos con core/algorithms/naive_sort. Motivo: bajo el JDK 25.0.4 del entorno, -source 17 -target 17 hacía que javac no encontrara los módulos del sistema y emitiera [WARNING] location of system modules is not set in conjunction with -source 17; release fija source, target y la plataforma de APIs a la vez y elimina el aviso. Efecto: los tres módulos de Java requieren ahora JDK 25 para compilarse; el código no usa características posteriores a Java 8)
Tests y comandos / Tests and commands:
mvn clean testenjava/core/foundations/numbers->[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0 ... in numbers.NumbersRecursiveTest,[INFO] Tests run: 5 ... in numbers.NumbersIterativeTest,[INFO] Tests run: 10, Failures: 0, Errors: 0, Skipped: 0,[INFO] BUILD SUCCESS, sin ningún warning (exit 0)mvn clean testenjava/core/foundations/unit_test/calculator->[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0 ... in calculator.CalculatorTest,[INFO] BUILD SUCCESS, sin ningún warning (exit 0) README(s) verificado(s) / README(s) verified: yes (java/README.md,java/core/foundations/README.md,java/core/foundations/numbers/README.md,java/core/foundations/unit_test/calculator/README.md,java/core/algorithms/README.mdyjava/core/algorithms/naive_sort/README.md— todas las menciones a JDK 17 y al nivel de lenguaje actualizadas) Cambio en ROADMAP.md / ROADMAP.md change: ninguno (los contadoresX/49no cambian: no se cierra ningún módulo, solo se actualiza el toolchain de módulos ya cerrados) Observaciones / Notes: Cambio transversal de toolchain en los módulos de Java ya homologados, para que los tres compartan el mismo nivel declarado y ninguno emita avisos al compilarse bajo el JDK por defecto (25.0.4). Se actualizaron también las cinco menciones a «JDK 17» / «Java 17» repartidas entre el README del submódulo, el de la fase de fundamentos y los denumbersycalculator, y las dos notas dealgorithmsque describían la discrepancia anterior. Si en el futuro se quiere recuperar la portabilidad a JDK 17, basta con cambiar25por17en los trespom.xml:release 17también elimina el aviso, porque el problema era usarsource/targeten lugar derelease, no el número de versión.
Fecha / Date: 2026-09-18
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): javascript
Código verificado / Code verified: yes (sin mitigaciones. El scaffold de npm init generó un package.json mínimo en javascript/algorithms/naive_sort — sin el segmento core/ — así que el directorio se movió a javascript/core/algorithms/naive_sort y el manifiesto se reescribió con la forma del de numbers/: main, script test y jest ^30.0.5 en devDependencies)
Tests y comandos / Tests and commands:
node --check src/naive_sort.js,node --check test/naive_sort.test.jsynode --check jest.config.js-> sin salida (exit 0); es la verificación estática disponible, ya que JavaScript no tiene compilador y el módulo no configura linter, igual quenumbers/npm test->Test Suites: 1 passed, 1 total,Tests: 3 passed, 3 total,Time: 0.208 s(exit 0; 3 algoritmos × 8 casos —7 de la especificación + el nulo— = 24 aserciones)npm install->added 278 packages, and audited 279 packages in 9s,found 0 vulnerabilities; generapackage-lock.json, que se versiona como ennumbers/ycalculator/git check-ignore -v node_modules/jest/package.json->core/algorithms/naive_sort/.gitignore:1:node_modules/, con 0 artefactos rastreados- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendoarr[j] < arr[minIndex]porarr[j] > arr[minIndex]enselectionSort->● selection_sort,selection_sort should sort an unsorted array,expected: [1, 2, 5, 5, 6, 9],received: [9, 6, 5, 5, 2, 1],Tests: 1 failed, 2 passed, 3 total; revertido ->3 passed, 3 totalREADME(s) verificado(s) / README(s) verified: yes (javascript/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort24/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java) -> 25/49 (…, Java, JavaScript) Observaciones / Notes: Vigesimoquinta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. JavaScript permite reproducir el pseudocódigo casi literalmente: los arrays son mutables y se pasan por referencia, así que los tres algoritmos ordenan in-place el array recibido y lo devuelven, y las cotas de los bucles se copian tal cual (i < n - 1,j = i + 1,j < n - i - 1). El intercambio usa asignación por destructuring ([arr[i], arr[minIndex]] = [arr[minIndex], arr[i]]), sin variable temporal. La banderaswappedse implementa conif (!swapped) break;, igual que el pseudocódigo.insertionSortdesplaza conarr[j] > keyestricto, lo que la hace estable. El indicador de fallo usaarr == null(comparación no estricta deliberada), que cubre a la veznullyundefined; el caso nulo se prueba explícitamente y por separado del vacío, porquenully[]son valores distintos. Como los fixtures de la suite son constantes de módulo y los arrays de JavaScript son mutables, cada caso ordena una copia creada con[...input]. NamingcamelCase, coherente connumbers/; las funciones se declaran confunction(ennumbers/sonconst f = () => {}) para poder colocar elmodule.exportsal principio gracias al hoisting, y el módulo exporta sólo las 3 funciones del contrato. La suite registra un matcher propio conexpect.extend(toBeSortedAs) para poder adjuntar el mensaje"{algoritmo} should sort {caso}"al fallo, ya que Jest no acepta un mensaje como argumento deexpect(); el helper compartido sigue siendo único. Ubicación desviada de la especificación:src/naive_sort.jsytest/naive_sort.test.js(la convención de Jest del repositorio es el sufijo*.test.js, comonumbers.rec.test.js), y no existerun_testsporquenpm testejecutajest, que descubre los archivos portestMatch. El índice de fasejavascript/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): julia
Código verificado / Code verified: yes (sin mitigaciones. El módulo no existía, así que se creó con la estructura manual que marca la guía —mkdir -p src test + Project.toml— siguiendo la convención de numbers/: Project.toml con nombre, UUID propio, [compat] julia = "1.10" y el target de test, src/NaiveSort.jl con module + export, y el punto de entrada test/run_tests.jl)
Tests y comandos / Tests and commands:
julia --project=. -e 'include("src/NaiveSort.jl")'-> sin salida (exit 0); es la verificación estática disponible, ya que Julia no tiene compilador con avisos y el módulo no configura linter, igual quenumbers/julia --project=. test/run_tests.jl->Test Summary: | Pass Total Time,Naive Sort Tests | 24 24 0.5s(exit 0; 3 algoritmos × 8 casos —7 de la especificación + el nulo— = 24 aserciones)git check-ignore -v core/algorithms/naive_sort/Manifest.toml->.gitignore:24:Manifest*.toml; el módulo no necesita.gitignorepropio porque el de la raíz dejulia/ya cubre los artefactos (Manifest*.toml,*.jl.cov,*.jl.mem,LocalPreferences.toml), con 0 artefactos rastreados- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendoarr[j] < arr[min_index]porarr[j] > arr[min_index]enselection_sort->selection_sort should sort an unsorted array: Test Failed at .../naive_sort_tests.jl:53, y los mismos paraan already sorted array,a reverse ordered arrayyan array with negative numbers, con20 passed, 4 failed, 0 errored; revertido ->24 passedREADME(s) verificado(s) / README(s) verified: yes (julia/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort25/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript) -> 26/49 (…, JavaScript, Julia) Observaciones / Notes: Vigesimosexta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Julia usasnake_casepara las funciones, que es justo la convención de la especificación, así que la API esselection_sort,bubble_sorteinsertion_sortsin traducir los nombres. La única divergencia estructural respecto al pseudocódigo es la indexación basada en 1, impuesta por el lenguaje:j = i + 1 to n - 1pasa afor j in i+1:n,j = 0 to n - 2 - ipasa afor j in 1:n-iy la inserción desplaza desdei = 2conj >= 1, con el mismo número de iteraciones y el mismo orden de comparaciones.Vectores mutable y se pasa por referencia, así que los tres algoritmos ordenan in-place el vector recibido y lo devuelven, con intercambio por asignación múltiple (arr[i], arr[min_index] = arr[min_index], arr[i]). La banderaswappedse implementa conif !swapped break end, igual que el pseudocódigo.insertion_sortdesplaza conarr[j] > keyestricto, lo que la hace estable. Julia no tienenull: su valor de «ningún valor» esnothing(singleton deNothing), así que el caso nulo es representable y se cubre conif arr === nothing return nothing end, comparación de identidad idiomática contra un singleton, separado del caso vacío porquenothingyInt[]son valores distintos. Los parámetros van sin anotación de tipo, como ennumbers/, lo que permite aceptarnothing. Como los fixtures de la suite son constantes de módulo y los vectores de Julia son mutables, cada caso ordena una copia creada concopy(input). La descripción de cada caso va en el nombre del@testsetque genera el helper ("$algorithm should sort $description"), porque@testno admite mensaje adjunto;run_tests.jlconserva el nombre exacto que espera la especificación y quePkg.test()busca por convención. Ubicación desviada de la especificación:src/NaiveSort.jl(PascalCase, igual que el módulo, comoNumbers.jl) ytest/naive_sort_tests.jl(sufijo_tests.jl, comorecursive_tests.jl). El índice de fasejulia/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): kotlin
Código verificado / Code verified: yes (sin mitigaciones; gradle compileKotlin compileTestKotlin no emite ninguna línea w: ni e:)
Tests y comandos / Tests and commands:
gradle compileKotlin compileTestKotlin --console=plain->BUILD SUCCESSFUL in 1s(exit 0, sin avisos del compilador de Kotlin)gradle test --console=plain->> Task :testyBUILD SUCCESSFUL in 1s(exit 0); el reportebuild/test-results/test/TEST-naive_sort.NaiveSortTest.xmldatests="3" skipped="0" failures="0" errors="0"con lostestcaseselection_sort,bubble_sorteinsertion_sort(3 algoritmos × 8 casos —7 de la especificación + el nulo— = 24 comprobaciones)git check-ignore -v core/algorithms/naive_sort/build/classes->.gitignore:3:build/;.gradle/y.kotlin/por las líneas 2 y 7; los cuatro patrones generados (.gradle/,build/,bin/,.kotlin/) son idénticos a los denumbers/ycalculator/, y con 6 archivos rastreados en el módulo no hay ningún artefacto versionado- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendoarr[j] < arr[minIndex]porarr[j] > arr[minIndex]enselectionSort->NaiveSortTest > selection_sort FAILEDyBUILD FAILED in 2s(exit 1), conorg.opentest4j.AssertionFailedError: selection_sort should sort an unsorted array/Element differ at index: [0, 1, 4, 5]/expected:<[1, 2, 5, 5, 6, 9]> but was:<[9, 6, 5, 5, 2, 1]>; revertido -> verde README(s) verificado(s) / README(s) verified: yes (kotlin/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort26/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia) -> 27/49 (…, Julia, Kotlin) Observaciones / Notes: Vigesimoséptima implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Kotlin usacamelCasepara las funciones (selectionSort,bubbleSort,insertionSort), que es su convención, mientras que la especificación las nombra ensnake_case; el nombre de la especificación se conserva como nombre del test, de modo que el reporte de Gradle y lostestcasedel XML siguen mostrandoselection_sort,bubble_sorteinsertion_sort. Las tres funciones se exponen como miembros de unobject(NaiveSort), igual queNumbers.ktennumbers/, y comparten la firma(IntArray?): IntArray?, lo que permite que el helper de test las reciba como referencia de función sin envolverlas en lambdas.IntArrayes mutable y se pasa por referencia en la JVM, así que los tres algoritmos ordenan in-place el array recibido y devuelven ese mismo array; los casos se aíslan copiando la entrada concase.input?.copyOf()porque los fixtures son constantes compartidas. Kotlin no necesita mecanismos artificiales para el indicador de fallo:IntArray?admitenull, así queif (arr == null) return nulles la comprobación idiomática, y el caso nulo, que es representable, se prueba de forma independiente del caso vacío ([]). Las cotas de los bucles reproducen literalmente las del pseudocódigo mediante rangos semiabiertos (0 until n - 1,i + 1 until n,0 until n - i - 1), que ya excluyen el extremo superior, sin desplazamientos manuales con-1/+1que justificar. La banderaswappedse implementa conif (!swapped) break, como exige la especificación, lo que deja el mejor caso en O(n);insertionSortdesplaza con la comparación estrictaarr[j] > key, lo que la hace estable. En los tests, el mensaje del contrato se antepone conwithClue("$algorithm should sort ${case.description}"), y la comparación usa.toList()porqueIntArrayno sobrescribeequalsy comparar arrays directamente compararía referencias. El proyecto se generó congradle inity se reestructuró para alinearlo connumbers/: se aplanó el layout multi-proyecto (lib/ygradle/libs.versions.toml), se sustituyó JUnit por Kotest 6.2.4 (kotest-runner-junit5+kotest-assertions-core), el paqueteorg.examplepasó anaive_sorty se eliminaron el wrapper (gradlew,gradlew.bat,gradle/wrapper/) y el catálogo de versiones, porque ninumbers/nicalculator/los incluyen; el pluginkotlin("jvm") version "2.4.10"va versionado en línea. Ubicación desviada de la especificación:src/main/kotlin/naive_sort/NaiveSort.kt(layout estándar de Gradle, archivo enPascalCasecomoNumbers.kt) ysrc/test/kotlin/naive_sort/NaiveSortTest.kt(sufijoTest, comoNumbersIterativeTest.kt), sin equivalente atest/run_tests.extporque Gradle descubre y ejecuta la suite a través de JUnit Platform. El índice de fasekotlin/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): lua
Código verificado / Code verified: yes (sin mitigaciones; luac -p válido en ambos archivos y la carga con lua -W no emite avisos)
Tests y comandos / Tests and commands:
luac -p src/naive_sort.luayluac -p test/naive_sort_tests.lua-> sin salida y exit 0 en ambos; la distribución estándar de Lua no trae analizador estático, así que la verificación estática es el modo «solo analizar» del compiladorlua -W -e 'require("naive_sort")'->function function function(las tres funciones existen y la carga no emite warnings)busted->●●●y3 successes / 0 failures / 0 errors / 0 pending : 0.000791 seconds(exit 0; 3 tests, uno por algoritmo, con los 8 casos como aserciones dentro de cada uno = 24 comprobaciones)luarocks test naive_sort-1.0.0-1.rockspec->3 successes / 0 failures / 0 errors, connaive_sort 1.0.0-1 depends on busted (2.3.0-1 installed: success)luarocks make naive_sort-1.0.0-1.rockspec->naive_sort 1.0.0-1 is now installed in /home/yorche3/.luarocks (license: MIT), tras lo cualrequire("naive_sort")resuelve el módulogit check-ignore -v lua_modules/lib/x luarocks lua .luarocks/config-5.5.lua naive_sort-1.0.0-1.src.rock luac.out-> el.gitignoredel módulo cubre los artefactos del proyecto de LuaRocks (/luarocks,/lua,/lua_modules,/.luarocks) y el de la raíz delua/cubre*.src.rocky*.out; ninguno de esos directorios existía tras ejecutar los comandos precedentes- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendoarr[j] < arr[min_index]porarr[j] > arr[min_index]enselection_sort->2 successes / 1 failure / 0 errors / 0 pending, contest/naive_sort_tests.lua:65: selection_sort should sort an unsorted arrayy el array{9, 6, 5, 5, 2, 1}frente al esperado{1, 2, 5, 5, 6, 9}; revertido -> verde README(s) verificado(s) / README(s) verified: yes (lua/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort27/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin) -> 28/49 (…, Julia, Kotlin, Lua) Observaciones / Notes: Vigesimoctava implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. El proyecto se inició conluarocks init, que genera un rockspec genérico (naive_sort-dev-1.rockspec, consourceapuntando a un repositorio propio ymodules = {}), los envoltorioslua/luarocksy los directorios.luarocks/ylua_modules/; se reestructuró a la convención denumbers/(rockspec escrito a mano conrockspec_format = "3.0",build.type = "builtin"ytest_dependencies = { "busted" }, más.bustedconROOT = { "test" }ypattern = { "_test", "_spec" }), y se eliminaron el rockspec genérico, los envoltorios y ambos directorios. La guía de inicialización recomiendaluarocks initpara Lua, pero el módulo ya homologado gana como fuente de verdad. El árbol del sistema (/usr/local/lib/luarocks/rocks-5.5) es de root, así que el autor activóluarocks config local_by_default truey a partir de ahora--locales implícito en el árbol de usuario~/.luarocks. Las funciones usansnake_case(selection_sort), que coincide con el nombre de la especificación, así que la API no necesita traducción. La única divergencia estructural es la indexación basada en 1:for i = 0 to n - 2pasa afor i = 1, n - 1,for j = i + 1 to n - 1afor j = i + 1, n, la pasada interna de bubble afor j = 1, n - iy la inserción afor i = 2, nconwhile j >= 1, con el mismo número de iteraciones y el mismo orden de comparaciones. Las tablas de Lua son mutables y se pasan por referencia, de modo que los tres algoritmos ordenan in-place la tabla recibida y devuelven esa misma tabla, con intercambio por asignación múltiple (arr[i], arr[min_index] = arr[min_index], arr[i]).niles un valor de primera clase en Lua y actúa como indicador de fallo medianteif arr == nil then return nil end, sin lanzar errores; el caso nulo se prueba aparte del caso vacío porquenily{}son valores distintos. Los tests comparan conassert.sameporque==sobre tablas compara referencias, y el mensaje del contrato se pasa como tercer argumento de la aserción, que luassert recoge comoarguments[3]para usarlo como mensaje de fallo. Cada caso ordena una copia creada por el helper localcopyArray, ya que los fixtures son constantes de módulo y las tablas son mutables. Busted contabiliza tests y no aserciones, por eso el resumen muestra3 successespara las 24 comprobaciones. La banderaswappedse implementa conif not swapped then break end, yinsertion_sortdesplaza conarr[j] > keyestricto, lo que la hace estable. Ubicación desviada de la especificación:src/naive_sort.lua(nombre exacto, solo cambia la extensión),test/naive_sort_tests.lua(sufijo plural_tests.lua, comorecursive_tests.luadenumbers/) y ausencia detest/run_tests.extequivalente porque Busted descubre y ejecuta la suite con su propio runner. Observación menor pendiente de decisión del autor: el encabezado desrc/naive_sort.luaconserva el comentario «Contrato pendiente de implementación» del andamiaje, ya desactualizado. El índice de faselua/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): nim
Código verificado / Code verified: yes (sin mitigaciones tras retirar las guardas arr.nil y sustituir la multiasignación por intercambios con temp)
Tests y comandos / Tests and commands:
nim check --hints:off src/naive_sort.nim-> sinErrorniWarning(exit 0);nim checkes el verificador semántico del propio compilador y no genera binarionim check --hints:off test/naive_sort_tests.nim-> sinErrorniWarning(exit 0), sin el avisoUnusedImportque aparecía antesnimble test->[Suite] naive_sortcon[OK] selection_sort,[OK] bubble_sorty[OK] insertion_sort(exit 0; 3 tests, uno por algoritmo, con los 7 casos comocheckdentro de cada uno = 21 comprobaciones)nim c -r test/naive_sort_tests.nim-> misma salida quenimble test(la tareatestdel.nimbleejecuta exactamente ese comando)git check-ignore -v test/naive_sort_tests nimcache/x nimblecache/x-> el.gitignoredel módulo cubre el binario de test (test/naive_sort_tests) y el de la raíz denim/cubrenimcache/ynimblecache/; ambos se eliminaron tras las pruebas y no quedó ningún artefacto- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendoarr[j] < arr[minIndex]porarr[j] > arr[minIndex]enselectionSort->[FAILED] selection_sortconselection_sort should sort an unsorted array,was @[9, 6, 5, 5, 2, 1]yexpected @[1, 2, 5, 5, 6, 9], más los casos del array ya ordenado y del inverso;bubble_sorteinsertion_sortsiguieron[OK]; revertido -> verde README(s) verificado(s) / README(s) verified: yes (nim/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort28/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua) -> 29/49 (…, Kotlin, Lua, Nim) Observaciones / Notes: Vigesimonovena implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. El proyecto se inició connimble init, que genera un layout ajeno a la convención (tests/en plural contest1.nim, un submódulo de ejemplosrc/naive_sort/submodule.nimconSubmodule/initSubmodule, unproc add*de muestra, versión0.1.0, autoryorche3, licencia GPL y ninguna tareatest); se reestructuró al patrón denumbers/(test/en singular,version = "1.0.0",author = "yorche",MIT,requires "nim >= 2.0.0"ytask testconexec "nim c -r test/naive_sort_tests.nim"), se eliminó el código de ejemplo y se añadió el.gitignoredel módulo. El caso nulo se omite:seq[int]no admitenilen Nim 2.2 (var s: seq[int] = nildatype mismatch: got 'typeof(nil)' for 'nil' but expected 'seq[int]') ys.isNiltampoco existe (undeclared field: 'isNil'), de modo que una entrada nula no es representable en la firma; la representación alternativa que menciona la especificación (Option/Maybevacío) queda fuera de alcance porque esta fase todavía no introduce ese tipo, así que se conservan los 7 casos obligatorios y la guardaif n < 1: return arrcubre el array vacío. Los procedimientos usancamelCase(selectionSort), convención de Nim, y el nombre de la especificación (selection_sort) se conserva como nombre del test. Los tres reciben el array comovar seq[int]y lo ordenan in-place, sin estructuras auxiliares; como con ARC la asignación entreseqcopia el búfer, los tests aíslan cada caso con un helpercopyArraysobre los fixtures compartidos. Los intercambios usan unalet tempexplícita porque Nim solo admite la multiasignación entre paréntesis ((a, b) = (b, a)). La banderaswappedse implementa conif not swapped: breakyinsertionSortdesplaza conarr[j] > keyestricto, lo que la hace estable. Las cotas usan rangos semiabiertos (0..<n-1,i+1..<n,0..<n-i-1), equivalentes a las del pseudocódigo sin desplazamientos manuales. El helper de los tests es una plantilla y no unproc: uncheckdentro de unprocimprime el fallo y deja el proceso con código distinto de cero, pero unittest sigue marcando el test como[OK], mientras que con la plantilla se marca[FAILED]; el mensaje del contrato se antepone concheckpoint, porquecheckno admite mensaje propio. Ubicación desviada de la especificación:src/naive_sort.nim(nombre exacto, solo cambia la extensión),test/naive_sort_tests.nim(sufijo plural_tests.nim, comorecursive_tests.nimdenumbers/) y ausencia detest/run_tests.extequivalente porque la tareatestdel.nimbleejecuta la suite. El índice de fasenim/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): ocaml
Código verificado / Code verified: yes (la primera versión del autor usaba sintaxis que no es OCaml —let mutable, break y arr.(min_index) sin !— y no compilaba; se reescribió con ref y con la salida temprana expresada como condición del while externo)
Tests y comandos / Tests and commands:
dune build @all-> sin salida y exit 0; el perfildevde Dune activa un conjunto amplio de warnings y los trata como errores, así que la compilación es la verificación estáticadune runtest->Testing \naive_sort’.con[OK] naive_sort 0 selection_sort.,[OK] naive_sort 1 bubble_sort.y[OK] naive_sort 2 insertion_sort., másTest Successful in 0.001s. 3 tests run.(exit 0; 3 tests, uno por algoritmo, con los 7 casos comocheck` dentro de cada uno = 21 comprobaciones)git check-ignore -v core/algorithms/naive_sort/_build/default/x core/algorithms/naive_sort/x.cmi core/algorithms/naive_sort/x.annot->.gitignore:19:_build/,.gitignore:4:*.cmiy.gitignore:1:*.annot, todas del.gitignorede la raíz deocaml/;_build/se eliminó tras las pruebas y no quedó ningún artefacto-
Contra-verificación en copia desechable ( /tmp, ya eliminada): invirtiendoarr.(j) < arr.(!min_index)porarr.(j) > arr.(!min_index)enselection_sort->[FAIL] naive_sort 0 selection_sort.conASSERT selection_sort should sort an unsorted array,Expected: \[1; 2; 5; 5; 6; 9 ]’ yReceived: `[|9; 6; 5; 5; 2; 1|]’, más1 failure! in 0.000s. 3 tests run., mientrasbubble_sorteinsertion_sortseguían[OK]`; revertido -> verde - Prueba de recorrido en la misma copia: rompiendo solo el caso del array vacío se obtiene
FAIL selection_sort should sort an empty array, lo que confirma que el helper llega hasta el séptimo caso README(s) verificado(s) / README(s) verified: yes (ocaml/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort29/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim) -> 30/49 (…, Lua, Nim, OCaml) Observaciones / Notes: Trigésima implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. El proyecto se inició condune init proj naive_sort, que genera un layout ajeno a la convención: un ejecutable de ejemplo enbin/(main.mlconprint_endline "Hello, World!"), una librería vacía enlib/, unnaive_sort.opamgenerado y undune-projectcon(lang dune 3.24),generate_opam_filesactivado y marcadores de posición (username/reponame,"Author Name"); se reestructuró al patrón denumbers/((lang dune 3.0),(name naive_sort), librería ensrc/en vez delib/,(test (name naive_sort_tests) (libraries naive_sort alcotest))) y se eliminaronbin/,lib/y el.opam. La primera versión de la implementación no era OCaml válido: usabalet mutable min_index = i in(sintaxis de F#/Reason),break(que OCaml no tiene) yarr.(min_index)en lugar dearr.(!min_index), lo que producíaSyntax error after unclosed begin, expecting 'open'; se reescribió conrefpara los acumuladores mutables del pseudocódigo y conwhile !i < n - 1 && !swappedpara la salida temprana de bubble, que en OCaml no puede escribirse como elif not swapped then breakdel pseudocódigo pero tiene el mismo comportamiento observable y el mismo mejor caso O(n). El caso nulo se omite: OCaml no tienenull/nily unint arraysiempre es un array válido, así que la entrada nula no es representable en la firma; la representación alternativa que menciona la especificación (Option/Maybevacío) queda fuera de alcance porque esta fase todavía no introduce ese tipo, y la guardaif n <= 1 then arrcubre el array vacío, probado como caso 7. Las funciones usansnake_case(selection_sort), que coincide con el nombre de la especificación, así que la API no necesita traducción. El array es intrínsecamente mutable y se ordena in-place, con los tres algoritmos devolviendo ese mismo array; los tests aíslan cada caso conArray.copysobre los fixtures compartidos. La suite usa el testableAlcotest.array Alcotest.inten lugar de comparar con=ycheck bool, para que el fallo muestre los arrays esperado y obtenido, y pasa el mensaje del contrato como segundo argumento deAlcotest.check, que lo imprime comoASSERTyFAIL.sortllega al helper como función de primera clase (Naive_sort.selection_sort). A diferencia denumbers/, el módulo no incluye unsrc/naive_sort.mli: como no hay helpers privados que ocultar, expone exactamente las tres funciones del contrato, igual quecalculator/, que tampoco lo tiene. Ubicación desviada de la especificación:src/naive_sort.ml(nombre exacto, solo cambia la extensión),test/naive_sort_tests.ml(sufijo plural_tests.ml, comorecursive_tests.mldenumbers/) y ausencia detest/run_tests.extequivalente porque Dune descubre y ejecuta el ejecutable declarado entest/dune. El índice de faseocaml/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18 Fase / Phase: core.algorithms Módulo(s) / Module(s): core.algorithms.naive_sort Lenguaje(s) / Language(s): perl Código verificado / Code verified: yes (la primera versión recibía y devolvía una lista, mientras que la suite pasa un arrayref; se autorizó reescribirla con la API por arrayref) Tests y comandos / Tests and commands:
perl -c src/naive_sort.pl->src/naive_sort.pl syntax OK(exit 0) yperl -c test/naive_sort_tests.pl->test/naive_sort_tests.pl syntax OK(exit 0);perlcriticno está instalado, así queperl -ces la verificación estática disponibleprove --ext=.pl test/->test/naive_sort_tests.pl .. ok,All tests successful.,Files=1, Tests=3, 0 wallclock secsyResult: PASS(exit 0; 3 subtests, uno por algoritmo, con los 8 casos comois_deeplydentro de cada uno = 24 comprobaciones, contadas conprove -v)perl test/naive_sort_tests.pl->ok 1 - Subtest: selection_sort,ok 2 - Subtest: bubble_sort,ok 3 - Subtest: insertion_sorty plan1..3- Comprobación del contrato in-place:
my $a = [3, 1, 2]; my $r = selection_sort($a);deja$aen1,2,3y$r == $aes cierto;selection_sort(undef)devuelveundefyselection_sort([])devuelve un arrayref definido git check-ignore -v core/algorithms/naive_sort/naive_sort.o core/algorithms/naive_sort/blib/x core/algorithms/naive_sort/pm_to_blib-> solo coincide.gitignore:6:*.o; los patrones/blib/y/pm_to_blibestán anclados a la raíz deperl/, así que no cubrirían unblib/dentro del módulo. No es un problema aquí porque el módulo no tieneMakefile.PLyproveno genera artefactos: el módulo solo contienesrc/ytest/- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendo$arr->[$j] < $arr->[$min_index]por$arr->[$j] > $arr->[$min_index]enselection_sort->not ok 1 - selection_sort should sort an unsorted array,not ok 2 - selection_sort should sort an already sorted array,not ok 3 - selection_sort should sort a reverse ordered arrayynot ok 5 - selection_sort should sort an array with negative numbers, connot ok 1 - Subtest: selection_sortfrente aok 2 - Subtest: bubble_sortyok 3 - Subtest: insertion_sort; revertido ->Result: PASScon las 24 comprobaciones README(s) verificado(s) / README(s) verified: yes (perl/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort30/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml) -> 31/49 (…, Nim, OCaml, Perl) Observaciones / Notes: Trigésima primera implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. La estructura de este lenguaje es manual (✍️mkdir -p src testen la guía), como ennumbers/; no hay comando de andamiaje. La primera versión de la implementación usaba la convención de lista (my @array = @_;yreturn @array;), mientras que la suite pasa un arrayref, lo que hacía fallar las 24 comprobaciones conGOT: 1frente aCHECK: <ARRAY>: con un solo argumento,@arrayes una lista de un elemento y$nvale 1, así que ningún caso ordenaba nada. El autor autorizó reescribirla con la API por arrayref, que es además la única forma de que el ordenamiento sea realmente in-place sobre los datos del llamador, porque unsubde Perl recibe siempre una lista de argumentos. El caso nulo se incluye, a diferencia de Nim y OCaml: Perl tieneundefcomo valor de «ausencia de valor», así quereturn undef unless defined $arr;es el indicador de fallo idiomático ydefined $arrdistingue[]deundef, dando 8 casos (los 7 de la especificación más el nulo). Los tres algoritmos ordenan in-place el arrayref recibido y devuelven ese mismo arrayref, y los tests aíslan cada caso con[@$input]sobre los fixtures compartidos. La comparación usais_deeplyporqueiscompararía las direcciones de los arrayrefs y no sus contenidos. El helper recibe la función como referencia (\&selection_sort) y ejecuta los 8 casos con el mensaje del contrato como nombre de la aserción, de modo que un fallo aparece comonot ok 1 - selection_sort should sort an unsorted array. La banderaswappedse implementa conlast unless $swapped;, que es elbreakde Perl y equivale literalmente alif not swapped then breakdel pseudocódigo. Las cotas reproducen las del pseudocódigo porque el rango..de Perl es inclusivo en ambos extremos y devuelve lista vacía cuando la cota superior es menor que la inferior, así que no hacen falta guardas para arrays de 0 o 1 elementos.insertion_sortdesplaza con$arr->[$j] > $keyestricto, lo que la hace estable. Las funciones usansnake_case(selection_sort), que coincide con el nombre de la especificación, y sonsubglobales del paquetemaina los que la suite llega por nombre tras elrequire. Ubicación desviada de la especificación:src/naive_sort.pl(nombre exacto, solo cambia la extensión),test/naive_sort_tests.pl(sufijo plural_tests.pl, comorecursive_tests.pldenumbers/) y ausencia detest/run_tests.extequivalente porqueprovedescubre y ejecuta las suites con--ext=.pl test/. El índice de faseperl/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): prolog
Código verificado / Code verified: yes (la primera versión implementaba el mismo algoritmo tres veces —los tres helpers eran idénticos, con el mismo md5, y bubble_sort no tenía bandera de intercambio—; se reescribió con pick_min/3 para selection, bubble_pass/3 para bubble e insert/3 para insertion)
Tests y comandos / Tests and commands:
swipl -q -g "consult('src/naive_sort.pl'), halt"-> sin salida y exit 0; Prolog no compila a un artefacto previo, así que consultar el fichero es la verificación estática (avisa de variables singulares y cláusulas mal formadas)swipl -q -f test/naive_sort_tests.pl -t halt(desdetest/) ->% [1/3] naive_sort_tests:selection_sort ............. passed (0.003 sec),% [2/3] naive_sort_tests:bubble_sort ................ passed (0.000 sec)y% [3/3] naive_sort_tests:insertion_sort ............. passed (0.000 sec)(exit 0; 3 tests, uno por algoritmo, con los 7 casos comoassertiondentro de cada uno = 21 comprobaciones)- Sin avisos de choicepoint:
swipl -q -f test/naive_sort_tests.pl 2>&1 | grep -ci choicepoint-> 0 - Los tres helpers ya no son el mismo: los md5 de
smallest/3,bubble_pass/3einsert/3son7ec8f437…,facc03b8…y13885a63… - Bandera de salida temprana verificada de forma aislada:
bubble_pass([1,2,3,4,5], R, F)->R = [1,2,3,4,5],F = false(una lista ya ordenada se resuelve en una pasada, mejor caso O(n));bubble_pass([5,2,9,1,5,6], R, F)->R = [2,5,1,5,6,9],F = true(la pasada arrastra el mayor al final) - Los tres predicados coinciden con la especificación: para
[3,-1,4,-5,0]los tres devuelven[-5,-1,0,3,4] git check-ignore -v core/algorithms/naive_sort/src/naive_sort.qlf->core/algorithms/naive_sort/.gitignore:2:*.qlf; comprobado conswipl -q -g "qcompile('src/naive_sort.pl')"que.qlfes el único artefacto que genera SWI (la raíz deprolog/no tenía.gitignore)- Contra-verificación A en copia desechable (
/tmp, ya eliminada): invirtiendoY < MejorporY > Mejorensmallest/3-> soloselection_sort**FAILED**, con cuatro aserciones reportadas, la primeraAssertion: user:should_sort(selection_sort,an_unsorted_array,[9,6,5,5,2,1],[1,2,5,5,6,9]), mientrasbubble_sorteinsertion_sortseguíanpassed; revertido -> verde - Contra-verificación B: invirtiendo
X > YporX < Yenbubble_pass/3-> solobubble_sort**FAILED**, con cuatro aserciones yselection_sorteinsertion_sortenpassed; revertido -> verde - Recuento del fixture:
findall(D, case(D,_,_), L), length(L, N)->N = 7README(s) verificado(s) / README(s) verified: yes (prolog/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort31/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl) -> 32/49 (…, OCaml, Perl, Prolog) Observaciones / Notes: Trigésima segunda implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. La estructura de este lenguaje es manual (✍️mkdir -p src testen la guía), como ennumbers/. La primera versión de la implementación implementaba el mismo algoritmo tres veces:selection_sort/2ybubble_sort/2eran insertion sort recursivo con los helpersinsert_min/3,insert_bubble/3einsert/3byte a byte idénticos (mismo md52e470633…), de modo que no había búsqueda del mínimo ni comparación de adyacentes, ybubble_sortcarecía de la bandera de intercambio que exige el criterio de aceptación. La suite pasaba igualmente (3 passed), porque los tres devolvían una lista correctamente ordenada y la bandera no es observable en la salida: lo detectó la compuerta 2 (comparación código ↔ pseudocódigo), no la de tests. Se reescribió con tres estrategias distintas:selection_sort/2conpick_min/3(que busca el mínimo consmallest/3y lo retira conremove_first/3, conservando el orden del resto) para reproducir el «mínimo al inicio» del pseudocódigo;bubble_sort/2conbubble_pass/3, que compara pares adyacentes, arrastra el mayor al final y devuelve la bandera de intercambio como tercer argumento, de modo que el bucle exterior solo repite si hubo intercambio (elif not swapped then breakdel pseudocódigo, con mejor caso O(n) verificado de forma aislada); einsertion_sort/2coninsert/3. Las listas de Prolog son inmutables y el lenguaje no tiene asignación, así que ningún algoritmo puede ordenar in-place: los tres devuelven una lista nueva, lo que la especificación permite explícitamente («de forma in-place o retornando una copia ordenada según el paradigma del lenguaje»), y por eso los tests no necesitan copiar el fixture. El caso nulo se omite: en Prolog el array es una lista y una lista no admitenullni una entrada nula, así que el caso no es representable; la representación alternativa que menciona la especificación (Option/Maybevacío oResultde error) queda fuera de alcance porque esta fase todavía no introduce ese tipo, y el array vacío se prueba como caso 7. Los predicados usansnake_case(selection_sort), que coincide con el nombre de la especificación, y el array se llamaArren todos ellos (elarrde la documentación), con los identificadores en inglés y los comentarios en español. Los helpers usan!después de la guarda para ser deterministas y no dejar choicepoints; poner el corte antes de la condición compromete la cláusula y le impide recaer en la siguiente. plunit en SWI 10.0.2 no admite mensaje enassertion/1(no existenassertion/2ni/3), así que el mensaje del contrato viaja como el goal que plunit imprime al fallar:assertion(should_sort(Algorithm, Description, Actual, Expected))conshould_sort(_,_,A,E) :- A == E., lo que produceAssertion: user:should_sort(selection_sort,an_unsorted_array,[9,6,5,5,2,1],[1,2,5,5,6,9]); además plunit informa de todas las aserciones fallidas de un test, no solo de la primera. El helper compartido recibe el nombre del predicado y construye el goal con=.., y recorre los casos conforall/2. Ubicación desviada de la especificación:src/naive_sort.pl(nombre exacto, solo cambia la extensión),test/naive_sort_tests.pl(sufijo plural_tests.pl, comorecursive_tests.pldenumbers/) y ausencia detest/run_tests.extequivalente porque la propia suite se ejecuta con la directiva:- initialization(run_tests(naive_sort_tests), main).. El índice de faseprolog/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): purescript
Código verificado / Code verified: yes (los tres algoritmos tienen estrategias y helpers distintos: pickMin busca el mínimo y devuelve el valor junto al resto para selection, bubblePass compara adyacentes y devuelve la bandera de intercambio para bubble, e insert coloca el elemento en su sitio para insertion; ningún helper se comparte entre algoritmos. La implementación se reescribió sobre Data.List para dejar de usar Maybe: la versión anterior recorría el Array con uncons y un tipo opcional)
Tests y comandos / Tests and commands:
spago build->Warnings 0 0 0/Errors 0 0 0(columnasSrc,LibyAll) con✓ Build succeeded.;purscompila con los avisos activados, así que compilar es la verificación estática. Al compilar desde cero, la propia bibliotecatest-unit-17.0.0emite 15 avisos sobre sus ficheros (10UnusedNamey 5UnusedDeclaration, en.spago/p/test-unit-17.0.0/src/Test/Unit.pursyTest/Unit/Assert.purs) que no provienen de este módulo: la columnaSrc, que cuenta el código propio, marca 0; al cambiar las dependencias alistsSpago regeneróspago.lockconLockfile is out of date (reason: workspace packages changed), generating it...spago test->🍝,- Suite: naive_sort,✓ Passed: selection_sort,✓ Passed: bubble_sort,✓ Passed: insertion_sort,All 3 tests passed!y✓ Test succeeded for package "naive-sort-algorithms"., con exit 0 (3 tests, uno por algoritmo, con los 7 casos como aserciones dentro de cada uno = 21 comprobaciones)git check-ignore -v core/algorithms/naive_sort/output core/algorithms/naive_sort/.spago core/algorithms/naive_sort/node_modules-> rc=0 para los tres (.gitignore:1:output/,.gitignore:2:.spago/y.gitignore:3:node_modules/);git check-ignore -v core/algorithms/naive_sort/spago.lock-> rc=1, es decir,spago.locksí queda versionado- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendoif x > y thenporif x < y thenenbubblePass->☠ Failed: bubble_sort because bubble_sort should sort an unsorted array: expected (1 : 2 : 5 : 5 : 6 : 9 : Nil) but got (9 : 6 : 5 : 5 : 2 : 1 : Nil)con1 test failed:y exit 1, mientrasselection_sorteinsertion_sortseguían en✓ Passed; revertido -> verde README(s) verificado(s) / README(s) verified: yes (purescript/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort32/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog) -> 33/49 (…, OCaml, Perl, Prolog, PureScript) Observaciones / Notes: Trigésima tercera implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. Los comentarios estaban desalineados con la convención acordada: el fichero tenía tres banners en inglés (-- Selection Sort,-- Bubble Sorty-- Insertion Sort) y tres comentarios-- Helper: …; se sustituyeron por descripciones en español con los identificadores y funciones en inglés, y el código de los algoritmos no cambió. En una segunda revisión el autor señaló que el módulo usabaMaybe, el equivalente aOption, que esta fase no usa: conArrayno hay forma total de obtener el primero y el resto sin un tipo opcional, porque el compilador rechaza el patrón cons sobre un array (Operator Data.Array.(:) cannot be used in a pattern as it is an alias for function Data.Array.cons, errorInvalidOperatorInBinder; verificado conpurs compilesobre un fichero de prueba) y todos los accesores deData.Array(uncons,head,tail,index,last,init,find) devuelvenMaybe, mientras que la única alternativa sinMaybeesData.Array.Partial(head/tailparciales que exigenunsafePartial). Los patrones literales[]y[x]sí compilan, pero no permiten separar cabeza y cola. Decisión del autor: pasar el módulo aData.List, que sí tiene el constructor cons como dato (x : xs,Nil), es inmutable y es la secuencia recursiva idiomática, igual que en Haskell y Elm y que en el resto de lenguajes funcionales homologados de la fase; con ello desaparece todo tipo opcional del módulo y de los tests, que también se migraron aList Int(fixtures escritos como5 : 2 : 9 : 1 : 5 : 6 : Nil). La guía indica el andamiaje 🔧spago init; comprobado en/tmp, generaspago.yaml,.gitignore,.purs-repl, unsrc/Main.pursde ejemplo conmain :: Effect Unity untest/Test/Main.purs, conpackage.nametomado del directorio, solo las dependenciasconsole,effectyprelude,test.dependenciesvacío y el package set81.1.0. Se sustituyó por la convención ya homologada defoundations/numbers/: el paquete lleva el sufijo-algorithms(naive-sort-algorithms) para no colisionar con el paquetepurescript-numbersdel que dependetest-unit, se añadenlistsyfoldable-traversable(ninguna otra biblioteca), el package set se fija en80.8.1(la versión ya verificada ennumbers/), se declaratest-unitcomo dependencia de test y se elimina elsrc/Main.pursde ejemplo porque el módulo es una biblioteca. Las listas de PureScript son inmutables y el lenguaje no tiene bucles ni asignación, así que ningún algoritmo puede ordenar in-place: los tres devuelven una lista nueva, lo que la especificación permite explícitamente («de forma in-place o retornando una copia ordenada según el paradigma del lenguaje»), y por eso los tests no necesitan copiar el fixture. El caso nulo se omite: PureScript no tienenully unaList Intno admite una entrada nula, de modo que el caso no es representable en la firma; la representación alternativa que menciona la especificación (Maybe/Optionvacío oResultde error) queda fuera de alcance porque esta fase todavía no introduce ese tipo, así que se conservan los 7 casos obligatorios y el caso base cubre las listas de 0 y 1 elementos (elif n <= 1 return arrdel pseudocódigo). Sin bucles, los tres algoritmos son recursión estructural con patrones cons (x : xs,Nil), sinunconsni ningún tipo opcional;bubblePassdevuelveTuple (List Int) Booleancon la bandera de intercambio como segundo componente, y el bucle exterior solo repite si la bandera estrue, lo que conserva la salida temprana y el mejor caso O(n) del pseudocódigo (if not swapped then break).insertcoloca el elemento delante del primer mayor o igual (x <= y), lo que hace estable ainsertionSort. Las funciones usancamelCase(selectionSort), convención de PureScript, y el nombresnake_casede la especificación (selection_sort) se conserva como nombre del test, de modo que el reporte sigue mostrandoselection_sort,bubble_sorteinsertion_sort; los helperspickMin,bubblePasseinsertno se exportan y no haymain()en el módulo, porque el punto de entrada es elmaindeTest.Main.Assert.equalno admite mensaje, así que la comparación usaAssert.assert :: String -> Boolean -> Aff Unitcon el mensaje primero, compuesto con los valores incluidos (bubble_sort should sort an unsorted array: expected (1 : 2 : 5 : 5 : 6 : 9 : Nil) but got (9 : 6 : 5 : 5 : 2 : 1 : Nil)); el helper compartido recibe la función como valor y recorre los 7 casos confor_, así que las aserciones se escriben una sola vez y no tres. Ubicación desviada de la especificación:src/NaiveSort.purs(los módulos de PureScript van enPascalCasey el fichero debe llamarse como el módulo, igual queNumbers.purs),test/NaiveSortTests.purs(convenciónPascalCaseen plural denumbers/, comoRecursiveTests.purs) y ausencia detest/run_tests.extequivalente porque Spago ejecuta elmaindeclarado entest.main(Test.Main). La secuencia del contrato esList Inten vez del array de la especificación: es la misma desviación que ya asumieron los demás lenguajes funcionales homologados ([Int]en Haskell y F#,Listen Elm, Erlang, Elixir y Gleam), y es la única forma de obtener cabeza y cola sin un tipo opcional. El índice de fasepurescript/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): python
Código verificado / Code verified: yes (la primera versión de bubble_sort no tenía la bandera swapped ni el break: incumplía el criterio de aceptación de salida temprana y degradaba el mejor caso de O(n) a O(n²), y lo detectó la compuerta 2 —comparación código ↔ pseudocódigo— porque la bandera no es observable en la salida; el autor la corrigió. selection_sort intercambia siempre, sin la guarda min_idx != i del pseudocódigo, lo que es una operación nula cuando min_idx == i y no cambia el resultado observable)
Tests y comandos / Tests and commands:
python3 -W error -m py_compile src/naive_sort.py tests/naive_sort_tests.py conftest.py-> sin salida y exit 0; Python no compila a un artefacto previo, así que la compilación a bytecode con los avisos como errores es la verificación estática. El entorno del repositorio no tiene linters instalados (ruff,flake8,pylintymypyno están disponibles)pytest -v->collected 3 items,tests/naive_sort_tests.py::test_selection_sort PASSED,::test_bubble_sort PASSED,::test_insertion_sort PASSEDy3 passed in 0.01s, con exit 0 (3 tests, uno por algoritmo, con los 8 casos comoassertdentro de cada uno = 24 comprobaciones)- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendoif arr[j] < arr[min_idx]:porif arr[j] > arr[min_idx]:enselection_sort->1 failed, 2 passed in 0.01s, contests/naive_sort_tests.py::test_selection_sort FAILEDyassert [9, 6, 5, 5, 2, 1] == [1, 2, 5, 5, 6, 9]; revertido -> verde. La bandera debubble_sortno es observable en la salida, así que su presencia se comprobó comparando el código con el pseudocódigo git check-ignore -v __pycache__/x.pyc .pytest_cache tests/__pycache__/y.pyc-> rc=0 para los tres (.gitignore:1:__pycache__/y.gitignore:3:.pytest_cache/) README(s) verificado(s) / README(s) verified: yes (python/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort33/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript) -> 34/49 (…, OCaml, Perl, Prolog, PureScript, Python) Observaciones / Notes: Trigésima cuarta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. El esqueleto sigue la convención ya homologada defoundations/numbers/(src-layout):pyproject.toml(PEP 621 más[tool.pytest.ini_options]),conftest.pyque añadesrc/asys.path,src/naive_sort.pyytests/naive_sort_tests.py; la guía marca 🔧uv init --lib, perouvno está instalado y el módulo ya homologado manda. El caso nulo se incluye, a diferencia de Haskell, Elm y PureScript: en Python una lista puede serNone, así que el indicador de fallo del contrato esNone(if arr is None: return None), distinguible del caso vacío y sin lanzar excepciones; la suite tiene 8 casos (los 7 de la especificación más el nulo) y el helper compartido pasaNonetal cual y una copia (list(source)) en el resto. Las listas son mutables, así que los tres algoritmos ordenan in-place y devuelven la misma referencia, lo que la especificación permite explícitamente; por eso cada caso ordena una copia del fixture compartido.insertion_sortdesplaza conarr[j] > keyestricto, lo que la hace estable.bubble_sortconserva la banderaswappedy elif not swapped: break; el bucle exterior recorrerange(n)en lugar del0 to n - 2del pseudocódigo, pero la pasada extra tiene el rango interno vacío (n - i - 1 == 0), deja la bandera enFalsey sale por elbreak, con el mismo resultado observable. Ubicación desviada de la especificación:src/naive_sort.py(nombre exacto del módulo, solo cambia la extensión),tests/naive_sort_tests.py(directorio en plural y sufijo_tests.py, comotests/recursive_tests.pydenumbers/y como exigepython_files) y ausencia derun_tests.extporque pytest trae su propio runner y descubre las funcionestest_*. El índice de fasepython/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-18
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): r
Código verificado / Code verified: yes (la primera versión de selection_sort y bubble_sort llegaba en el bucle exterior a i == n y R abortaba la función con missing value where TRUE/FALSE needed y argument is of length zero, porque el operador : no devuelve vacío ((n+1):n es descendente y 1:0 es c(1, 0)); lo detectó la compuerta 4 y se mitigó acotando los bucles con seq_len(n - 1) y seq_len(n - i))
Tests y comandos / Tests and commands:
Rscript -e 'invisible(parse("src/naive_sort.R"))'->parse OK; R no compila a un artefacto previo, así que la verificación estática es el análisis sintáctico conparse()más el analizadorlintrRscript -e 'print(lintr::lint("src/naive_sort.R"))'-> sin hallazgos y exit 0, tras añadir el salto de línea final que marcabasrc/naive_sort.R:80:2: style: [trailing_blank_lines_linter] Missing terminal newlineRscript test/run_tests.R->══ Testing naive_sort_tests.R ═══…y[ FAIL 0 | WARN 0 | SKIP 0 | PASS 24 ] Done!(24expect_equal, 8 por algoritmo;Rscriptdevuelve exit 0 igualmente, porquetest_file()no propaga el fallo)- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendoif (arr[j] < arr[min_idx])porif (arr[j] > arr[min_idx])enselection_sort->[ FAIL 4 | WARN 0 | SKIP 0 | PASS 20 ], con las fallas bajoFailure ('naive_sort_tests.R:65:3'): selection_sorty los mensajes del contrato (selection_sort should sort a reverse ordered array,selection_sort should sort an array with negative numbers), mientrasbubble_sorteinsertion_sortseguían pasando; revertido -> verde git check-ignore -v .Rhistory out.tar.gz-> rc=0 para los dos (.gitignore:2:.Rhistoryy.gitignore:8:*.tar.gz) README(s) verificado(s) / README(s) verified: yes (r/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort34/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python) -> 35/49 (…, OCaml, Perl, Prolog, PureScript, Python, R) Observaciones / Notes: Trigésima quinta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. La estructura es manual (✍️mkdir -p src testen la guía), como ennumbers/, consrc/naive_sort.R,test/naive_sort_tests.Rytest/run_tests.R; el módulo necesita el punto de entrada porque testthat no descubre archivos*_tests.Rcon su patrón por defecto (test*). El caso nulo se incluye, como en Perl y Python: en RNULLes representable yis.null()lo distingue del vector vacío, así que el indicador de fallo esNULLy el caso vacío se escribe coninteger(0)(el vector vacío tipado), porquec()devuelveNULLy se confundiría con el indicador; la suite tiene 8 casos (los 7 de la especificación más el nulo). R usa copy-on-modify: las tres funciones ordenan su copia local y devuelven el vector conreturn(arr), así que el ordenamiento no es in-place observable y los tests no necesitan copiar el fixture.insertion_sortdesplaza conarr[j] > keyestricto y la guardaj >= 1(numeración 1-based), lo que la hace estable.bubble_sortconserva la banderaswappedy elif (!swapped) break; la bandera no es observable en la salida, así que su presencia se comprueba comparando el código con el pseudocódigo. El bucle exterior del pseudocódigo (0 to n - 2) se escribe conseq_len(n - 1)y el interior de bubble conseq_len(n - i): en R:no devuelve vacío (1:0esc(1, 0)y(n+1):nesc(n+1, n)), y llegar ai == ncon1:nhacía quearr[n + 1]fueseNAyarr[0]fuesenumeric(0), abortando conmissing value where TRUE/FALSE neededyargument is of length zero. Ubicación desviada de la especificación:src/naive_sort.R(solo cambia la extensión, comonumbers.R),test/naive_sort_tests.R(sufijo en plural, comorecursive_tests.Rdenumbers/) ytest/run_tests.Rcon el mismo nombre que el punto de entrada denumbers/. El índice de faser/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-19
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): racket
Código verificado / Code verified: yes (la primera versión tenía tres fallos y un desajuste de nombres: insertion-sort perdía elementos porque su let insert interno hacía (insert (cdr s)) sin conservar el prefijo ya descartado —devolvía '(9 6) en lugar de '(1 2 5 5 6 9)—, las tres guardas usaban (or (not (list? arr)) (null? arr)) y devolvían #f para la lista vacía, que el contrato pide devolver tal cual, y bubble-sort no tenía bandera swapped ni salida temprana; además la suite llamaba a selection_sort/bubble_sort/insertion_sort mientras el módulo exporta kebab-case (selection-sort, bubble-sort, insertion-sort), lo que abortaba la ejecución con unbound identifier. Todo corregido y verificado)
Tests y comandos / Tests and commands:
raco make src/naive_sort.rkt test/naive_sort_tests.rkt test/run_tests.rkt-> sin salida y exit 0; Racket compila a bytecode conraco make, que es el análisis estático del módulo y de las suites (los.zoquedan encompiled/, ignorado por git)racket test/run_tests.rkt->3 success(es) 0 failure(s) 0 error(s) 3 test(s) run(3test-case, uno por algoritmo, con los 8 casos comocheck-equal?dentro de cada uno = 24 checks;racketdevuelve exit 0 igualmente)- Contra-verificación en copia desechable (
/tmp, ya eliminada) y borrandocompiled/antes de ejecutar, porque un.zoheredado ocultaba el cambio del.rkt: invirtiendo(> (list-ref lst i) (list-ref lst (+ i 1)))por(< …)enbubble-sort->FAILUREconmessage: "bubble_sort should sort an unsorted array",actual: '(9 6 5 5 2 1)yexpected: '(1 2 5 5 6 9), más2 success(es) 1 failure(s) 0 error(s) 3 test(s) run; revertido -> verde git check-ignore -v compiled/naive_sort_rkt.zo-> rc=0 (.gitignore:2:compiled/) README(s) verificado(s) / README(s) verified: yes (racket/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort35/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R) -> 36/49 (…, Prolog, PureScript, Python, R, Racket) Observaciones / Notes: Trigésima sexta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. La estructura es manual (✅mkdir -p src testen la guía), como ennumbers/, consrc/naive_sort.rkt,test/naive_sort_tests.rktytest/run_tests.rkt; el módulo usa#lang racketcon(provide selection-sort bubble-sort insertion-sort). Naming: los identificadores van en kebab-case (selection-sort), que es la convención de Racket, y los nombressnake_casede la especificación se conservan como nombre de cadatest-casey en el mensaje del contrato ("selection_sort should sort an unsorted array"), de modo que el reporte sigue mostrando los nombres de la especificación. Caso nulo/inválido: se incluye, y es el único lenguaje de la fase donde la lista vacía ynullson el mismo objeto ((null? '())da#t): el indicador de fallo es#f(guardas(not (list? arr))), la lista vacía se devuelve tal cual ([(or (null? arr) (null? (cdr arr))) arr], elif n <= 1 return arrdel pseudocódigo) y la suite tiene 8 casos (los 7 de la especificación más el inválido). Las listas de Racket son inmutables ylist-setdevuelve una lista nueva, así que los tres algoritmos construyen una lista nueva y los tests no necesitan copiar el fixture.selection-sortextrae el mínimo con(apply min lst)y el resto conremove;bubble-sortconserva la banderaswappedy repite solo si hubo intercambios (mejor caso O(n); la bandera no es observable en la salida, así que su presencia se verifica contra el pseudocódigo);insertion-sortusa unlet insertinterno que acumula enskippedel prefijo descartado antes de reinsertarlo (sinreversefinal, porque la lista ya se construye en orden ascendente) y es estable por la comparación estricta(< current (car s)). Ubicación desviada de la especificación:src/naive_sort.rkt(solo cambia la extensión, comonumbers.rkt),test/naive_sort_tests.rkt(sufijo en plural, comorecursive_tests.rktdenumbers/) ytest/run_tests.rktcon el mismo nombre y el mismo mecanismo (run-testsderackunit/text-ui) que ennumbers/ycalculator/. El índice de faseracket/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-19
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): raku
Código verificado / Code verified: yes (faltaban los is export —el módulo no exportaba nada y la suite fallaba con Undeclared routines— y el bucle interior de bubble-sort usaba el rango exclusivo 0 ..^ $n - 2 - $i donde el pseudocódigo pide la cota inclusiva: hacía una comparación menos por pasada y el mayor no llegaba al final ([5, 2, 9, 1, 5, 6] → [1, 2, 5, 5, 9, 6]). Corregido con is export en las tres subs y 0 .. $n - 2 - $i; además se adaptaron las pruebas a kebab-case (&selection-sort, &bubble-sort, &insertion-sort), conservando los nombres de la especificación en el subtest y en el mensaje)
Tests y comandos / Tests and commands:
raku -c lib/NaiveSort.rakumodyraku -c t/naive_sort_tests.rakutest->Syntax OK; Raku no compila a un artefacto previo, así que esa comprobación sintáctica es la verificación estática (el propio compilador informa de errores y avisos)prove6 -l t/->t/naive_sort_tests.rakutest .. ok,All tests successful.,Files=1, Tests=3, 0 wallclock secsyResult: PASS(3 subtests, uno por algoritmo, con los 7 casos comois-deeply()dentro de cada uno = 21 comprobaciones)- Contra-verificación en copia desechable (
/tmp, ya eliminada) y borrando.precomp/: invirtiendoif @array[$j] > @array[$j + 1]por<enbubble-sort-> fallan los 4 checks que dependen del orden (# Failed test 'bubble_sort should sort an unsorted array',# expected: $[1, 2, 5, 5, 6, 9],# got: $[9, 6, 5, 5, 2, 1], y lo mismo con el array ya ordenado, el inverso y los negativos), conTests: 3 Failed: 1,Failed tests: 2yResult: FAILED;selection_sorteinsertion_sortsiguen en verde; revertido -> verde git check-ignore -v lib/.precomp/x-> rc=0 (.gitignore:3:lib/.precomp/) README(s) verificado(s) / README(s) verified: yes (raku/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort36/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket) -> 37/49 (…, PureScript, Python, R, Racket, Raku) Observaciones / Notes: Trigésima séptima implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. La estructura es manual (✅mkdir -p lib ten la guía) y es el layout idiomático de Raku:lib/NaiveSort.rakumod(fichero del módulo en PascalCase, comoNumbers.rakumod) yt/naive_sort_tests.rakutest; no hayrun_testsporqueprove6descubret/*.rakutesty es el punto de entrada del ecosistema. Naming: los identificadores van en kebab-case (selection-sort), que es la convención de Raku, y los nombressnake_casede la especificación se conservan como nombre de cadasubtesty en el mensaje de cada aserción, de modo que el reporte sigue mostrando los nombres de la especificación. Caso nulo omitido: un parámetro con sigilo@arrayno admiteNil; es un error de compilación («Calling f(Nil) will never work with declared signature (@arr)»), no de ejecución, así que la entrada nula no es representable en la firma y se conservan los 7 casos obligatorios. Los tres algoritmos ordenan in-place la copia local del parámetro (sinis rwla mutación no sale de la función) y devuelven el array, variante que la especificación permite; por eso la suite ordena unclonedel fixture en cada caso.insertion-sortdesplaza con@array[$j] > $currentestricto y la guarda$j >= 0, lo que la hace estable.bubble-sortconserva la bandera (@swapped[0]ylast unless) y la salida temprana del pseudocódigo; la bandera no es observable en la salida, así que su presencia se comprueba contra el pseudocódigo. En Raku1..0es un rango vacío, así que las cotas no generan iteraciones fantasma; el cuidado está en no confundir el rango exclusivo..^con la cota inclusiva del pseudocódigo. El submódulo sigue en la ramadev, sin rama de trabajofeat/algorithms/naive-sortcomo en los demás lenguajes. El índice de faseraku/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-19
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): rescript
Código verificado / Code verified: yes (la primera versión no compilaba: usaba sintaxis que no existe en la versión fijada (rescript ^11.1.4, la misma que numbers/). Tres correcciones: for i in a .. b → for i in a to b; let mut x = v con x = v2 → ref(v) con x := v2 y lectura x.contents; y break → la bandera swapped como condición del while. Después de corregirlo, compilación limpia y 21/21)
Tests y comandos / Tests and commands:
npm run res:build(rescript) ->>>>> Start compiling…>>>> Finish compiling 39 mseconds, sin errores ni avisos; el compilador es también la verificación estáticanpm test->Test Suites: 1 passed, 1 total,Tests: 21 passed, 21 totaly exit 0 (21 casos, 7 por algoritmo)- Contra-verificación en copia desechable (
/tmp, ya eliminada y sin los.res.mjsgenerados, que podían enmascarar el cambio): invirtiendoif array[j] < array[min_index.contents]por>enselection_sort->Test Suites: 1 failed, 1 total,Tests: 4 failed, 17 passed, 21 total, con los fallos nombrados por el mensaje del contrato (● selection_sort › should sort an unsorted array,… an already sorted array,… a reverse ordered array,… an array with negative numbers) y elExpected/Receivedde Jest;bubble_sorteinsertion_sortsiguen en verde; revertido -> verde git check-ignore -v lib/x.bs.js .bsb.lock src/probe.res.mjs node_modules/ package-lock.json-> rc=0 para los cinco README(s) verificado(s) / README(s) verified: yes (rescript/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort37/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket, Raku) -> 38/49 (…, Prolog, PureScript, Python, R, Racket, Raku, ReScript) Observaciones / Notes: Trigésima octava implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. El módulo fijarescript ^11.1.4(la misma versión quenumbers/), así que el código usa la sintaxis de esa versión: buclesfor i in a to b, acumuladores conref/:=/.contentsy la salida temprana debubble_sorten la condición delwhile(while swapped.contents && i.contents <= n - 2), porque esta versión no tienebreak; es el mismo recurso que se usó en OCaml. Los arrays de ReScript son mutables, así que los tres algoritmos ordenan in-place el array recibido y lo devuelven, y la suite ordena una copia por caso (Belt.Array.copy). El caso nulo se omite:array<int>no admitenullni una entrada inválida.insertion_sortdesplaza conarray[j.contents] > keyestricto y la guardaj.contents >= 0, lo que la hace estable. La banderaswappedno es observable en la salida, así que su presencia se verifica contra el pseudocódigo. Jest no admite mensaje como argumento deexpect, así que el mensaje del contrato se compone con el nombre deldescribe(el algoritmo) y el deltest(should sort <descripción>): un fallo se reporta como● selection_sort › should sort an unsorted array. El módulo que genera el compilador a partir del fichero esNaive_sort(ReScript capitaliza la primera letra), de ahí las llamadasNaive_sort.selection_sort. Ubicación desviada de la especificación:src/naive_sort.res(solo cambia la extensión, comonumbers.res),test/naive_sort_tests.res(el sufijo en plural que declaratestMatchenjest.config.js) y ausencia derun_tests.extporque Jest trae su propio runner ynpm testcompila y ejecuta. El submódulo sigue en la ramadev. El índice de faserescript/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-19
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): rexx
Código verificado / Code verified: yes (los gates de la delegación bloquearon la primera versión y se corrigieron cuatro cosas. 1) selection_sort no compilaba: Error 10: Unexpected or unmatched END al cargar el módulo, porque dos if ... then sin do dejaban sin pareja los end de bloque; se añadió el do explícito. 2) La escritura por índice arr~at(i) = v no existe en .Array (Error 97.1: Object "an Array" does not understand message "AT="); se usa la forma de corchetes arr[i] = v (delega en put), manteniendo la lectura arr~at(i). 3) insertion_sort usaba la condición compuesta j > 0 & arr~at(j) > key, pero & no cortocircuita en REXX y evaluaba arr~at(0) (Error 93.907: Method argument 1 must be a positive whole number; found "0"); se reescribió como do while j > 0 con if arr~at(j) <= key then leave. 4) La suite pasaba cadenas separadas por blancos y el módulo espera un .Array, así que la suite conserva las constantes legibles y construye un .Array nuevo por caso (buildArray, porque el orden es in-place) y normaliza ambos lados a texto comparable (asText, porque .Array compara identidad); ambos son métodos de instancia porque una instancia no alcanza los métodos de clase con self~...)
Tests y comandos / Tests and commands:
- Verificación estática: ❌ no existe analizador estático en ooRexx;
rexxc src/naive_sort.rexxsolo imprime el banner y sale con 0 sin reportar elENDsin pareja, así que la comprobación real es cargar el módulo ejecutando la suite rexx test/naive_sort_tests.rexx(desde la raíz del módulo: los::requiresrelativos resuelven contra el directorio de trabajo) ->nr of test runs: 4,nr of successful assertions: 24,nr of failures: 0,nr of errors: 0(el intérprete sale con código 0 aunque haya fallos, así que el resultado se lee del resumen)- Contra-verificación en copia desechable (
/tmp, ya eliminada): invirtiendoif arr~at(j) < arr~at(min_index)por>enselection_sort->nr of successful assertions: 16,nr of failures: 1y el fallo nombrado por el mensaje del contrato (selection_sort should sort an unsorted array,expected=[1 2 5 5 6 9],actual=[9 6 5 5 2 1]); revertido -> verde README(s) verificado(s) / README(s) verified: yes (rexx/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort38/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket, Raku, ReScript) -> 39/49 (…, PureScript, Python, R, Racket, Raku, ReScript, REXX) Observaciones / Notes: Trigésima novena implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. La estructura es manual (✅mkdir -p src test) y sigue el layout de REXX del repositorio:src/naive_sort.rexx(claseNaiveSortcon métodos de clase) ytest/naive_sort_tests.rexx(subclase deTestCasecon::requires "OOREXXUNIT.CLS"y::requires "src/naive_sort.rexx"); no hayrun_testsporque la suite se ejecuta directamente conrexxy los::requiresrelativos obligan a lanzarla desde la raíz del módulo. Naming: se conservan los nombressnake_casede la especificación, que son válidos y naturales en REXX (case-insensitive), y los métodos de test usancamelCase(testSelectionSort) como enfoundations/numbers/. Caso nulo incluido:.Niles representable y distinguible del array vacío (.array~new), así que el indicador de fallo es.Nily la suite cubre 8 casos (los 7 de la especificación más el nulo) = 24 aserciones (3 algoritmos × 8 casos). Los tres algoritmos ordenan in-place el.Arrayrecibido y devuelven su referencia, variante que la especificación permite; por eso la suite construye un.Arraynuevo por caso.bubble_sortconserva la banderaswappedy la salida temprana conleave(mejor caso $O(n)$; la bandera no es observable en la salida, así que su presencia se verifica contra el pseudocódigo);insertion_sortes estable por la comparaciónarr~at(j) <= key;selection_sortintercambia contemp, sin operadores que REXX no tenga. Particularidades del lenguaje documentadas en el README: el cuerpo de un::methodes una rutina que termina enreturn(sinendfinal, condoexplícito en cada bloque),&y|no cortocircuitan,.Arrayno se compara por contenido con=(compara identidad),do i = 1 to 0no itera y una instancia no alcanza los métodos de clase conself~.... No hay.gitignore: ooRexx interpreta los fuentes y no genera artefactos. El submódulo está en la ramafeat/algorithms/naive-sort. El índice de faserexx/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-19
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): ruby
Código verificado / Code verified: yes (las tres funciones coinciden con el pseudocódigo: selection_sort con (0...n-1) y (i+1...n), bubble_sort con la bandera swapped y break unless swapped —el if not swapped: break del pseudocódigo—, insertion_sort con while j >= 0 && arr[j] > key, estricto y por tanto estable. Ninguna invoca sort, sort_by, min ni ayudas de ordenamiento. Divergencias idiomáticas aceptadas: module NaiveSort con métodos def self.* en lugar de una clase con instancias (mismo patrón que Numbers en core/foundations/numbers/), orden in-place que devuelve la misma referencia —variante que la especificación permite— y nil como indicador de fallo)
Tests y comandos / Tests and commands:
- Verificación estática:
ruby -w -c src/naive_sort.rbyruby -w -c test/naive_sort_tests.rb->Syntax OKen ambos, sin warnings (Ruby no compila a un artefacto previo y el módulo no declara linter) bundle exec rspec->3 examples, 0 failures(un ejemplo por algoritmo, 8 casos cada uno = 24 aserciones) README(s) verificado(s) / README(s) verified: yes (ruby/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort39/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX) -> 40/49 (…, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby) Observaciones / Notes: Cuadragésima implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. La estructura es manual (✅mkdir -p src test+bundle init, como indica la guía) y sigue el patrón denumbers/ycalculator/:src/naive_sort.rb(módulo con métodosself.*),test/naive_sort_tests.rb,Gemfile(rspec ~> 3.13),.rspec(--format documentation,--default-path test,--pattern "**/*_tests.rb") y.gitignore(.bundle/,vendor/bundle/,Gemfile.lock; verificado congit check-ignore -v Gemfile.lock .bundle/config vendor/bundle/x-> las tres coinciden). Naming: los nombressnake_casede la especificación (selection_sort,bubble_sort,insertion_sort) son también la convención de Ruby, así que no hubo adaptación; la suite los conserva en el nombre de cadadescribey en el mensaje del contrato (selection_sort should sort an unsorted array). Caso nulo incluido: un array de Ruby puede sernil, así que el indicador de fallo esnil, distinguible del array vacío ([]), y la suite cubre 8 casos (los 7 de la especificación más el nulo) = 24 aserciones. Los tres algoritmos ordenan in-place y devuelven la misma referencia, variante que la especificación permite, así que la suite define fixtures congelados confreezey ordena una copiaduppor caso (aislamiento). La banderaswappedno es observable en la salida, así que su presencia se comprueba contra el pseudocódigo. Particularidades documentadas en el README:&&sí cortocircuita (por eso la guardaj >= 0protegearr[j]eninsertion_sort), losfordel pseudocódigo se traducen a rangos exclusivos(0...n-1)/(0...n-i-1)por el índice 0-based, y el intercambio usa asignación paralela. Ubicación desviada de la especificación:src/naive_sort.rb(solo cambia la extensión),test/naive_sort_tests.rb(sufijo en plural, comorecursive_tests.rbdenumbers/) y ausencia derun_tests.rbporquebundle exec rspecdescubre la suite con el patrón de.rspec. El submódulo está en la ramafeat/algorithms/naive-sort. El índice de faseruby/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-19
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): rust
Código verificado / Code verified: yes (las tres funciones coinciden con el pseudocódigo: selection_sort con 0..n-1 y i+1..n, bubble_sort con la bandera swapped y if !swapped { break; } —el if not swapped: break del pseudocódigo— y insertion_sort con el while j >= 0 and arr[j] > key traducido a while j > 0 && arr[j-1] > key sobre usize, estricto y por tanto estable. El único intercambio es Vec::swap; no se invoca sort, sort_by ni sort_unstable. Divergencias idiomáticas aceptadas: las funciones reciben el Vec<i32> por valor (mut arr) y devuelven el mismo vector reordenado in-place en su propio búfer —variante que la especificación permite—, y el caso nulo se omite porque Vec<i32> no admite null y la fase todavía no usa Option/Result como indicador de fallo)
Tests y comandos / Tests and commands:
- Verificación estática:
cargo clippy --all-targets -- -D warnings->Checking naive_sort v0.1.0 (...)yFinished \dev` profile … in 0.09s`, sin warnings ni errores cargo test->running 3 tests(bubble_sort ... ok,insertion_sort ... ok,selection_sort ... ok) ytest result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; los doc-tests y los unittests desrc/lib.rscorren 0 tests. 3 tests × 7 casos = 21 aserciones- Contra-verificación en copia desechable (
/tmp, ya eliminada): con una implementación de sonda la suite dio3 passed; 0 failed; invirtiendoif arr[j] < arr[min_index]por>enselection_sort->assertion \left == right` failed: selection_sort should sort an unsorted arrayytest result: FAILED. 2 passed; 1 failed; revertido -> verde README(s) verificado(s) / README(s) verified: yes (rust/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort40/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby) -> 41/49 (…, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust) Observaciones / Notes: Cuadragésima primera implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. El andamiaje se hizo con el comando de la guía (✅cargo init –lib), que genera solo la librería, sinmainde ejemplo, y después se ajustóCargo.tomlal patrón defoundations/numbers/([package]con edition 2024 +[lib] name = “naive_sort”, path = “src/lib.rs”). Layout:src/lib.rs(pub mod naive_sort;),src/naive_sort.rs(las 3 funciones),tests/naive_sort_tests.rs(suite de integración) y.gitignore(target/; verificado congit check-ignore -v target/debug/x->.gitignore:2:target/). **Naming:** los nombressnake_casede la especificación (selection_sort,bubble_sort,insertion_sort) son también la convención de Rust, así que no hubo adaptación; la suite los conserva en el nombre de cada#[test]y en el mensaje del contrato (selection_sort should sort an unsorted array). **Caso nulo omitido:**Vec` no admite `null` y esta fase todavía no usa `Option`/`Result` como indicador de fallo, así que no es representable en la firma y no hay indicador que comprobar; se conservan los 7 casos de la especificación (mismo criterio que OCaml). Detalles de Rust documentados en el README: los `for` del pseudocódigo se traducen a rangos exclusivos (`0..n-1`, `0..n-i-1`), el `usize` obliga a reescribir el `j >= 0` de `insertion_sort` como `j > 0 && arr[j-1] > key`, y el intercambio usa `Vec::swap`. Ubicación desviada de la especificación: `src/naive_sort.rs` (solo cambia la extensión, como `numbers.rs`), `tests/naive_sort_tests.rs` (layout de integración de Cargo, como `recursive_tests.rs`) y ausencia de `run_tests.rs` porque `cargo test` descubre `tests/` automáticamente. `Cargo.lock` se versiona, como en `numbers/`. El submódulo está en la rama `feat/algorithms/naive-sort`. El índice de fase `rust/core/algorithms/README.md` se creó en este cierre.
Fecha / Date: 2026-09-19
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): scala
Código verificado / Code verified: yes (la primera versión compilaba y pasaba los tests, pero el compilador emitía un warning en bubble_sort: NaiveSort.scala:54:8 -> «Non local returns are no longer supported; use boundary and boundary.break in scala.util instead», porque la salida temprana se hacía con un return arr dentro del cuerpo de un for (que Scala convierte en una clausura). Corregido sustituyéndolo por un while (i < n - 1 && swapped) con la bandera del pseudocódigo en la condición: compilación limpia y mismo comportamiento (la bandera no es observable en la salida, así que su presencia y complejidad se verifican contra el pseudocódigo). Las tres funciones coinciden con el pseudocódigo: selection_sort con 0 until n - 1 e i + 1 until n, insertion_sort con el while j >= 0 and arr[j] > key traducido a while (j > 0 && arr(j - 1) > key), estricto y por tanto estable, y los intercambios con temp sin sorted/sortBy/sortWith/scala.util.Sorting. Divergencias idiomáticas aceptadas: orden in-place que devuelve la misma referencia —variante que la especificación permite— y null como indicador de fallo (representable en un array de la JVM))
Tests y comandos / Tests and commands:
- Verificación estática:
sbt clean compile->compiling 1 Scala source ... done compilingsin ningún[warn](antes de la corrección:one warning found) sbt test->[info] NaiveSortTests:con- selection_sort,- bubble_sort,- insertion_sort,Total number of tests run: 3,Suites: completed 1, aborted 0yTests: succeeded 3, failed 0, canceled 0, ignored 0, pending 0/All tests passed.(3 tests × 8 casos = 24 aserciones)- Contra-verificación en copia desechable (
/tmp, ya eliminada): con una implementación de sonda la suite dioTests: succeeded 3, failed 0; invirtiendoarr(j) < arr(min_index)por>enselection_sort->- selection_sort *** FAILED *** Expression was false selection_sort should sort an unsorted arrayyTests: succeeded 2, failed 1; revertido -> verde. Se comprobó también con una sonda aparte (forconreturninterno) que el non-local return seguía funcionando hoy (earlyExit = 99) pese al warning, así que no era un defecto observable en la salida README(s) verificado(s) / README(s) verified: yes (scala/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort41/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust) -> 42/49 (…, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala) Observaciones / Notes: Cuadragésima segunda implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. La estructura es el layout estándar de sbt que ya usafoundations/numbers/(mkdir -p src/main/scala src/test/scala project, ✅ en la guía), conbuild.sbt(Scala 3.9.0 +org.scalatest %% scalatest % 3.2.19 % Test),project/build.properties(sbt.version=1.10.1),src/main/scala/NaiveSort.scala,src/test/scala/NaiveSortTests.scalay.gitignore(target/,.bsp/,.scala-build/,.metals/,.idea/; verificado congit check-ignore -v target/scala-3.9.0/classes project/target/x .bsp/settings.json-> los tres coinciden). Naming: los nombressnake_casede la especificación (selection_sort,bubble_sort,insertion_sort) son válidos en Scala y se conservan; la suite los usa como nombre de cadatest("...")y en el mensaje del contrato (selection_sort should sort an unsorted array). Caso nulo incluido: unArray[Int]de la JVM admitenull, así que el indicador de fallo esnully la suite cubre 8 casos (los 7 de la especificación más el nulo) = 24 aserciones; el caso nulo se comprueba conassert(actual == null, …)porquesameElementsno admitenull. Los tres algoritmos ordenan in-place y devuelven la misma referencia, variante que la especificación permite, así que la suite ordena una copiaclone()por caso (aislamiento). Particularidades documentadas en el README: comparar arrays consameElementsy no con==(que es identidad de referencia), losfordel pseudocódigo como rangosuntilexclusivos y el cuidado con los non-local returns de Scala 3. Ubicación desviada de la especificación: layout sbt (src/main/scalaysrc/test/scalaen lugar desrc/naive_sort.extytest/naive_sort_test.ext) y ausencia derun_tests.scalaporquesbt testdescubre las suites de ScalaTest. El submódulo está en la ramafeat/algorithms/naive-sort. El índice de fasescala/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-19
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): scheme
Código verificado / Code verified: yes (la primera versión fallaba las dos suites: # of expected passes 9 de 24 en Guile y aborto en MIT/GNU Scheme con The procedure #[compound-procedure 12 insert] has been called with 3 arguments; it requires exactly 2 arguments.). Cuatro correcciones: 1) selection-sort usaba (remove min unsorted), que es de SRFI-1 y no está en el entorno base de Guile ni de MIT/GNU Scheme (Unbound variable: remove), sustituido por el helper propio remove-first; 2) el let con nombre insert de insertion-sort se llamaba con 3 argumentos teniendo 2 parametros, reescrito con 2 parametros (x y la lista pendiente) que devuelve la lista insertada; 3) el acumulador de insertion-sort se construye ya en orden ascendente, asi que se elimino el reverse final que lo invertia; 4) las tres funciones devolvian '() como indicador de fallo en vez de #f (contrato de las pruebas) y bubble-sort llamaba a (cdr unsorted) con la lista vacia, asi que se anadio la guarda n <= 1 del pseudocodigo. Divergencias idiomaticas aceptadas: orden funcional que devuelve una lista nueva (listas inmutables de Scheme, variante que la especificacion permite), API en kebab-case (selection-sort, bubble-sort, insertion-sort) con los nombres snake_case de la especificacion conservados en los casos y en el mensaje del contrato, y #f como indicador de fallo porque '() es la unica lista vacia)
Tests y comandos / Tests and commands:
- Verificacion estatica: no hay compilador previo; la comprobacion es la carga del modulo por las suites. Se forzo la recompilacion de Guile y los avisos sobre
remove/insertdesaparecieron: solo quedan loswarning: possibly unbound variabledel patron(load "../src/naive_sort.scm"), identicos a los que producennumbers/ycalculator/, que se evitan con--no-auto-compile guile --no-auto-compile -s naive_sort_tests_guile.scm(desdetest/) ->%%%% Starting test naive_sort (Writing full log to "naive_sort.log")y# of expected passes 24, rc=0, sin warningsSCMUNIT_PATH="$HOME/.local/share/scmunit/scmunit.scm" mit-scheme --quiet --load naive_sort_tests.scm-> 24 lineas# <algoritmo> should sort <caso>: . (0.ms)y24 checks ran: 24 passed, 0 failed- Contra-verificacion en copia desechable (
/tmp, ya eliminada): invirtiendo la seleccion del minimo (min->max) -> GuileFAIL selection_sort should sort an unsorted arrayy# of expected passes 20(4 fallos); scmunit marcaxen los mismos casos con el mensaje del contrato; revertido -> verde README(s) verificado(s) / README(s) verified: yes (scheme/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort42/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala) -> 43/49 (…, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme) Observaciones / Notes: Cuadragesima tercera implementacion homologada de la Fase 1. No cierra la fase: faltan los demas lenguajes y los modulos restantes. La estructura es manual (✍️mkdir -p src testen la guia) y sigue el patron defoundations/numbers/:src/naive_sort.scmy una suite por runtime (test/naive_sort_tests_guile.scmcon SRFI-64 ytest/naive_sort_tests.scmconscmunit), mas.gitignorecon*.log(verificado congit check-ignore -v test/naive_sort.log->.gitignore:1:*.log); los.loglos escribe Guile al ejecutar la suite. Las suites se ejecutan desdetest/porque cargan el modulo con(load "../src/naive_sort.scm"). Naming: la API va enkebab-casey los nombressnake_casede la especificacion se conservan en los casos y en el mensaje del contrato; enscmunit(que no admite mensajes por asercion) el mensaje viaja en el nombre del sub-testcase. Caso nulo incluido:'()no se distingue de la lista vacia, asi que el indicador de fallo es#f(mismo criterio que Racket) y la suite cubre 8 casos (los 7 de la especificacion mas el nulo) = 24 comprobaciones. Los tres algoritmos son funcionales (listas inmutables, devuelven lista nueva), variante que la especificacion permite, asi que los casos pueden usar los fixtures compartidos sin copiarlos. Particularidades documentadas en el README:removees de SRFI-1 y no esta en el entorno base (helperremove-firstpropio),(cdr '())es un error y exige la guardan <= 1explicita, la banderaswappeddebubble-sortviaja en el par(lista . bandera)y el acumulador deinsertion-sortse construye ya ascendente. Ubicacion desviada de la especificacion:src/naive_sort.scm(solo cambia la extension), dos suites (una por runtime) y ausencia derun_tests.scm. Nota de rama: el submodulo sigue endev, sin rama de trabajofeat/algorithms/naive-sort(como ocurrio en Raku). El indice de fasescheme/core/algorithms/README.mdse creo en este cierre.
Fecha / Date: 2026-09-20
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): swift
Código verificado / Code verified: yes (la primera versión pasaba los tests y compilaba sin warnings, pero bubble_sort no tenía la bandera swapped ni la salida temprana —hacía siempre las n - 1 pasadas—, lo que incumplía el criterio de aceptación de la especificación; se añadieron var swapped = false, swapped = true en cada intercambio e if !swapped { break }. Las tres funciones coinciden ahora con el pseudocódigo: selection_sort con 0..<count - 1 y i + 1..<count, insertion_sort insertando con swapAt(j, j - 1) mientras el vecino sea estrictamente mayor (equivalente al desplazamiento del pseudocódigo, misma complejidad y estable). Divergencias idiomáticas aceptadas: los tres algoritmos trabajan sobre una copia local y devuelven un array nuevo (variante «in-place o copia ordenada» que la especificación permite, y [Int] es un tipo de valor), y el caso nulo se omite porque [Int] no admite nil)
Tests y comandos / Tests and commands:
- Verificación estática:
swift build->[1/1] Planning build,Building for debugging...,[3/3] Emitting module NaiveSortyBuild complete! (0.21s), sin warnings swift test->Test Case 'NaiveSortTests.testBubbleSort' passed,… testInsertionSort passed,… testSelectionSort passed,Test Suite 'NaiveSortTests' passedyExecuted 3 tests, with 0 failures (0 unexpected) in 0.101 (0.101) seconds(3 tests × 7 casos = 21 aserciones)- Contra-verificación en copia desechable (
/tmp, ya eliminada): con una implementación de sonda la suite dioExecuted 3 tests, with 0 failures; invirtiendoresult[j] < result[minIndex]por>enselection_sort->error: NaiveSortTests.testSelectionSort : XCTAssertEqual failed: ("[9, 6, 5, 5, 2, 1]") is not equal to ("[1, 2, 5, 5, 6, 9]") - selection_sort should sort an unsorted array(y tres fallos más) conExecuted 3 tests, with 4 failures (0 unexpected); revertido -> verde README(s) verificado(s) / README(s) verified: yes (swift/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort43/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme) -> 44/49 (…, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift) Observaciones / Notes: Cuadragésima cuarta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. El andamiaje usó el comando de la guía (🔧swift package init --type library --name NaiveSort), que generaPackage.swift,.gitignore,Sources/NaiveSort/NaiveSort.swiftyTests/NaiveSortTests/NaiveSortTests.swift; se conservó el manifiesto generado (swift-tools-version: 6.3,swiftLanguageModes: [.v6]) y se amplió el.gitignorecon.build/y.swiftpm/además de las entradas del generador (verificado congit check-ignore -v .build/debug/x .swiftpm/x .DS_Store-> las tres coinciden). La plantilla de ejemplo del generador (código de ejemplo y un test con Swift Testing) se sustituyó por el contrato y la suite en XCTest, la convención denumbers/ycalculator/. Naming: los nombressnake_casede la especificación (selection_sort,bubble_sort,insertion_sort) son también los que usan los otros módulos Swift del repositorio, así que no hubo adaptación; los métodos de test van encamelCase(testSelectionSort) y el mensaje del contrato (selection_sort should sort an unsorted array) viaja en el tercer argumento deXCTAssertEqual. Caso nulo omitido:[Int]es un tipo de valor y no admitenil, y esta fase todavía no envuelve el array enOptional, así que no es representable en la firma; se conservan los 7 casos de la especificación. Los tres algoritmos ordenan sobre una copia local (var result = array) y devuelven un array nuevo, variante que la especificación permite, así que los fixtures de la suite no se contaminan (semántica de valor). Particularidades documentadas en el README: losfordel pseudocódigo se traducen a rangos semiabiertos (0..<count - 1,0..<count - 1 - i), el intercambio usaArray.swapAtsin invocarsorted()/sort(), y el espacio de nombres es una clase con métodos estáticos (los otros módulos Swift usanpublic enum, mismo comportamiento observable). Ubicación desviada de la especificación: layout de Swift Package Manager (Sources/NaiveSort/yTests/NaiveSortTests/en lugar desrc/ytest/) y ausencia derun_tests.swiftporqueswift testes el runner del paquete. El submódulo está en la ramafeat/algorithms/naive-sort. El índice de faseswift/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-20
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): tcl-tk
Código verificado / Code verified: yes (las tres funciones coinciden con el pseudocódigo: selection_sort con for {set i 0} {$i < $n - 1} {incr i} y $j < $n, bubble_sort con la bandera swapped y el break —el if not swapped: break del pseudocódigo— con el bucle interior $j < $n - 1 - $i, e insertion_sort insertando con lset mientras el vecino sea estrictamente mayor ([lindex $result $j] < [lindex $result [expr {$j - 1}]]), equivalente al desplazamiento del pseudocódigo y estable. El único intercambio es lset sobre la copia local; no se invoca lsort ni lsort -command. Divergencias idiomáticas aceptadas: los algoritmos trabajan sobre una copia local (set result $array) y devuelven una lista nueva —las listas de Tcl son valores y la especificación permite la variante «in-place o copia ordenada»—, y el caso nulo se omite porque Tcl no tiene null/nil y {} es a la vez la lista vacía y la cadena vacía)
Tests y comandos / Tests and commands:
- Verificación estática: Tcl no tiene compilador ni analizador estático, así que la comprobación es cargar el paquete:
TCLLIBPATH="$(cd ../src && pwd)" tclsh9.0 <<< 'package require naive_sort 1.0; puts [info commands ::NaiveSort::*]'->::NaiveSort::selection_sort ::NaiveSort::insertion_sort ::NaiveSort::bubble_sort(sin errores; Tcl 9.0.4) TCLLIBPATH="$(cd ../src && pwd)" tclsh9.0 naive_sort.test(desdetest/) ->naive_sort.test: Total 21 Passed 21 Skipped 0 Failed 0(3 algoritmos × 7 casos = 21)- Contra-verificación en copia desechable (
/tmp, ya eliminada): con una implementación de sonda la suite dioTotal 21 Passed 21 Skipped 0 Failed 0; invirtiendo[lindex $result $j] < [lindex $result $minIndex]por>enselection_sort->==== selection_sort: an unsorted array selection_sort should sort an unsorted array FAILED(y tres fallos más), con el mensaje del contrato; revertido -> verde README(s) verificado(s) / README(s) verified: yes (tcl-tk/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort44/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift) -> 45/49 (…, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk) Observaciones / Notes: Cuadragésima quinta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. La estructura es manual (✍️mkdir -p src testen la guía) y sigue el patrón defoundations/numbers/yfoundations/unit_test/calculator/:src/naive_sort.tcl(namespaceNaiveSortconnamespace exporty los 3proc, máspackage provide naive_sort 1.0al final),src/pkgIndex.tcl(package ifneeded naive_sort 1.0 …) ytest/naive_sort.test, más.gitignorecon*.log(verificado congit check-ignore -v test/naive_sort.log->.gitignore:1:*.log). El paquete se localiza conTCLLIBPATHapuntando asrc/y las suites se ejecutan desdetest/. Naming: los nombressnake_casede la especificación (selection_sort,bubble_sort,insertion_sort) son los que usan los otros módulos Tcl del repositorio, así que no hubo adaptación; el namespace va enPascalCase(NaiveSort) y el mensaje del contrato (selection_sort should sort an unsorted array) es la descripción de cadatest. Caso nulo omitido: Tcl no tienenull/nily{}no se distingue de la cadena vacía, así que no es representable y no hay indicador que comprobar; se conservan los 7 casos de la especificación = 21 comprobaciones. Los tres algoritmos ordenan una copia local y devuelven una lista nueva (listas de Tcl como valores), variante que la especificación permite, así que los cases reutilizan los fixtures sin copiarlos. Particularidades documentadas en el README: los intercambios usanlsetleyendo antes el valor a sobrescribir, los bucles sonfor {set …}con índices 0-based y no se invocalsort. Ubicación desviada de la especificación:src/naive_sort.tcl(solo cambia la extensión), la suite con sufijo.test(comorecursive.testdenumbers/) y ausencia derun_tests.tclporque Tcltest imprime el resumen de cada suite. El submódulo está en la ramafeat/algorithms/naive-sort. El índice de fasetcl-tk/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-20
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): typescript
Código verificado / Code verified: yes (las tres funciones coinciden con el pseudocódigo: selection_sort con for (let i = 0; i < n - 1; i++) y for (let j = i + 1; j < n; j++), bubble_sort con la bandera swapped y if (!swapped) break —el if not swapped: break del pseudocódigo— con el bucle interior j < n - 1 - i, e insertion_sort con el while (j >= 0 && array[j] > key) literal del pseudocódigo, estricto y por tanto estable. El único intercambio es por desestructuración ([a, b] = [b, a]); no se invoca Array.prototype.sort. Divergencias idiomáticas aceptadas: orden in-place que devuelve la misma referencia —variante que la especificación permite— y null como indicador de fallo (representable en un array de JavaScript))
Tests y comandos / Tests and commands:
- Verificación estática:
npm run build(tsc --noEmitconstrict: true,target: ES2022,module/moduleResolution: NodeNext) -> sin salida, sin errores ni warnings npm test(jest --runInBand) ->PASS test/naive_sort.test.ts, 24 líneas✓ <algorithm> should sort <caso>yTest Suites: 1 passed, 1 total,Tests: 24 passed, 24 total,Snapshots: 0 total(8 casos × 3 algoritmos = 24)- Contra-verificación en copia desechable (
/tmp, ya eliminada): con una implementación de sonda la suite dioTests: 24 passed, 24 total; invirtiendoresult[j] < result[minIndex]por>enselection_sort->✕ selection_sort should sort an unsorted array(y tres más) con● naive_sort › selection_sort should sort an unsorted array; revertido -> verde README(s) verificado(s) / README(s) verified: yes (typescript/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort45/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk) -> 46/49 (…, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk, TypeScript) Observaciones / Notes: Cuadragésima sexta implementación homologada de la Fase 1. No cierra la fase: faltan los demás lenguajes y los módulos restantes. El andamiaje usó el comando de la guía (✅npm init -y) y después se configuró el paquete comofoundations/numbers/:name: "typescript-naive_sort",private: true, scriptstest: "jest --runInBand"ybuild: "tsc --noEmit", y devDependencies@types/jest ^29.5.14,jest ^29.7.0,ts-jest ^29.2.5,typescript ^5.8.3;tsconfig.json(strict, ES2022, NodeNext,types: ["jest"], include desrc/ytest/) yjest.config.cjs(presetts-jest,roots: [test],testMatch: **/*.test.ts) son los mismos que ennumbers/..gitignoreconnode_modules/,dist/,coverage/ypackage-lock.json(verificado congit check-ignore -v node_modules/jest/package.json package-lock.json dist/x coverage/x-> los cuatro coinciden). Naming: los nombressnake_casede la especificación (selection_sort,bubble_sort,insertion_sort) son los que usa la claseNumbersdel repositorio, así que no hubo adaptación; la suite los conserva en el nombre de cada test. Caso nulo incluido: un array de JavaScript admitenull, así que el indicador de fallo esnull(distinguible de[]) y la suite cubre 8 casos (los 7 de la especificación más el nulo) = 24 tests; cada caso ordena una copia[...input]porque los algoritmos ordenan in-place (aislamiento). Limitación encontrada y resuelta en la suite: Jest 29 no admite mensaje enexpect(Expect takes at most one argument.), así que el helper registra un test por caso y el mensaje del contrato (selection_sort should sort an unsorted array) es el nombre del test —mismo criterio ya documentado en el módulo ReScript—. Particularidades documentadas en el README: buclesfor (let …)con cotas 0-based, intercambio por desestructuración y sinArray.prototype.sort. Ubicación desviada de la especificación:src/naive_sort.ts(solo cambia la extensión),test/naive_sort.test.ts(patrón.test.tsdejest.config.cjs, como ennumbers/) y ausencia derun_tests.tsporquenpm testejecuta Jest. Los avisos denpm install(inflight,glob) son de dependencias transitivas de Jest. El submódulo está en la ramafeat/algorithms/naive-sort. El índice de fasetypescript/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-20
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): v
Código verificado / Code verified: yes (la primera versión no compilaba: las tres funciones hacían mut array := array.clone(), redeclarando el parámetro con := en el mismo ámbito, y V lo rechaza con error: redefinition of 'array'; corregido renombrando el parámetro a arr y la copia mutable a result. Las tres funciones coinciden después con el pseudocódigo: selection_sort con for i in 0 .. n - 1 y for j in i + 1 .. n (rangos semiabiertos), bubble_sort con la bandera swapped y if !swapped { break } —el if not swapped: break del pseudocódigo— con el bucle interior 0 .. n - 1 - i, e insertion_sort con el for j >= 0 && result[j] > key literal del pseudocódigo, estricto y por tanto estable. El único intercambio es la asignación doble a, b = b, a; no se invoca sort. Divergencias idiomáticas aceptadas: reciben el array por valor, ordenan una copia mutable (arr.clone()) y devuelven un array nuevo —variante «in-place o copia ordenada» que la especificación permite—, y el caso nulo se omite porque []int es un tipo de valor y no admite null)
Tests y comandos / Tests and commands:
- Verificación estática:
v test .compila el módulo y la suite sin warnings ni errores (la compilación es la verificación de V) v test .(desde la raíz del módulo) ->---- Testing...,OK 2.319 ms …/test/naive_sort_test.vySummary for all V _test.v files: 1 passed, 1 total. Elapsed time: 3438 ms, on 1 job. Comptime: 3432 ms. Runtime: 2 ms.(el resumen cuenta archivos de test: 1 archivo con 3 funcionestest_*× 7 casos = 21 aserciones)- Contra-verificación en copia desechable (
/tmp, ya eliminada): con una implementación de sonda la suite dio1 passed, 1 total; invirtiendoresult[j] < result[min_index]por>enselection_sort->FAILcon la línea delasserty el mensaje del contratoselection_sort should sort an unsorted array; revertido -> verde v fmt -verify src/naive_sort.v test/naive_sort_test.v-> el único desvío es la ausencia de salto de línea final ensrc/naive_sort.v; los módulos ya homologadosnumbers/yunit_test/calculator/también estánnot vfmt'ed(3 y 1 errores de formato), así que es el estado preexistente del repositorio para V README(s) verificado(s) / README(s) verified: yes (v/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort46/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk, TypeScript) -> 47/49 (…, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk, TypeScript, V) Observaciones / Notes: Cuadragésima séptima implementación homologada de la Fase 1. No cierra la fase: faltan los dos lenguajes restantes (vala,zig). La estructura es manual (✍️mkdir -p src test+v.moden la guía) y sigue el patrón defoundations/numbers/:v.mod(Module { name: 'naive_sort' … }),src/naive_sort.v(module srccon las 3 funcionespub fn),test/naive_sort_test.v(suite integrada) y.gitignore(ejecutablesnaive_sort/naive_sort.exey objetos nativos*.out,*.o,*.so,*.dylib,*.dll; verificado congit check-ignore -v naive_sort.exe->.gitignore:2:naive_sort.exe). La suite importa el módulo conimport naive_sort.src, ruta que V resuelve por el nombre del directorio (una copia en/tmpcon otro nombre de carpeta falla concannot import module "naive_sort.src"). Naming: los nombressnake_casede la especificación (selection_sort,bubble_sort,insertion_sort) son los que usanumbers.v, así que no hubo adaptación; el parámetro esarry la copia mutableresult(V no permite redeclarar el parámetro). Caso nulo omitido:[]intes un tipo de valor y no admitenull, y los opcionales llegan en una fase posterior; se conservan los 7 casos de la especificación = 21 aserciones. Los arrays de V son valores, así que los fixtures no se contaminan aunque la función reordene su copia. Particularidades documentadas en el README: rangos semiabiertos (0 .. n - 1,0 .. n - 1 - i), asignación doble para el intercambio,assert cond, 'mensaje'(V sí admite mensaje, a diferencia de Jest) y constantes vacías con tipo explícito ([]int{}). Ubicación desviada de la especificación:src/naive_sort.v(solo cambia la extensión),test/naive_sort_test.v(sufijo_test.vque V descubre) y ausencia derun_tests.vporquev test .es el runner. El submódulo está en la ramafeat/algorithms/naive-sort. El índice de fasev/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-20
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): vala
Código verificado / Code verified: yes (las tres funciones del namespace NaiveSort coinciden con el pseudocódigo: selection_sort con for (int i = 0; i < n - 1; i++) y for (int j = i + 1; j < n; j++), bubble_sort con la bandera swapped y if (!swapped) { break; } —el if not swapped: break del pseudocódigo— con el bucle interior j < n - 1 - i, e insertion_sort con el while (j >= 0 && arr[j] > key) literal del pseudocódigo, estricto y por tanto estable. Los intercambios usan una variable temp; no se invoca ninguna función de ordenamiento de GLib. Divergencias idiomáticas aceptadas: orden in-place que devuelve la misma referencia —variante que la especificación permite— y el caso nulo se omite porque int[] no admite null sin la anotación int[]?)
Tests y comandos / Tests and commands:
- Verificación estática:
valac src/naive_sort.vala test/naive_sort_tests.vala --pkg glib-2.0 -o /tmp/vala-naive-sort-tests-> sin salida, sin warnings ni errores /tmp/vala-naive-sort-tests->TAP version 13,1..3,# Start of naive_sort tests,ok 1 /naive_sort/selection_sort,ok 2 /naive_sort/bubble_sort,ok 3 /naive_sort/insertion_sorty# End of naive_sort tests(3 tests × 7 casos = 21 aserciones)- Contra-verificación en copia desechable (
/tmp, ya eliminada): con una implementación de sonda la suite dio1..3conok 1,ok 2,ok 3; invirtiendoarr[j] < arr[min_index]por>enselection_sort-># selection_sort should sort an unsorted array(mensaje del contrato) ynot ok /naive_sort/selection_sort - ERROR:…:check_case: code should not be reached; revertido -> verde - Comprobación de nulabilidad:
valacavisaArgument 1: Cannot pass null to non-null parameter typeal pasarnulla un parámetroint[], evidencia de que el caso nulo no es representable sinint[]?README(s) verificado(s) / README(s) verified: yes (vala/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort47/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk, TypeScript, V) -> 48/49 (…, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk, TypeScript, V, Vala) Observaciones / Notes: Cuadragésima octava implementación homologada de la Fase 1. No cierra la fase: faltazig. La estructura es manual (✍️mkdir -p src testen la guía) y sigue el patrón defoundations/numbers/:src/naive_sort.vala(namespace NaiveSortcon las 3 funciones, declaradasstatic, es decir con visibilidad de archivo: el módulo se compila junto con la suite en una sola invocación devalac, que es el flujo documentado),test/naive_sort_tests.vala(GLib.Test) y.gitignore(binarionaive_sort_testsy archivos generados porvalac:*.c,*.h,*.vapi,*.o,*.a,*.so; verificado congit check-ignore -v naive_sort_tests src/naive_sort.vala.c test/naive_sort_tests.vala.c x.o x.vapi-> todos coinciden). La suite usa undelegate int[] SortFunc(int[] arr)para pasar la función a probar, un helperassert_sorts_all_cases(algorithm, sort)que recorre los 7 casos y un helpercheck_casepor caso;mainregistra los 3 tests conTest.add_funcy los ejecuta conTest.run()(salida TAP). Naming: los nombressnake_casede la especificación (selection_sort,bubble_sort,insertion_sort) son los que usanumbers.vala, así que no hubo adaptación. Caso nulo omitido:int[]no admitenullsinint[]?(comprobado convalac, que avisaCannot pass null to non-null parameter type), así que no es representable en la firma; se conservan los 7 casos de la especificación = 21 aserciones. Los arrays de Vala se pasan por referencia y los algoritmos ordenan in-place, así que la suite crea los fixtures como arrays locales en cada llamada al helper (aislamiento); además se evitaron fixturesconst int[]porque su copia genera warnings de C (-Wdiscarded-qualifiers) al compilar con--pkg glib-2.0. GLib.Test no admite mensaje enassert, así que el mensaje del contrato se emite conTest.message+assert_not_reached(), que es lo que aparece en el reporte de fallo. Ubicación desviada de la especificación:src/naive_sort.vala(solo cambia la extensión),test/naive_sort_tests.vala(sufijo en plural, comorecursive_tests.vala) y ausencia derun_tests.vala; el binario se compila en/tmp, fuera del repositorio. El submódulo está en la ramafeat/algorithms/naive-sort. El índice de fasevala/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-20
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): zig
Código verificado / Code verified: yes (la primera versión no compilaba: las tres funciones usaban for (i32 i = 0; i < n - 1; i += 1), el for de tres cláusulas de C, y zig lo rechaza con error: expected ',' after for operand en src/naive_sort.zig:23:12 —mismo error con zig build y con zig ast-check—; también aparecía j >= 0 && arr[j] > key con el operador &&, que no existe en Zig, e índices tipados como i32. Corregido con la forma idiomática: for (0..n - 1) |i| con for (i + 1..n) |j| en selection_sort y for (0..n - 1 - i) |j| en bubble_sort —el equivalente exacto de for j = 0 to n - 2 - i del pseudocódigo—, while (j > 0 and arr[j - 1] > key) : (j -= 1) en insertion_sort —equivalente del while j >= 0 and arr[j] > key con índices usize que no pueden volverse negativos—, operadores and/or e índices usize. Las tres funciones coinciden después con el pseudocódigo: selection_sort busca el mínimo con min_index y solo intercambia if (min_index != i); bubble_sort con la bandera swapped y if (!swapped) break; —el if not swapped: break del pseudocódigo—; e insertion_sort con la comparación estricta, que lo mantiene estable. Los intercambios usan una variable temp y no se invoca std.sort —solo aparece en el comentario de contrato del módulo— ni ninguna otra ayuda de ordenamiento de la biblioteca estándar. Divergencias idiomáticas aceptadas: orden in-place que devuelve el mismo slice —variante que la especificación permite— y el caso nulo se omite porque un slice []i32 no admite null sin ?[]i32)
Tests y comandos / Tests and commands:
- Verificación estática:
zig build-> sin salida, sin warnings ni errores (compila el módulo de producción y la librería estática);zig build --summary all->Build Summary: 3/3 steps succeeded,install cachedy+- compile lib naive_sort Debug native cached 26ms MaxRSS:38M zig build test --summary all(desde la raíz del módulo) ->Build Summary: 3/3 steps succeeded; 3/3 tests passed,test success,+- run test 3 pass (3 total) 6ms MaxRSS:4My+- compile test Debug native cached 45ms MaxRSS:4M(3 tests Zig, uno por algoritmo, × 7 casos = 21 aserciones)zig fmt --check build.zig src/naive_sort.zig test/naive_sort_test.zig-> sin salida (rc=0), sin desvíos de formato- Contra-verificación en copia desechable (
/tmp/zprobe, ya eliminada, con.zig-cacheyzig-outborrados): con una implementación de sonda la suite quedó en verde (rc=0); invirtiendoarr[j] < arr[min_index]por>enselection_sort->error: 'naive_sort_test.test.selection_sort' failed: slices differ…, conrun test 2 pass, 1 fail (3 total)y la línea del mensaje del contratoselection_sort should sort an unsorted array, salidarc=1; revertido -> verde - Comprobación de nulabilidad: un slice de Zig no admite
nullsin envolverlo en un opcional (?[]i32), así que el caso nulo no es representable en la firmapub fn <algoritmo>(arr: []i32) []i32; se conservan los 7 casos de la especificación - Artefactos ignorados:
git check-ignore -v zig-out/lib/libnaive_sort.a .zig-cache/x naive_sort naive_sort.exe x.o x.a x.so x.dylib x.dll-> las diez rutas coinciden con.gitignore(líneas 1-10) README(s) verificado(s) / README(s) verified: yes (zig/core/algorithms/naive_sort/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.naive_sort48/49 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, Common Lisp, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk, TypeScript, V, Vala) -> 49/49 (…, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk, TypeScript, V, Vala, Zig), con el estado de la tabla de la fase a ✅ Observaciones / Notes: Cuadragésima novena y última implementación homologada del módulocore.algorithms.naive_sort: con Zig quedan los 49 lenguajes. No cierra la fase: faltan los módulos 06-09, que siguen en 0/49, así que la Fase 1 continúa 🔄. La estructura es manual (✍️mkdir -p src testen la guía) y sigue el patrón defoundations/numbers/adoptado en el andamiaje de este módulo:build.zig(módulo de producción conb.createModule,b.addLibraryestática eb.installArtifact; módulo de tests contest_module.addImport("naive_sort", naive_sort_module),b.addTestyb.step("test", …)),src/naive_sort.zig(3 funcionespub fn) ytest/naive_sort_test.zig(std.testingintegrado). Naming: los nombressnake_casede la especificación (selection_sort,bubble_sort,insertion_sort) son los que usasrc/numbers.zig, así que no hubo adaptación; la suite los conserva en el nombre de cada test. Caso nulo omitido:[]i32no admitenullsin?[]i32(opcionales que llegan en una fase posterior), así que no hay indicador que comprobar; se conservan los 7 casos = 21 aserciones. Los slices son vistas sobre memoria mutable, así que la suite copia cada fixture en un búfer local[64]i32con@memcpyantes de ordenarlo (aislamiento).expectEqualSlicesno admite mensaje, así que el helper imprime el mensaje del contrato constd.debug.print("{s} should sort {s}", …)antes de devolver el error; esa línea aparece en el reporte de fallo. La suite usa una tablacasesdeSortCase(descripción, entrada, salida esperada) y un único helper compartidoassert_sorts_all_cases(algorithm, sort)que recibe un puntero de función*const fn ([]i32) []i32. A diferencia defoundations/numbers/, en este módulosrc/ytest/sí llevan comentarios (contrato, caso nulo y aislamiento). Ubicación desviada de la especificación:src/naive_sort.zig(solo cambia la extensión),test/naive_sort_test.zig(mismo nombre que la especificación) y ausencia derun_tests.zigporquezig build test --summary alles el runner. El submódulo está en la ramafeat/algorithms/naive-sort. El índice de fasezig/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-20
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.naive_sort
Lenguaje(s) / Language(s): php
Código verificado / Code verified: yes (las tres funciones de la clase NaiveSort coinciden con el pseudocódigo: selectionSort busca el mínimo del tramo no ordenado con $minIndex y solo intercambia if ($minIndex !== $i); bubbleSort conserva la bandera $swapped con if (!$swapped) break; —el if not swapped: break del pseudocódigo— y el bucle interior for ($j = 0; $j < $n - $i - 1; $j++), equivalente exacto de for j = 0 to n - 2 - i; e insertionSort usa el while ($j >= 0 && $arr[$j] > $key) literal del pseudocódigo, estricto y por tanto estable. Los intercambios se hacen por desestructuración ([$a, $b] = [$b, $a]) y ninguna función invoca sort, rsort, asort, usort ni otra ayuda de ordenamiento de la biblioteca estándar —comprobado con un grep de esas funciones en src/NaiveSort.php—. Divergencias idiomáticas aceptadas: (1) los arrays de PHP son tipos de valor (copy-on-write), así que cada método ordena su propia copia y devuelve el array ordenado, la variante «copia ordenada» que la especificación permite (no se usa array &$arr); (2) el if n <= 1 / return arr del pseudocódigo no se escribe explícitamente porque las cotas de los bucles ya lo cubren: con $n = 0, $n - 1 es -1 y $i < -1 nunca se cumple, y con $n = 1 no hay iteraciones, con el mismo comportamiento observable; (3) los métodos usan camelCase (selectionSort) por la convención de PHP (PSR-12) frente al snake_case de la especificación; (4) el caso nulo se omite porque array no admite null sin la anotación ?array)
Tests y comandos / Tests and commands:
- Verificación estática:
php -l src/NaiveSort.phpyphp -l test/NaiveSortTest.php->No syntax errors detected in src/NaiveSort.phpyNo syntax errors detected in test/NaiveSortTest.php(sin warnings; el módulo no declara linter) composer test(phpunita través del script de Composer; PHPUnit 13.3.4 sobre PHP 8.5.10) ->... 3 / 3 (100%),Time: 00:00.001, Memory: 18.00 MByOK (3 tests, 21 assertions), con código de salida0(3 tests, uno por algoritmo, con los 7 casos cada uno = 21 aserciones)- Contra-verificación en copia desechable (
/tmp/php-naive-final, ya eliminada): invirtiendo$arr[$j] < $arr[$minIndex]por>enselectionSort->selection_sort should sort an unsorted array,FAILURES! Tests: 3, Assertions: 15, Failures: 1.yrc=1; restaurada ->OK (3 tests, 21 assertions) - Artefactos ignorados:
git check-ignore -v vendor/autoload.php composer.lock .phpunit.cache/x .phpunit.result.cache-> las cuatro rutas coinciden con.gitignore(líneas 1-4) README(s) verificado(s) / README(s) verified: yes (php/core/algorithms/naive_sort/README.md), más los índices:php/core/algorithms/README.md(Nivel 2, creado en este cierre) yphp/core/README.mdyphp/README.md(Nivel 1, con la fase, el módulo y el comandocomposer install && composer test) Cambio en ROADMAP.md / ROADMAP.md change: ninguno.docs/ROADMAP.mdno mencionaphp: el resumen de progreso explica que los contadoresX/49cuentan los 49 submódulos registrados en.gitmodules, yphpes el submódulo 50 (git config --file .gitmodules --get-regexp path | wc -l->50), por lo que añadirlo a la lista de lenguajes decore.algorithms.naive_sort(hoy✅ 49/49 (Ada, …, Vala, Zig)) exigiría renumerar también el contador y la leyenda de todas las fases. Queda a decisión del autor cómo dar de altaphpcomo quincuagésimo lenguaje antes de tocar los contadores. Observaciones / Notes: Primera implementación homologada del submódulophp(nuevo en.gitmodules, ramafeat/algorithms/naive-sort). La estructura es manual (✍️mkdir -p src test+composer require --dev phpunit/phpunit) y sigue el patrón ya homologado enfoundations/numbers/yfoundations/unit_test/calculator/:composer.json(PHPUnit^13.3como dependencia de desarrollo, classmap desrc/ytest/, scripttest: phpunit),phpunit.xml(bootstrapvendor/autoload.phpy suite sobretest/) y.gitignore(/vendor/,composer.lock,.phpunit.cache/,.phpunit.result.cache). El módulo declara la claseNaiveSortdesde el esqueleto, así que ya está en el classmap y añadir métodos no requierecomposer dump-autoload. Naming: métodos encamelCase(convención de PHP), con los nombressnake_casede la especificación conservados en el mensaje del contrato de cada aserción (selection_sort should sort an unsorted array); PHPUnit admite mensaje como tercer argumento deassertSame, a diferencia deexpectEqualde Zig o delassertde GLib. Caso nulo omitido:arrayno admitenullsin?array(equivalente aint[]?de Vala y a?[]i32de Zig), que llega en la fase de abstracción y persistencia; se conservan los 7 casos = 21 aserciones. Aislamiento: los arrays de PHP son tipos de valor, así que el helper recibe en cada caso una copia nueva de la constanteCASESy ningún fixture compartido puede contaminarse. La suite usa constantes nombradas por caso, una tablaCASES(descripción -> entrada y salida esperada) y un único helper compartidoassertSortsAllCases(callable $sort, string $algorithm). Ubicación desviada de la especificación:src/NaiveSort.phpytest/NaiveSortTest.phpenPascalCase(PSR-4: un archivo por clase) y ausencia derun_tests.phpporquecomposer testejecuta PHPUnit. Nota para el autor: las dos últimas líneas del comentario de cabecera desrc/NaiveSort.phpsiguen diciendo que la implementación está pendiente y ya no aplican (no se han tocado por la regla de no modificar la implementación). El índice de fasephp/core/algorithms/README.mdse creó en este cierre.
Fecha / Date: 2026-09-26
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): ada
Código verificado / Code verified: yes (ada/core/algorithms/data_structures_basics/src/data_structures_basics.ads y .adb; la suite pasa 4/4 y el acta del sprint está en docs/evidence/algorithms/data_structures_basics/ada.md, commit c4e0f9e)
Tests y comandos / Tests and commands:
alr buildenada/core/algorithms/data_structures_basics->Success: Build finished successfully in 0.40 seconds., con 8 avisos de estilo-gnatyM(línea larga) y 7 warnings (-gnatwken cuatro punteros de trabajo,Removed_Valueasignada y no leída,FailureyResultdeclaradas y no referenciadas); ninguno es erroralr -C tests runenada/core/algorithms/data_structures_basics->OK Node,OK LinkedList,OK Stack,OK Queue,Total Tests Run: 4,Successful Tests: 4,Failed Assertions: 0,Unexpected Errors: 0- Verificación estática: Ada no tiene verificador declarado en la columna 5 de
data/languages.tsv, así queglot verifyinformasin verificador para ada: se omitey sale0; el acta lo registra comoverify_exit=-README(s) verificado(s) / README(s) verified: yes (ada/core/algorithms/data_structures_basics/README.md, generado desdedocs/README_Template.mdcon las trece secciones obligatorias) y los índices de Nivel 1 y Nivel 2 corregidos en el mismo cambio:ada/core/algorithms/README.md(nombres canónicos de los seis módulos de la fase y el módulo 06 añadido),ada/core/foundations/README.md,ada/core/README.mdyada/README.mdCambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics📋 0/50 -> 🔄 1/50 (Ada). La fase sigue abierta Observaciones / Notes: Primera implementación homologada del módulo 06. Adaptaciones declaradas en el README del módulo:Makecomo equivalente idiomático deinit,Failure_Value = -1como indicador natural,Delete/Pop/Dequeueque devuelven el resultado por parámetroout, subproyectotests/(plural) frente altest/de la especificación y caso nulo no representable en un tipo privado. La estructura por niveles se fijó endocs/README_Template.md(Niveles 1 y 2 como índices) y se aplicó a los cuatro README deada; los índices deadaarrastraban referencias alearning/,console_training/,gui_training/,microservices/,DockerfileyJenkinsfile, que ya no existen en el submódulo, y nombres de módulo desactualizados (data_structures,structures_apps). El cierre se hizo a mano:glotsigue declarando en su hoja de ruta quepointerabre una rama propia para el puntero, y el autor decidió no usarlo.
Fecha / Date: 2026-09-26
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): assembly
Código verificado / Code verified: yes (assembly/core/algorithms/data_structures_basics/src/ — seis ficheros: el contrato data_structures_basics.inc, alloc.asm, node.asm, linked_list.asm, stack.asm y queue.asm; el acta está en docs/evidence/algorithms/data_structures_basics/assembly.md, commit e4914bf)
Tests y comandos / Tests and commands:
make runenassembly/core/algorithms/data_structures_basics->tests run 15,passed 15,failed 0(los quince pasos de la especificación, uno por fila de sus tablas de casos)- Compilación limpia:
make clean && make-> ensambla once ficheros y enlaza conld -m elf_x86_64, sin un solo aviso de NASM - Contra-verificación (obligatoria): rompiendo
node_initpara que guarde0en vez del valor ->tests run 15,passed 13,failed 2, y fallan exactamente los dos casos deNode; revertido ->15/15y sin rastro de la sonda - Verificación estática: Assembly no tiene verificador declarado en la columna 5 de
data/languages.tsv, así queglot verifyinformasin verificador para assembly: se omitey sale0; el acta lo registra comoverify_exit=-README(s) verificado(s) / README(s) verified: yes (assembly/core/algorithms/data_structures_basics/README.md, generado desdedocs/README_Template.mdcon las trece secciones obligatorias) y los índices de Nivel 2 y Nivel 1 corregidos en el mismo cambio:assembly/core/algorithms/README.md(nombres canónicos de los seis módulos de la fase, el 06 añadido, patrón común y compilación rápida),assembly/core/README.md(Fases->Módulos, con los dos módulos de la fase 1) yassembly/README.md(faltabacore/algorithms/en la tabla) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics🔄 1/50 (Ada) -> 🔄 2/50 (Ada, Assembly). La fase sigue abierta Observaciones / Notes: Segunda implementación homologada del módulo 06. Decisión de diseño que el contrato no cubría, declarada en el README: sin libc no haymalloc, así que el módulo trae su propio heap (src/alloc.asm, bump allocator sobre la syscallbrk) en vez de enlazar libc o limitar la capacidad con un pool estático, que la especificación prohíbe. Adaptaciones declaradas:node_init/linked_list_init/stack_init/queue_initen lugar deinit(en Assembly no hay espacios de nombres ni métodos),0como ausencia nativa en los punteros,FAILURE = -1como indicador,deletedevolviendo1/-1y caso nulo no representable. El reparto en seis ficheros desrc/sigue la convención de los dos módulos de Assembly ya homologados (numbersynaive_sortdividen en tres) y trajo dos cambios estructurales: el contrato pasó de.asma.inccomo cabecera compartida (dfcef95) y elMakefileañadió-I$(SRC_DIR)/junto a-I$(TEST_DIR)/(e4914bf). El runnertest/run_tests.asmno lo generó el andamiaje: es la deuda del bloque B ya declarada (el runner se cae entrescaffoldysuite), y se escribió a mano con el patrón denaive_sort. Corregido además queassembly/core/algorithms/README.mdlistabadata_structurescon la especificación06_Data_Structuresystructures_appscon07_Structures_Apps, nombres que no existen en el repositorio.
Fecha / Date: 2026-09-27T14:32:42-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): ballerina
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/ballerina.md, commit 4c5dfbe)
Tests y comandos / Tests and commands:
bal test-> código0README(s) verificado(s) / README(s) verified: yes (ballerina/core/algorithms/data_structures_basics/README.mdyballerina/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 2/50 (Ada, Assembly)->core.algorithms.data_structures_basics🔄 3/50 (Ada, Assembly, Ballerina)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-09-27
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): c
Código verificado / Code verified: yes (c/core/algorithms/data_structures_basics/src/data_structures_basics.c e include/data_structures_basics.h; la suite pasa 4/4 con gcc -Wall -Wextra -std=c99 sin warnings)
Tests y comandos / Tests and commands:
make clean && make testenc/core/algorithms/data_structures_basics->gcc -Wall -Wextra -std=c99 -Iinclude(0 warnings, 0 errors);[====] Synthesis: Tested: 4 | Passing: 4 | Failing: 0 | Crashing: 0- Verificación estática:
gcc -Wall -Wextra -std=c99— sin warnings ni errores README(s) verificado(s) / README(s) verified: yes (c/core/algorithms/data_structures_basics/README.md, generado desdedocs/README_Template.mdcon las secciones obligatorias) e índices corregidos:c/core/algorithms/README.md(estructura de directorios condata_structures_basics, tabla de módulos actualizada, patrón común y compilación rápida añadidos; nombres canónicos de los módulos pendientes corregidos dedata_structures/structures_appsadata_structures_advanced),c/core/README.md(data_structures_basicsañadido a la descripción de la fase) yc/README.md(core/algorithms/añadido a la tabla de módulos y comandos denaive_sortydata_structures_basicsañadidos al inicio rápido) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 3/50 (Ada, Assembly, Ballerina)->core.algorithms.data_structures_basics 🔄 4/50 (Ada, Assembly, Ballerina, C). La fase sigue abierta. Observaciones / Notes: Cuarta implementación homologada del módulo 06. Adaptaciones idiomáticas declaradas en el README del módulo:node_init(Node*, int)en lugar del métodoNode.init(value)del pseudocódigo (C no tiene métodos; el prefijo de tipo es la convención de espacio de nombres),NULLcomo ausencia nativa de enlace,FAILURE_VALUE = -1como indicador de fallo entero,linked_list_deletedevolviendo0/-1en lugar del tipo booleano del pseudocódigo,malloc/freepara gestión de memoria manual y layoutinclude/+src/+test/(sinrun_tests.extseparado: Criterion descubre tests automáticamente). El índice de Nivel 2c/core/algorithms/README.mdtambién corregía los nombres de los módulos pendientes 06 y 07, que se listaban comodata_structuresystructures_appsen lugar de sus nombres canónicosdata_structures_basicsydata_structures_advanced.
Fecha / Date: 2026-09-30T18:06:49-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): cpp
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/cpp.md, commit d1d98d2)
Tests y comandos / Tests and commands:
bazelisk test //...-> código0README(s) verificado(s) / README(s) verified: yes (cpp/core/algorithms/data_structures_basics/README.mdycpp/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 6/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL)->core.algorithms.data_structures_basics 🔄 7/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL, C++)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-01T19:23:49-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): crystal
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/crystal.md, commit 2a71183)
Tests y comandos / Tests and commands:
crystal spec-> código0crystal tool format --check src-> código0README(s) verificado(s) / README(s) verified: yes (crystal/core/algorithms/data_structures_basics/README.mdycrystal/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 7/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL, C++)->core.algorithms.data_structures_basics 🔄 8/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL, C++, Crystal)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-02T19:46:38-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): csharp
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/csharp.md, commit 5006702)
Tests y comandos / Tests and commands:
dotnet test DataStructuresBasics.slnx-> código0README(s) verificado(s) / README(s) verified: yes (csharp/core/algorithms/data_structures_basics/README.mdycsharp/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 8/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL, C++, Crystal)->core.algorithms.data_structures_basics 🔄 9/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-02T22:51:15-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): d
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/d.md, commit 6652b39)
Tests y comandos / Tests and commands:
dub test-> código0README(s) verificado(s) / README(s) verified: yes (d/core/algorithms/data_structures_basics/README.mdyd/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 9/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal)->core.algorithms.data_structures_basics 🔄 10/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-03T08:42:46-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): dart
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/dart.md, commit 1614ce8)
Tests y comandos / Tests and commands:
dart test-> código0dart analyze-> código0README(s) verificado(s) / README(s) verified: yes (dart/core/algorithms/data_structures_basics/README.mdydart/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 10/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D)->core.algorithms.data_structures_basics 🔄 11/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-03T13:34:54-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): elixir
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/elixir.md, commit 2d79670)
Tests y comandos / Tests and commands:
mix test-> código0mix format --check-formatted-> código0README(s) verificado(s) / README(s) verified: yes (elixir/core/algorithms/data_structures_basics/README.mdyelixir/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 11/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart)->core.algorithms.data_structures_basics 🔄 12/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-03T19:21:48-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): elm
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/elm.md, commit 4075674)
Tests y comandos / Tests and commands:
elm-test-> código0README(s) verificado(s) / README(s) verified: yes (elm/core/algorithms/data_structures_basics/README.mdyelm/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 12/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir)->core.algorithms.data_structures_basics 🔄 13/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-03T20:48:27-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): erlang
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/erlang.md, commit dc80601)
Tests y comandos / Tests and commands:
rebar3 eunit-> código0README(s) verificado(s) / README(s) verified: yes (erlang/core/algorithms/data_structures_basics/README.mdyerlang/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 13/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm)->core.algorithms.data_structures_basics 🔄 14/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-03T21:22:39-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): forth
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/forth.md, commit 5b22a4a)
Tests y comandos / Tests and commands:
cd test && gforth run-tests.forth-> código0README(s) verificado(s) / README(s) verified: yes (forth/core/algorithms/data_structures_basics/README.mdyforth/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 14/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang)->core.algorithms.data_structures_basics 🔄 15/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-04T17:57:56-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): fsharp
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/fsharp.md, commit 6a45159)
Tests y comandos / Tests and commands:
dotnet test-> código0README(s) verificado(s) / README(s) verified: yes (fsharp/core/algorithms/data_structures_basics/README.mdyfsharp/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 15/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth)->core.algorithms.data_structures_basics 🔄 16/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-04T18:32:06-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): gleam
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/gleam.md, commit 847deae)
Tests y comandos / Tests and commands:
gleam test-> código0README(s) verificado(s) / README(s) verified: yes (gleam/core/algorithms/data_structures_basics/README.mdygleam/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 16/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#)->core.algorithms.data_structures_basics 🔄 17/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-04T23:45:20-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): go
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/go.md, commit 27be11c)
Tests y comandos / Tests and commands:
go test ./...-> código0test -z "$(gofmt -l src)"-> código0README(s) verificado(s) / README(s) verified: yes (go/core/algorithms/data_structures_basics/README.mdygo/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 17/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam)->core.algorithms.data_structures_basics 🔄 18/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-05T09:10:33-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): grain
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/grain.md, commit 936a1e3)
Tests y comandos / Tests and commands:
make test-> código0README(s) verificado(s) / README(s) verified: yes (grain/core/algorithms/data_structures_basics/README.mdygrain/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 18/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go)->core.algorithms.data_structures_basics 🔄 19/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-05T12:24:16-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): groovy
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/groovy.md, commit bd8827b)
Tests y comandos / Tests and commands:
./gradlew test-> código0README(s) verificado(s) / README(s) verified: yes (groovy/core/algorithms/data_structures_basics/README.mdygroovy/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 19/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain)->core.algorithms.data_structures_basics 🔄 20/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-05T19:38:41-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): haskell
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/haskell.md, commit 2726c95)
Tests y comandos / Tests and commands:
cabal test-> código0README(s) verificado(s) / README(s) verified: yes (haskell/core/algorithms/data_structures_basics/README.mdyhaskell/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 20/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy)->core.algorithms.data_structures_basics 🔄 21/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-05T20:02:46-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): haxe
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/haxe.md, commit 8e4da7d)
Tests y comandos / Tests and commands:
haxe build.hxml-> código0README(s) verificado(s) / README(s) verified: yes (haxe/core/algorithms/data_structures_basics/README.mdyhaxe/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 21/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell)->core.algorithms.data_structures_basics 🔄 22/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-05T20:29:49-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): java
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/java.md, commit fd396e0)
Tests y comandos / Tests and commands:
mvn test-> código0README(s) verificado(s) / README(s) verified: yes (java/core/algorithms/data_structures_basics/README.mdyjava/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 22/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe)->core.algorithms.data_structures_basics 🔄 23/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-05T22:16:45-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): javascript
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/javascript.md, commit de01c36)
Tests y comandos / Tests and commands:
npm test-> código0README(s) verificado(s) / README(s) verified: yes (javascript/core/algorithms/data_structures_basics/README.mdyjavascript/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 23/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java)->core.algorithms.data_structures_basics 🔄 24/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-06T09:14:25-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): julia
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/julia.md, commit 4100ea9)
Tests y comandos / Tests and commands:
julia --project=. test/run_tests.jl-> código0julia --project=. -e 'for f in filter(x->endswith(x,".jl"), readdir("src")); Meta.parse(read("src/$f", String)); end'-> código0README(s) verificado(s) / README(s) verified: yes (julia/core/algorithms/data_structures_basics/README.mdyjulia/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 24/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript)->core.algorithms.data_structures_basics 🔄 25/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-06T18:18:16-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): kotlin
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/kotlin.md, commit 0f897a8)
Tests y comandos / Tests and commands:
gradle test-> código0README(s) verificado(s) / README(s) verified: yes (kotlin/core/algorithms/data_structures_basics/README.mdykotlin/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 25/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia)->core.algorithms.data_structures_basics 🔄 26/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-06T20:13:00-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): lua
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/lua.md, commit bd8bd7f)
Tests y comandos / Tests and commands:
busted-> código0README(s) verificado(s) / README(s) verified: yes (lua/core/algorithms/data_structures_basics/README.mdylua/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 26/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin)->core.algorithms.data_structures_basics 🔄 27/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-06T21:58:17-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): nim
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/nim.md, commit 3aafc9c)
Tests y comandos / Tests and commands:
nimble test-> código0nim check src/data_structures_basics.nim-> código0README(s) verificado(s) / README(s) verified: yes (nim/core/algorithms/data_structures_basics/README.mdynim/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 27/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua)->core.algorithms.data_structures_basics 🔄 28/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-07T11:36:02-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): ocaml
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/ocaml.md, commit f66e37e)
Tests y comandos / Tests and commands:
dune runtest-> código0README(s) verificado(s) / README(s) verified: yes (ocaml/core/algorithms/data_structures_basics/README.mdyocaml/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 28/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim)->core.algorithms.data_structures_basics 🔄 29/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-07T14:43:40-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): perl
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/perl.md, commit d2e8cd2)
Tests y comandos / Tests and commands:
prove --ext=.pl test/-> código0find lib -type f -name '*.p[lm]' -print0 | xargs -0 -r -n1 perl -Ilib -c-> código0README(s) verificado(s) / README(s) verified: yes (perl/core/algorithms/data_structures_basics/README.mdyperl/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 29/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml)->core.algorithms.data_structures_basics 🔄 30/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-07T16:34:28-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): php
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/php.md, commit 6f86fde)
Tests y comandos / Tests and commands:
composer test-> código0php -l src/DataStructuresBasics.php-> código0README(s) verificado(s) / README(s) verified: yes (php/core/algorithms/data_structures_basics/README.mdyphp/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 30/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl)->core.algorithms.data_structures_basics 🔄 31/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-07T17:14:11-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): prolog
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/prolog.md, commit 1d46d18)
Tests y comandos / Tests and commands:
cd test && swipl -q -f data_structures_basics_tests.pl -t halt-> código0README(s) verificado(s) / README(s) verified: yes (prolog/core/algorithms/data_structures_basics/README.mdyprolog/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 31/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP)->core.algorithms.data_structures_basics 🔄 32/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-07T18:10:32-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): purescript
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/purescript.md, commit 7ca388a)
Tests y comandos / Tests and commands:
spago test-> código0README(s) verificado(s) / README(s) verified: yes (purescript/core/algorithms/data_structures_basics/README.mdypurescript/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 32/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog)->core.algorithms.data_structures_basics 🔄 33/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-07T19:20:22-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): python
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/python.md, commit 558b949)
Tests y comandos / Tests and commands:
pytest-> código0python3 -m compileall -q src-> código0README(s) verificado(s) / README(s) verified: yes (python/core/algorithms/data_structures_basics/README.mdypython/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 33/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript)->core.algorithms.data_structures_basics 🔄 34/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-07T21:35:25-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): r
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/r.md, commit d4a9df6)
Tests y comandos / Tests and commands:
make test-> código0Rscript -e 'invisible(lapply(list.files("R", full.names=TRUE), parse))'-> código0README(s) verificado(s) / README(s) verified: yes (r/core/algorithms/data_structures_basics/README.mdyr/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 34/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python)->core.algorithms.data_structures_basics 🔄 35/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-08T22:43:34-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): racket
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/racket.md, commit 07657f0)
Tests y comandos / Tests and commands:
raco test -x .-> código0README(s) verificado(s) / README(s) verified: yes (racket/core/algorithms/data_structures_basics/README.mdyracket/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 35/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R)->core.algorithms.data_structures_basics 🔄 36/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-09T12:48:35-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): raku
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/raku.md, commit 181540d)
Tests y comandos / Tests and commands:
prove6 -l t/-> código0README(s) verificado(s) / README(s) verified: yes (raku/core/algorithms/data_structures_basics/README.mdyraku/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 36/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket)->core.algorithms.data_structures_basics 🔄 37/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-09T14:48:10-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): rescript
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/rescript.md, commit 4c4c933)
Tests y comandos / Tests and commands:
npm test-> código0README(s) verificado(s) / README(s) verified: yes (rescript/core/algorithms/data_structures_basics/README.mdyrescript/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 37/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku)->core.algorithms.data_structures_basics 🔄 38/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-09T16:09:45-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): rexx
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/rexx.md, commit 98710c6)
Tests y comandos / Tests and commands:
rexx test/data_structures_basics_tests.rexx-> código0README(s) verificado(s) / README(s) verified: yes (rexx/core/algorithms/data_structures_basics/README.mdyrexx/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 38/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript)->core.algorithms.data_structures_basics 🔄 39/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-10T22:45:41-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): ruby
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/ruby.md, commit dd39701)
Tests y comandos / Tests and commands:
bundle exec rspec-> código0ruby -c src/data_structures_basics.rb-> código0README(s) verificado(s) / README(s) verified: yes (ruby/core/algorithms/data_structures_basics/README.mdyruby/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 39/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX)->core.algorithms.data_structures_basics 🔄 40/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-11T14:50:37-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): rust
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/rust.md, commit 5503d14)
Tests y comandos / Tests and commands:
cargo test-> código0cargo fmt --check-> código0README(s) verificado(s) / README(s) verified: yes (rust/core/algorithms/data_structures_basics/README.mdyrust/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 40/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby)->core.algorithms.data_structures_basics 🔄 41/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-11T15:25:18-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): scala
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/scala.md, commit 60fe2bc)
Tests y comandos / Tests and commands:
sbt -batch -no-colors test-> código0README(s) verificado(s) / README(s) verified: yes (scala/core/algorithms/data_structures_basics/README.mdyscala/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 41/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust)->core.algorithms.data_structures_basics 🔄 42/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-11T20:20:38-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): scheme
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/scheme.md, commit 635d975)
Tests y comandos / Tests and commands:
cd test && guile --no-auto-compile -s data_structures_basics_tests_guile.scm-> código0README(s) verificado(s) / README(s) verified: yes (scheme/core/algorithms/data_structures_basics/README.mdyscheme/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 42/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala)->core.algorithms.data_structures_basics 🔄 43/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-12T10:35:29-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): swift
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/swift.md, commit 06fef90)
Tests y comandos / Tests and commands:
swift test-> código0README(s) verificado(s) / README(s) verified: yes (swift/core/algorithms/data_structures_basics/README.mdyswift/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 43/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme)->core.algorithms.data_structures_basics 🔄 44/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-12T13:01:18-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): tcl-tk
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/tcl-tk.md, commit 25e13a6)
Tests y comandos / Tests and commands:
cd test && TCLLIBPATH="$(cd ../src && pwd)" tclsh9.0 data_structures_basics.test-> código0README(s) verificado(s) / README(s) verified: yes (tcl-tk/core/algorithms/data_structures_basics/README.mdytcl-tk/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 44/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift)->core.algorithms.data_structures_basics 🔄 45/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-12T13:40:56-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): typescript
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/typescript.md, commit 9cb2677)
Tests y comandos / Tests and commands:
npm test-> código0README(s) verificado(s) / README(s) verified: yes (typescript/core/algorithms/data_structures_basics/README.mdytypescript/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 45/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk)->core.algorithms.data_structures_basics 🔄 46/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk, TypeScript)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-12T15:58:14-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): vala
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/vala.md, commit 8b8c564)
Tests y comandos / Tests and commands:
valac src/data_structures_basics.vala test/data_structures_basics_test.vala --pkg glib-2.0 -o /tmp/data_structures_basics-tests && /tmp/data_structures_basics-tests-> código0README(s) verificado(s) / README(s) verified: yes (vala/core/algorithms/data_structures_basics/README.mdyvala/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 46/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk, TypeScript)->core.algorithms.data_structures_basics 🔄 47/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk, TypeScript, Vala)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-12T16:47:27-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): zig
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/zig.md, commit d4af5d0)
Tests y comandos / Tests and commands:
zig build test-> código0zig fmt --check src-> código0README(s) verificado(s) / README(s) verified: yes (zig/core/algorithms/data_structures_basics/README.mdyzig/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics 🔄 47/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk, TypeScript, Vala)->core.algorithms.data_structures_basics 🔄 48/50 (Ada, Assembly, Ballerina, C, C#, Clojure, COBOL, C++, Crystal, D, Dart, Elixir, Elm, Erlang, Forth, F#, Gleam, Go, Grain, Groovy, Haskell, Haxe, Java, JavaScript, Julia, Kotlin, Lua, Nim, OCaml, Perl, PHP, Prolog, PureScript, Python, R, Racket, Raku, ReScript, REXX, Ruby, Rust, Scala, Scheme, Swift, Tcl/Tk, TypeScript, Vala, Zig)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-12
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): common-lisp
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_basics/common-lisp.md, commit a9bdf0e, veredicto green; el módulo está en el main del submódulo)
Tests y comandos / Tests and commands:
ros run --load run-tests.lisp --eval '(uiop:quit)'->Running test suite DATA-STRUCTURES-BASICS-SUITE,Did 15 checks.,Pass: 15 (100%),Fail: 0 ( 0%), código de salida0(los quince pasos de la especificación)- Verificación estática:
common-lispno tiene verificador declarado en la columna 5 dedata/languages.tsv, así que el acta lo registra comoverify_exit=-README(s) verificado(s) / README(s) verified: yes (common-lisp/core/algorithms/data_structures_basics/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics🔄 48/50 (Ada, …, TypeScript, Vala, Zig) -> 🔄 49/50 (Ada, …, COBOL, Common Lisp, C++, …, Vala, Zig) Observaciones / Notes: Registro tardío, escrito a mano el 2026-10-12 (no lo generóglot close): el módulo cerró el 2026-09-29 con acta verde y el puntero del monorepo se confirmó (a259b27), pero el contador del roadmap nunca recogió el lenguaje. Quedan dos pendientes abiertos en ese mismo contador: (1)v— su módulo está en elmaindel submódulo (core/algorithms/data_structures_basics/) pero el acta almacenada está en rojo (v fmt -verify src->verify_exit=1, commit24c577a, anterior a la normalizacióntests/->test/), así que no cumple el criterio de «finalizado» que el propio contador declara; y (2)prolog— está contado, pero su módulo vive solo en la ramafeat/algorithms/data-structures-basics(publicada, acta verde1d46d18) y el gitlink del monorepo (ed42ba7) apunta al tip de esa rama sin integrar en sumain(69f1e9f).
Fecha / Date: 2026-10-12
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_basics
Lenguaje(s) / Language(s): v
Código verificado / Code verified: yes (corregido y verificado el 2026-10-12: el fuente pasa a src/data_structures_basics.v con module src —que es lo que exige el verificador declarado del catálogo, v fmt -verify src— y la suite conserva tests/, la carpeta que crea v init --lib)
Tests y comandos / Tests and commands:
v fmt -verify src-> sin salida, código0v -shared -check src/data_structures_basics.v-> sin salida, código0v test .->OK 3.209 ms …/tests/data_structures_basics_test.v,Summary for all V _test.v files: 1 passed, 1 total. Elapsed time: 3350 ms, on 1 job. Comptime: 3344 ms. Runtime: 3 ms., código0README(s) verificado(s) / README(s) verified: yes (v/core/algorithms/data_structures_basics/README.mdcon estructura,v.mod, comandos y salidas reales al día, y el índice de fasev/core/algorithms/README.mdcon el árbol y los casos) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_basics🔄 49/50 (Ada, …, TypeScript, Vala, Zig) -> ✅ 50/50 (Ada, …, TypeScript, V, Vala, Zig) Observaciones / Notes: cierre del último lenguaje del módulo. Los defectos venían del andamiaje sin normalizar: el módulo quedó condata_structures_basics.ven la raíz ytests/(forma cruda dev init --lib),v.modconversion: '0.0.1'/license: 'GNU'y la evidencia en rojo (v fmt -verify srcno encontrabasrc/), así que no hubo commit de cierre y el contador no lo recogía. Corregido a mano: fuente asrc/conmodule src, import de la suite adata_structures_basics.src,v.moda0.1.0/MIT(patrón denumbers,calculatorynaive_sort) y README + índice al día. Pendiente del autor: el acta almacenada (docs/evidence/algorithms/data_structures_basics/v.md, commit24c577a) es anterior a la corrección y sigue en rojo —conviene regenerarla al confirmar el cierre— y los cambios del submódulo están sin confirmar.
Fecha / Date: 2026-10-24T22:13:20-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_advanced
Lenguaje(s) / Language(s): ada
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_advanced/ada.md, commit 7b30147)
Tests y comandos / Tests and commands:
alr -C tests run-> código0README(s) verificado(s) / README(s) verified: yes (ada/core/algorithms/data_structures_advanced/README.mdyada/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_advanced 📋->core.algorithms.data_structures_advanced 🔄 1/50 (Ada)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-26T21:36:42-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_advanced
Lenguaje(s) / Language(s): assembly
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_advanced/assembly.md, commit 44398f7)
Tests y comandos / Tests and commands:
make run-> código0README(s) verificado(s) / README(s) verified: yes (assembly/core/algorithms/data_structures_advanced/README.mdyassembly/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_advanced 🔄 1/50 (Ada)->core.algorithms.data_structures_advanced 🔄 2/50 (Ada, Assembly)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-26T22:38:22-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_advanced
Lenguaje(s) / Language(s): ballerina
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_advanced/ballerina.md, commit a7195bc)
Tests y comandos / Tests and commands:
bal test-> código0README(s) verificado(s) / README(s) verified: yes (ballerina/core/algorithms/data_structures_advanced/README.mdyballerina/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_advanced 🔄 2/50 (Ada, Assembly)->core.algorithms.data_structures_advanced 🔄 3/50 (Ada, Assembly, Ballerina)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-27T21:46:13-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_advanced
Lenguaje(s) / Language(s): c
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_advanced/c.md, commit 9687015)
Tests y comandos / Tests and commands:
make test-> código0README(s) verificado(s) / README(s) verified: yes (c/core/algorithms/data_structures_advanced/README.mdyc/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_advanced 🔄 3/50 (Ada, Assembly, Ballerina)->core.algorithms.data_structures_advanced 🔄 4/50 (Ada, Assembly, Ballerina, C)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-28T16:15:06-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_advanced
Lenguaje(s) / Language(s): clojure
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_advanced/clojure.md, commit 3742a93)
Tests y comandos / Tests and commands:
clojure -T:build test-> código0README(s) verificado(s) / README(s) verified: yes (clojure/core/algorithms/data_structures_advanced/README.mdyclojure/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_advanced 🔄 4/50 (Ada, Assembly, Ballerina, C)->core.algorithms.data_structures_advanced 🔄 5/50 (Ada, Assembly, Ballerina, C, Clojure)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-10-30T20:05:29-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_advanced
Lenguaje(s) / Language(s): cobol
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_advanced/cobol.md, commit f847d3d)
Tests y comandos / Tests and commands:
make test-> código0README(s) verificado(s) / README(s) verified: yes (cobol/core/algorithms/data_structures_advanced/README.mdycobol/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_advanced 🔄 5/50 (Ada, Assembly, Ballerina, C, Clojure)->core.algorithms.data_structures_advanced 🔄 6/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-11-03T22:22:56-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_advanced
Lenguaje(s) / Language(s): common-lisp
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_advanced/common-lisp.md, commit e707bce)
Tests y comandos / Tests and commands:
ros run --load run-tests.lisp --eval '(uiop:quit)'-> código0README(s) verificado(s) / README(s) verified: yes (common-lisp/core/algorithms/data_structures_advanced/README.mdycommon-lisp/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_advanced 🔄 6/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL)->core.algorithms.data_structures_advanced 🔄 7/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL, Common Lisp)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-11-06T22:18:17-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_advanced
Lenguaje(s) / Language(s): cpp
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_advanced/cpp.md, commit 92fc573)
Tests y comandos / Tests and commands:
bazelisk test //...-> código0README(s) verificado(s) / README(s) verified: yes (cpp/core/algorithms/data_structures_advanced/README.mdycpp/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_advanced 🔄 7/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL, Common Lisp)->core.algorithms.data_structures_advanced 🔄 8/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL, Common Lisp, C++)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.
Fecha / Date: 2026-11-08T20:48:19-06:00
Fase / Phase: core.algorithms
Módulo(s) / Module(s): core.algorithms.data_structures_advanced
Lenguaje(s) / Language(s): crystal
Código verificado / Code verified: yes (acta de evidencia / evidence record: docs/evidence/algorithms/data_structures_advanced/crystal.md, commit 022dfa5)
Tests y comandos / Tests and commands:
crystal spec-> código0crystal tool format --check src-> código0README(s) verificado(s) / README(s) verified: yes (crystal/core/algorithms/data_structures_advanced/README.mdycrystal/core/algorithms/README.md) Cambio en ROADMAP.md / ROADMAP.md change:core.algorithms.data_structures_advanced 🔄 8/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL, Common Lisp, C++)->core.algorithms.data_structures_advanced 🔄 9/50 (Ada, Assembly, Ballerina, C, Clojure, COBOL, Common Lisp, C++, Crystal)Observaciones / Notes: entrada escrita porglot closedesde la evidencia del sprint. La revisión cualitativa (pseudocódigo, divergencias idiomáticas) no la comprueba el script, y el commit lo hace el autor.