aoc-2015/jour12/jour12.js

65 lines
1.7 KiB
JavaScript
Raw Normal View History

2021-03-24 21:25:07 +01:00
const fs = require('fs');
try {
2021-03-24 21:33:49 +01:00
const file = fs.readFileSync("input", "utf8");
const data = JSON.parse(file);
2021-03-24 21:25:07 +01:00
console.log("Traitement de la première partie…");
2021-03-24 21:32:11 +01:00
console.log("La somme totale est " + parseJsonPrem(data));
2021-03-24 21:45:51 +01:00
console.log("Traitement de la deuxième partie…");
console.log("La somme totale est " + parseJsonDeux(data));
2021-03-24 21:25:07 +01:00
} catch(err) {
console.log("Une erreur a été rencontrée !");
console.error(err);
}
2021-03-24 21:32:11 +01:00
/**
* Fonction additionnant tous les nombres contenus dans un objet
* de type Array ou JSON.
*
* @param Object obj - Object se trouve des nombres
* @return int la somme totale
*/
2021-03-24 21:25:07 +01:00
function parseJsonPrem(obj) {
let ret = 0;
let value;
for (const index in obj) {
value = obj[index];
2021-03-24 21:32:11 +01:00
if (value instanceof Object) { // car Array est un Object
2021-03-24 21:25:07 +01:00
ret += parseJsonPrem(value);
} else if (Number.isInteger(value)) {
ret += value;
}
}
return ret;
}
2021-03-24 21:45:51 +01:00
/**
* Fonction additionnant tous les nombres contenus dans un objet
* sauf ceux qui ont une propriété "red". Règle ne sappliquant pas
* aux Array (toujours une addition complète)
*
* @param Object obj - Object se trouve des nombres
* @return int la somme totale
*/
function parseJsonDeux(obj) {
2021-03-24 21:25:07 +01:00
let ret = 0;
let value;
2021-03-24 21:45:51 +01:00
// cest plus jolie davoir une variable dédiée plutot que bourrer le if
let isObj = !(obj instanceof Array) && obj instanceof Object;
2021-03-24 21:25:07 +01:00
for (const index in obj) {
value = obj[index];
2021-03-24 21:45:51 +01:00
if (value instanceof Object) {
ret += parseJsonDeux(value);
2021-03-24 21:25:07 +01:00
} else if (Number.isInteger(value)) {
ret += value;
2021-03-24 21:45:51 +01:00
} else if (isObj && value === "red") {
ret = 0;
break;
2021-03-24 21:25:07 +01:00
}
}
return ret;
}