Skip to content
This repository has been archived by the owner on Dec 3, 2023. It is now read-only.

Commit

Permalink
Minor changes to test files. Fixed bug in Breadth First Search algori…
Browse files Browse the repository at this point in the history
…thm. Updated README.md and Spanish translations. Minor formatting changes to Kahn Topological Sort algorithm. Updated NPM package versions. Updated Travis-CI Node test versions. Bumped package.json version to 2.2.0.
  • Loading branch information
sumtype committed Jan 27, 2019
1 parent 532f601 commit bb0e781
Show file tree
Hide file tree
Showing 98 changed files with 562 additions and 399 deletions.
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
language: node_js
node_js:
- "8.9"
- "9.4"
- "10.15.0"
- "11.8.0"
after_success: yarn coverage
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Common algorithms implemented in JavaScript with [Mocha](https://mochajs.org/)/[

* [Breadth First Search](https://github.com/sumtype/common-algorithms-js/blob/master/algorithms/es/breadthFirstSearch.js)
* [Depth First Search](https://github.com/sumtype/common-algorithms-js/blob/master/algorithms/es/depthFirstSearch.js)
* [Kahn's Topological sorting](https://github.com/sumtype/common-algorithms-js/blob/master/algorithms/es/kahnTopologicalSort.js)
* [Kahn's Topological Sort](https://github.com/sumtype/common-algorithms-js/blob/master/algorithms/es/kahnTopologicalSort.js)

### Math

Expand Down Expand Up @@ -156,7 +156,7 @@ or

When running `npm test` or `yarn test` all the algorithms, tests, and "./es5.js" file are transpiled based on their corresponding ES6+ files. This way when running your tests not only are your ES6+ algorithms tested in an ES6+ context, but your transpiled ES5 algorithms are tested in transpiled ES5 test contexts. Since modules in tests are loaded via "./es.js" or the transpiled "./es5.js" file the export files themselves are tested too. In addition, [standard](https://www.npmjs.com/package/standard) is run to ensure all ES6+/ES5 code is style compliant and the test breaks if there are issues.

This repository uses [Travis-CI](https://travis-ci.org/sumtype/common-algorithms-js) for deployment testing on Node.js versions 8.9.x and 9.4.x. Test coverage is reported by Coveralls. Test reports are generated by nyc.
This repository uses [Travis-CI](https://travis-ci.org/sumtype/common-algorithms-js) for deployment testing on Node.js versions 10.15.x and 11.8.x. Test coverage is reported by Coveralls. Test reports are generated by nyc.

## Transpiling ES5 Algorithms

Expand Down
25 changes: 12 additions & 13 deletions algorithms/es/breadthFirstSearch.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,18 @@

'use strict'

let queue = []
let visited = []
let connected = true

const breadthFirstSearch = (input = []) => {
const breadthFirstSearch = (input = null) => {
if (input === null) return null
const queue = []
const visited = []
let connected = true
const search = (value, input, f, r) => {
for (let i = 0; i < input.length; i++) if (input[value][i] && !visited[i]) queue[++r] = i
if (f <= r) {
visited[queue[f]] = 1
search(queue[f++], input, f, r)
}
}
for (let i = 0; i < input.length; i++) {
queue[i] = 0
visited[i] = 0
Expand All @@ -18,12 +25,4 @@ const breadthFirstSearch = (input = []) => {
return connected
}

const search = (value, input, f, r) => {
for (let i = 0; i < input.length; i++) if (input[value][i] && !visited[i]) queue[++r] = i
if (f <= r) {
visited[queue[f]] = 1
search(queue[f++], input, f, r)
}
}

export default breadthFirstSearch
16 changes: 8 additions & 8 deletions algorithms/es/kahnTopologicalSort.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
/*
A JavaScript module which performs a topological sort on an input array of edges using Kahn's algorithm.
*/

'use strict'

const kahnTopologicalSort = edges => {
Expand All @@ -22,20 +26,15 @@ const kahnTopologicalSort = edges => {
const visit = (idstr, ancestors) => {
let node = nodes[idstr]
let id = node.id
if (visited[idstr]) return
if (visited[idstr]) return null
if (!Array.isArray(ancestors)) ancestors = []
ancestors.push(id)
visited[idstr] = true
node.afters.forEach(afterID => {
if (ancestors.indexOf(afterID) >= 0) {
throw new Error('closed chain : ' + afterID + ' is in ' + id)
throw new Error(`Edges are not part of a directed acyclic graph: ${afterID} is in ${id}.`)
}
visit(
afterID.toString(),
ancestors.map(v => {
return v
})
)
visit(afterID.toString(), ancestors.map(v => v))
})
sorted.unshift(id)
}
Expand All @@ -44,4 +43,5 @@ const kahnTopologicalSort = edges => {

return sorted
}

export default kahnTopologicalSort
27 changes: 13 additions & 14 deletions algorithms/es5/breadthFirstSearch.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,21 @@
Object.defineProperty(exports, '__esModule', {
value: true
})
var queue = []
var visited = []
var connected = true

var breadthFirstSearch = function breadthFirstSearch () {
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []
var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null

if (input === null) return null
var queue = []
var visited = []
var connected = true
var search = function search (value, input, f, r) {
for (var i = 0; i < input.length; i++) {
if (input[value][i] && !visited[i]) queue[++r] = i
} if (f <= r) {
visited[queue[f]] = 1
search(queue[f++], input, f, r)
}
}
for (var i = 0; i < input.length; i++) {
queue[i] = 0
visited[i] = 0
Expand All @@ -33,14 +41,5 @@
} return connected
}

var search = function search (value, input, f, r) {
for (var i = 0; i < input.length; i++) {
if (input[value][i] && !visited[i]) queue[++r] = i
} if (f <= r) {
visited[queue[f]] = 1
search(queue[f++], input, f, r)
}
}

exports.default = breadthFirstSearch
})
5 changes: 3 additions & 2 deletions algorithms/es5/kahnTopologicalSort.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@
var visit = function visit (idstr, ancestors) {
var node = nodes[idstr]
var id = node.id
if (visited[idstr]) return
if (visited[idstr]) return null
if (!Array.isArray(ancestors)) ancestors = []
ancestors.push(id)
visited[idstr] = true
node.afters.forEach(function (afterID) {
if (ancestors.indexOf(afterID) >= 0) {
throw new Error('closed chain : ' + afterID + ' is in ' + id)
throw new Error('Edges are not part of a directed acyclic graph: ' + afterID + ' is in ' + id + '.')
}
visit(afterID.toString(), ancestors.map(function (v) {
return v
Expand All @@ -57,5 +57,6 @@

return sorted
}

exports.default = kahnTopologicalSort
})
46 changes: 46 additions & 0 deletions locales/es/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Código de conducta del Pacto del contribuyente

## Nuestro compromiso

Con el fin de fomentar un ambiente abierto y acogedor, nosotros, como contribuyentes y mantenedores, nos comprometemos a hacer de la participación en nuestro proyecto y nuestra comunidad una experiencia sin hostigamiento para todos, independientemente de la edad, el tamaño del cuerpo, la discapacidad, el origen étnico, la identidad de género y la expresión. Nivel de experiencia, nacionalidad, apariencia personal, raza, religión o identidad y orientación sexual.

## Nuestras Normas

Ejemplos de comportamiento que contribuyen a crear un ambiente positivo incluyen:

* Usar lenguaje acogedor e inclusivo.
* Ser respetuoso de diferentes puntos de vista y experiencias.
* Aceptar con agrado la crítica constructiva.
* Enfocarse en lo que es mejor para la comunidad.
* Mostrando empatía hacia otros miembros de la comunidad.

Ejemplos de comportamiento inaceptable por parte de los participantes incluyen:

* El uso de lenguaje o imágenes sexualizadas y atención o avances sexuales no deseados
* Trolling, comentarios insultantes / despectivos, y ataques personales o políticos.
* Hostigamiento público o privado.
* Publicar información privada de otros, como una dirección física o electrónica, sin permiso explícito
* Otras conductas que razonablemente podrían considerarse inapropiadas en un entorno profesional

## Nuestras responsabilidades

Los encargados del proyecto son responsables de aclarar los estándares de comportamiento aceptable y se espera que tomen las medidas correctivas adecuadas y justas en respuesta a cualquier instancia de comportamiento inaceptable.

Los responsables del proyecto tienen el derecho y la responsabilidad de eliminar, editar o rechazar comentarios, confirmaciones, códigos, ediciones de wiki, problemas y otras contribuciones que no estén alineadas con este Código de conducta, o de prohibir temporal o permanentemente a cualquier colaborador por otros comportamientos que lo consideran inapropiado, amenazador, ofensivo o dañino.

## alcance

Este Código de conducta se aplica tanto en espacios del proyecto como en espacios públicos cuando una persona representa al proyecto o su comunidad. Los ejemplos de representación de un proyecto o comunidad incluyen el uso de una dirección de correo electrónico oficial del proyecto, la publicación a través de una cuenta oficial de las redes sociales, o actuar como un representante designado en un evento en línea o fuera de línea. La representación de un proyecto puede ser definida y clarificada aún más por los mantenedores del proyecto.

## Cumplimiento

Se puede informar sobre casos de comportamiento abusivo, acosador o inaceptable poniéndose en contacto con el equipo del proyecto en support@sumtype.tech. El equipo del proyecto revisará e investigará todas las quejas y responderá de la manera que considere apropiada a las circunstancias. El equipo del proyecto está obligado a mantener la confidencialidad con respecto al informador de un incidente. Más detalles de políticas específicas de cumplimiento pueden ser publicados por separado.

Los mantenedores del proyecto que no siguen o hacen cumplir el Código de conducta de buena fe pueden enfrentar repercusiones temporales o permanentes según lo determinen otros miembros de la dirección del proyecto.

## Atribución

Este Código de conducta está adaptado del [Pacto con el colaborador] [página de inicio], versión 1.4, disponible en [http://contributor-covenant.org/version/1/4][version]

[página de inicio]: http://contributor-covenant.org
[versión]: http://contributor-covenant.org/version/1/4/
35 changes: 35 additions & 0 deletions locales/es/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Contribuir

¡Bienvenido! Por favor, siéntase libre de contribuir con algoritmos, problemas, soluciones y traducciones.

## Algoritmos

Hay algunos pasos para agregar un algoritmo al repositorio. Recuerde que todas las contribuciones de algoritmo y prueba de JavaScript deben seguir las reglas de [JavaScript Standard Style] (https://standardjs.com/). Se sugiere el código ES6+ y las implementaciones rápidas son preferibles.

1) Cree su archivo de algoritmo de JavaScript dentro del [directorio de algoritmos de ES] (https://github.com/sumtype/common-algorithms-js/tree/master/algorithms/es), siguiendo la convención de denominación de casos de camellos utilizada. El archivo debe seguir las mismas convenciones de diseño dentro de los otros archivos de algoritmos y tener un encabezado de comentario que explique qué hace la función y qué parámetros espera.

2) Agregue la exportación de su algoritmo a [es.js] (https://github.com/sumtype/common-algorithms-js/blob/master/es.js) siguiendo las convenciones utilizadas para agregar las demás. Necesitas agregarlo a su categoría objeto y exportar. Por favor, mantenga la organización alfabetizada.

3) Cree el archivo de prueba de su algoritmo dentro del [directorio de prueba de ES] (https://github.com/sumtype/common-algorithms-js/tree/master/test/es). El archivo debe tener el mismo nombre que en el directorio de algoritmos, pero con el sufijo "Pruebas" agregado. Vea las otras pruebas para ejemplos. Su archivo de prueba debe seguir las mismas convenciones de diseño dentro de otros archivos de prueba. Debe haber pruebas para cubrir los casos de éxito. Casos de falla y borde también cuando sea apropiado.

4) Agregue su nuevo algoritmo a [README.md] (https://github.com/sumtype/common-algorithms-js/blob/master/README.md) siguiendo las mismas convenciones utilizadas para describir otros algoritmos. Si es necesaria una nueva categoría de algoritmos, agréguela siguiendo las mismas convenciones que otros.

5) **Opcional**: actualice los archivos README.md dentro de las subcarpetas en el [directorio de locales] (https://github.com/sumtype/common-algorithms-js/tree/master/locales) para incluir su nuevo algoritmo (traducido apropiadamente).

6) Si no actualizó los archivos README.md dentro de las subcarpetas en el [directorio de locales] (https://github.com/sumtype/common-algorithms-js/tree/master/locales), cree un problema que especifique Se deben agregar traducciones de locale para su nuevo algoritmo.

7) Ejecute `yarn test` o `npm test` para generar las versiones del algoritmo ES5, el archivo es5.js actualizado, los archivos de prueba ES5. Busque y solucione los errores de estilo estándar de JavaScript (si no hay ninguno, la prueba no se interrumpirá y continuará ejecutando los casos de prueba Mocha Chai). Revise las estadísticas de cobertura de su prueba. Una vez que haya superado las pruebas y haya obtenido una buena cobertura en su versión de algoritmo ES (> 95%, idealmente 100%), estará listo para realizar su solicitud de confirmación y extracción. Es posible que no sea posible una alta cobertura de prueba en el algoritmo ES5 dado el entorno de prueba y los cambios realizados durante el proceso de transpilación.

7) Cree una solicitud de extracción de su bifurcación a la rama maestra siguiendo la [plantilla de solicitud de extracción] (https://github.com/sumtype/common-algorithms-js/blob/master/PULL_REQUEST_TEMPLATE.md).

## Cuestiones

Formatee los problemas de acuerdo con la [plantilla de problemas] (https://github.com/sumtype/common-algorithms-js/blob/master/ISSUE_TEMPLATE.md).

## arreglos

Formatee las solicitudes de extracción de arreglos de acuerdo con la [plantilla de solicitud de extracción] (https://github.com/sumtype/common-algorithms-js/blob/master/PULL_REQUEST_TEMPLATE.md).

## Traducciones

Para agregar una traducción, cree un nuevo directorio siguiendo las convenciones de nomenclatura de [ISO 639-1] (https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes). Dentro del directorio crea un archivo README.md. El archivo README.md debe imitar el archivo en inglés [README.md] (https://github.com/sumtype/common-algorithms-js/blob/master/README.md) precisamente en el formato y precisión en el contenido traducido idioma. Una vez que su traducción esté lista o haya terminado de realizar cambios en las traducciones existentes, cree una solicitud de extracción siguiendo la [plantilla de solicitud de extracción] (https://github.com/sumtype/common-algorithms-js/blob/master/ PULL_REQUEST_TEMPLATE.md) a la rama maestra desde su fork.
7 changes: 7 additions & 0 deletions locales/es/ISSUE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
### Comportamiento esperado


### Comportamiento real


### Pasos de reproducción para producir un comportamiento real
6 changes: 6 additions & 0 deletions locales/es/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Soluciona el problema #

Cambios propuestos en esta solicitud de extracción:
-
-
-

0 comments on commit bb0e781

Please sign in to comment.