aoc-2015/jour12/jour12.js

65 lines
1.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const fs = require('fs');
try {
const file = fs.readFileSync("input", "utf8");
const data = JSON.parse(file);
console.log("Traitement de la première partie…");
console.log("La somme totale est " + parseJsonPrem(data));
console.log("Traitement de la deuxième partie…");
console.log("La somme totale est " + parseJsonDeux(data));
} catch(err) {
console.log("Une erreur a été rencontrée !");
console.error(err);
}
/**
* Fonction additionnant tous les nombres contenus dans un objet
* de type Array ou JSON.
*
* @param Object obj - Object où se trouve des nombres
* @return int la somme totale
*/
function parseJsonPrem(obj) {
let ret = 0;
let value;
for (const index in obj) {
value = obj[index];
if (value instanceof Object) { // car Array est un Object
ret += parseJsonPrem(value);
} else if (Number.isInteger(value)) {
ret += value;
}
}
return ret;
}
/**
* 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 où se trouve des nombres
* @return int la somme totale
*/
function parseJsonDeux(obj) {
let ret = 0;
let value;
// cest plus jolie davoir une variable dédiée plutot que bourrer le if
let isObj = !(obj instanceof Array) && obj instanceof Object;
for (const index in obj) {
value = obj[index];
if (value instanceof Object) {
ret += parseJsonDeux(value);
} else if (Number.isInteger(value)) {
ret += value;
} else if (isObj && value === "red") {
ret = 0;
break;
}
}
return ret;
}