Last active
November 4, 2023 17:19
-
-
Save criquelmes/35bb11b9c02a33b8025c5f15a1b8c813 to your computer and use it in GitHub Desktop.
tarea.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| Escriba la función menos_mas_año(nombre_archivo, año_buscado), que reciba como | |
| parámetro el nombre del archivo con la información de las guaguas, y un número entero que | |
| representa un año particular. La función debe retornar una lista que contendrá dos sublistas. La | |
| primera sublista debe contener los 10 nombres menos utilizados en el año indicado en el | |
| parámetro, ordenados de menor a mayor según la cantidad de veces que fueron asignados. | |
| Así, el primer elemento de esta sublista será el nombre de guagua menos usado para ese año | |
| particular. Por otra parte, la segunda sublista debe contener los 10 nombres más utilizados ese | |
| año, también ordenados de menor a mayor de acuerdo a la cantidad de veces que fueron | |
| asignados. Así, el último elemento de esa sublista será el nombre de guagua más usado para | |
| ese año particular. | |
| Si al construir las listas dos nombres tienen la misma cantidad de ocurrencias, deben ordenarse | |
| alfabéticamente. | |
| */ | |
| // Crear una funcion para leer un .csv | |
| // Esto solo funciona con javascript | |
| const fs = require('fs') | |
| if (process.argv[2] === undefined) { | |
| console.log('Usage: node csvToJson.js <file.csv>') | |
| process.exit(1) | |
| } | |
| const filename = process.argv[2] | |
| const fileText = fs.readFileSync(filename).toString() | |
| const allLines = fileText.split('\n') | |
| const dataLines = allLines.slice(1, allLines.length - 1) | |
| const fieldNames = allLines[0].split(';') | |
| let objList = [] | |
| for(let i = 0; i < dataLines.length; i++) { | |
| let obj = {} | |
| const data = dataLines[i].split(';') | |
| for(let j = 0; j < fieldNames.length; j++) { | |
| const fieldName = fieldNames[j].toLowerCase() | |
| obj[fieldName] = data[j] | |
| } | |
| objList.push(obj) | |
| } | |
| const jsonText = JSON.stringify(objList) | |
| const outputFilename = filename.replace('.csv', '.json') | |
| fs.writeFileSync(outputFilename, jsonText) | |
| // Arreglo de objetos con personas | |
| const arrayPersonas = [ | |
| { year: 2004, name: "Felipe", gender: "M" }, | |
| { year: 2000, name: "Lesly", gender: "F" }, | |
| { year: 2000, name: "Matias", gender: "M" }, | |
| { year: 2001, name: "Nicolas", gender: "M" }, | |
| { year: 2000, name: "Leonardo", gender: "M" }, | |
| { year: 2003, name: "Joaquin", gender: "M" }, | |
| { year: 2009, name: "Byron", gender: "M" }, | |
| { year: 2005, name: "Juan", gender: "M" }, | |
| { year: 2006, name: "Patricio", gender: "M" }, | |
| { year: 2006, name: "Antonia", gender: "F" }, | |
| { year: 2004, name: "Felipe", gender: "M" }, | |
| { year: 2004, name: "Mario", gender: "M" }, | |
| ]; | |
| // contendrá el resultado de contar las personas por año | |
| const lista = {}; | |
| function menos_mas_anio(nombre_archivo, anio_buscado) { | |
| nombre_archivo.map((persona) => { | |
| if(persona.year === anio_buscado){ | |
| //Si el valor evaluado existe entre las propiedades del objeto, sumamos +1 a su valor actual. | |
| //Si no existe, creamos la propiedad con valor 0 y le sumamos +1. | |
| lista[persona.name] = (lista[persona.name] || 0) + 1; | |
| } | |
| }); | |
| } | |
| menos_mas_anio(arrayPersonas, 2004); | |
| const sorted = {}; | |
| Object.keys(lista) | |
| .sort((a,b) => lista[a]-lista[b]) // ordenamos por valor en `lista` | |
| .forEach((key) => sorted[key] = lista[key]); // almacenamos en `sorted` | |
| // Forma corta | |
| // const sorted = Object.fromEntries( | |
| // Object.entries(lista).sort(([, a], [, b]) => a - b) | |
| // ); | |
| console.log(lista); | |
| console.log(sorted); | |
| /* | |
| Escriba la función construir_archivo(nombre_archivo, año1, año2), que reciba | |
| como parámetro el nombre del archivo con la información de las guaguas, así como dos | |
| números enteros que representan y definen un rango. La función debe crear un nuevo archivo, | |
| cuyo nombre debe ser: | |
| resumen_año1-año2.txt | |
| reemplazando año1 y año2 por los respectivos valores de los parámetros. | |
| El archivo debe contener, el formato mostrado en el ejemplo a continuación, los nombres de las | |
| guaguas menos y más utilizados para cada año en el rango definido por los parámetros. | |
| Al finalizar, la función debe retornar la cantidad de nombres diferentes que se incluyeron en el | |
| archivo construido. | |
| Nota: Considere utilizar la función de la pregunta 2 | |
| */ | |
| function construir_archivo(nombre_archivo, anio1, anio2){ | |
| let archivo = []; | |
| nombre_archivo.map((persona) => { | |
| if(persona.year >= anio1 && persona.year <= anio2){ | |
| archivo.push(persona); | |
| } | |
| }); | |
| // en caso de asociar los nombres puedes utilizar las listas anteriores | |
| console.log(archivo); | |
| return archivo; // retornar un archivo con el formato solicitado | |
| } | |
| const arrayPersonas2 = [ | |
| { year: 2004, name: "Felipe", gender: "M" }, | |
| { year: 2000, name: "Lesly", gender: "F" }, | |
| { year: 2000, name: "Matias", gender: "M" }, | |
| { year: 2001, name: "Nicolas", gender: "M" }, | |
| { year: 2000, name: "Leonardo", gender: "M" }, | |
| { year: 2003, name: "Joaquin", gender: "M" }, | |
| { year: 2009, name: "Byron", gender: "M" }, | |
| { year: 2005, name: "Juan", gender: "M" }, | |
| { year: 2006, name: "Patricio", gender: "M" }, | |
| { year: 2006, name: "Antonia", gender: "F" }, | |
| { year: 2004, name: "Felipe", gender: "M" }, | |
| { year: 2004, name: "Mario", gender: "M" }, | |
| ]; | |
| construir_archivo(arrayPersonas2, 2000, 2004) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment