Skip to content

Instantly share code, notes, and snippets.

@criquelmes
Last active November 4, 2023 17:19
Show Gist options
  • Select an option

  • Save criquelmes/35bb11b9c02a33b8025c5f15a1b8c813 to your computer and use it in GitHub Desktop.

Select an option

Save criquelmes/35bb11b9c02a33b8025c5f15a1b8c813 to your computer and use it in GitHub Desktop.
tarea.js
/*
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