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);
}
}
Day 5: Template Literals (29.12.2021)
Le template literal (`.....`) permet d'écrire des chaînes de caractères sur plusieurs lignes. Il permet aussi de profiter du string interpolation (ex: ${name}).
NB: Ce challenge est assez bizarre. Les instructions ne sont pas claires et on ne manipule pas réellement le template litteral lors du codage.
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();
}
Day 6: Arrow Functions (30.12.2021)
Les fonctions fléchées possèdent une syntaxe courte.
function modifyArray(nums) {
let result = [];
nums.forEach(num => {
num % 2 == 0 ? result.push(num * 2) : result.push(num * 3);
});
return result;
}
Day 6: Bitwise Operators (30.12.2021)
- 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;
}
Day 6: JavaScript Dates (30.12.2021)
// 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;
}