Day 4: Create a Rectangle Object (28.12.2021)
En JS un objet est un ensemble de propriétés. Une propriété est une association entre un nom et une valeur.
function Rectangle(a, b) { this.length = a; this.width = b; this.perimeter = 2 * (a + b); this.area = a * b; }
Day 4: Count Objects (28.12.2021)
function getCount(objects) { let count = 0; objects.forEach(o => { if (o.x === o.y) count++; }); return count; }
Day 4: Classes (28.12.2021)
La classe possède un constructeur. Il permet de créer d'autres objets de même type.
class Polygon { constructor(arrays) { this.arrays = arrays; } perimeter() { let sum = 0; this.arrays.forEach(a => { sum += a; }); return sum; } }
Day 5: Inheritance (29.12.2021)
- Une classe peut hériter d'une classe mère en utilisant le mot clé extends.
- Une méthode peut être ajoutée au prototype d'une classe. C'est aussi possible d'ajouter directement la méthode dans la classe définie.
class Rectangle { constructor(w, h) { this.w = w; this.h = h; } } Rectangle.prototype.area = function () { return this.w * this.h; } class Square extends Rectangle { constructor(w) { super(w, w); } }
function sides(literals, ...expressions) { let [A, P] = [expressions[0], expressions[1]]; let s1 = (P + Math.sqrt(Math.pow(P, 2) - 16 * A)) / 4; let s2 = (P - Math.sqrt(Math.pow(P, 2) - 16 * A)) / 4; return [s1, s2].sort(); }
function modifyArray(nums) { let result = []; nums.forEach(num => { num % 2 == 0 ? result.push(num * 2) : result.push(num * 3); }); return result; }
- En JS, l'opération de type ET Logique (AND) au niveau du bit (bitwise operation) se fait en utilisant l'opérateur &. Ex: 1 & 2 correspond niveau bit à 01 AND 10 ce qui donne 00 (en base 2) et 0 (en base 10).
- J'ai trouvé ce challenge assez intéressant parce que j'ai appris lors du codage que Math.max(...r) (où r est un tableau, ...r est la décomposition du tableau en éléments distincts) ne marche que lorsque ce tableau contient peu d'éléments. Lorsqu'on a plus d'une centaine d'éléments, alors on obtient un Runtime Error (cette opération doit être complexe et gourmande en mémoire).
function getMaxLessThanK(n, k) { let r = []; for (let i=1; i<=n; i++) { for (let j=i+1; j<=n; j++) { if ((i & j) < k) { r.push(i & j); } } } //return Math.max(...r); let max = r[0]; for (let el of r) { if (el > max) max = el; } return max; }
// The days of the week are: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" function getDayName(dateString) { let dayName; let theDay = new Date(dateString); const dayNumber = theDay.getDay(); switch(dayNumber) { case 0: dayName = "Sunday"; break; case 1: dayName = "Monday"; break; case 2: dayName = "Tuesday"; break; case 3: dayName = "Wednesday"; break; case 4: dayName = "Thursday"; break; case 5: dayName = "Friday"; break; case 6: dayName = "Saturday"; break; default: throw Error("This day does not exist !"); }
Day 7: Regular Expressions I (31.12.2021)
Ce challenge aborde les regex (expressions régulières). Cela mérite un tutoriel à part entière.
// ^ => first item matches: // () => stores matching value captured within // [aeiou] => matches any of the characters in the brackets // . => matches any character: // + => for 1 or more occurrances (this ensures str length > 3) // \1 => matches to previously stored match. // \2 looks for matched item stored 2 instances ago // \3 looks for matched item stored 3 ago, etc // $ ensures that matched item is at end of the sequence function regexVar() { let re = /^([aeiou]).+\1$/; return re; }
function main() { const re = regexVar(); const s = readLine(); console.log(re.test(s)); }
Day 7: Regular Expressions II (01.01.2022)
1er jour de la nouvelle année - Joyeuse fête à toutes et à tous.
function regexVar() { let re = /^(Mr|Mrs|Ms|Dr|Er)(\.)([a-zA-Z])+$/; return re; }
Day 7: Regular Expressions III (02.01.2022)
Ce challenge se base sur les flags. Par exemple g pour un match global, i pour ignorer la casse (majuscule, minuscule).
function regexVar() { let re = /[0-9]+/g; return re; }
Aucun commentaire:
Enregistrer un commentaire