Dans ce chapitre je vous propose de faire une petite pause dans notre apprentissage et de pratiquer un peu avec des nouveaux exemples pour vérifier si les éléments que l'on a vu sont compris.
Palindrome
00:30 - L'objectif de cet exercice est de créer une fonction isPalindrome()
qui renverra vrai si un mot est un palindrome et false sinon. La fonction ne sera pas sensible à la casse.
console.log(isPalindrome('kayak')) // true
console.log(isPalindrome('SOS')) // true
console.log(isPalindrome('Kayak')) // true
console.log(isPalindrome('Bonjour')) // false
Pour cet exercice vous aurez besoin d'utiliser des fonctions que l'on n'a pas encore vues mais c'est l'occasion d'essayer de voir comment lire la documentation :
function isPalindrome (word) {
const reversedWord = word
.split('')
.reverse()
.join('')
return word.toUpperCase() === reversedWord.toUpperCase()
}
Moyenne
08:03 - Dans cet exercice on souhaite modifier l'objet suivant pour ajouter une propriété moyenne
qui contiendra la moyenne de chaque élève.
const students = [
{
name: 'John',
notes: [1, 20, 18, 19, 12]
},
{
name: 'Jane',
notes: [17, 18, 20, 13, 15]
},
{
name: 'Sophie',
notes: [17, 12, 14, 15, 13]
},
{
name: 'Marc',
notes: [2, 3, 5, 8, 9]
},
{
name: 'Manon',
notes: [18, 17, 18, 19, 12]
}
]
Une fois cet objet modifié on créera un top 3 des élèves.
Pour cet exercice vous aurez besoin de la fonction sort.
const moyenne = (notes) => {
let sum = 0
for (let note of notes) {
sum = sum + note
}
return sum / notes.length
}
const compareStudent = (a, b) => {
return b.moyenne - a.moyenne
}
for (let student of students) {
student.moyenne = moyenne(student.notes)
student.worst = Math.min(...student.notes)
student.best = Math.max(...student.notes)
}
students.sort(compareStudent)
const formatStudent = (student) => {
return `${student.name} avec une moyenne de ${student.moyenne}, meilleure note (${student.best}), pire note (${student.worst})`
}
console.log(`Top 3 étudiant
1: ${formatStudent(students[0])}
2: ${formatStudent(students[1])}
3: ${formatStudent(students[2])}
`)
Calculateur de fréquence
20:50 - Nous allons créer un système capable de calculer la fréquence des mots dans une chaine de caractère. L'objectif sera dans un premier temps d'obtenir un objet qui contiendra en propriété le mot, et en valeur le nombre d'occurence ({bonjour: 3, maison: 2}
)
const phrase = `Vous savez, moi je ne crois pas qu’il y ait de bonne ou de mauvaise situation. Moi, si je devais résumer ma vie aujourd’hui avec vous, je dirais que c’est d’abord des rencontres.`
Pour cet exercice on nettoiera la chaine en retirant les caractères qui ne sont pas des mots (, ? : ...). Pour cela vous aurez besoin de la fonction replaceAll. Vous aurez aussi besoin de mettre la phrase en minuscule à l'aide de toLowerCase
const frequencies = {}
const ignored = [',', '?', ':', '!', '«', '»', '…', '’']
let cleanedPhrase = phrase.toLowerCase()
for(let character of ignored) {
cleanedPhrase = cleanedPhrase.replaceAll(character, '')
}
const words = cleanedPhrase.split(' ')
for(let word of words) {
if (word !== '' && word.length >= 4) {
if(frequencies[word]) {
frequencies[word]++
} else {
frequencies[word] = 1
}
}
}
console.log(frequencies)
Maintenant vous devez ajouter de la logique pour extraire le top 3 des mots les plus utilisé dans la phrase.
const frequencies = {}
const ignored = [',', '?', ':', '!', '«', '»', '…', '’']
let cleanedPhrase = phrase.toLowerCase()
for(let character of ignored) {
cleanedPhrase = cleanedPhrase.replaceAll(character, '')
}
const words = cleanedPhrase.split(' ')
for(let word of words) {
if (word !== '' && word.length >= 4) {
if(frequencies[word]) {
frequencies[word]++
} else {
frequencies[word] = 1
}
}
}
const frequenciesArray = []
for (let k in frequencies) {
frequenciesArray.push({
word: k,
count: frequencies[k]
})
}
frequenciesArray.sort((a, b) => b.count - a.count)
console.log(`Les mots les plus fréquents sont "${frequenciesArray[0].word}" (${frequenciesArray[0].count}), "${frequenciesArray[1].word}" (${frequenciesArray[1].count}), "${frequenciesArray[2].word}" (${frequenciesArray[2].count})`)