28/12/2021

10 Jours de JavaScript - HackerRank (2/3)

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;
}


Aucun commentaire:

Enregistrer un commentaire