{ "cells": [ { "cell_type": "markdown", "id": "23d25984", "metadata": {}, "source": [ "# Sixième exercice en JavaScript" ] }, { "cell_type": "markdown", "id": "e72e046d", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "id": "c69b5047", "metadata": {}, "source": [ "*Résumé en français* : Vous devez créer un programme qui à partir d'une phrase, met tous les mots distincts dans une liste et retourne une chaine donnant les positions des mots de la phrase initiale dans cette liste. On ne tiendra pas compte de la casse." ] }, { "cell_type": "markdown", "id": "f2539dc9", "metadata": {}, "source": [ "Voici un autre exemple pour mieux comprendre :\n", "\n", "`phrase = 'The number 0 is such a strange number Strangely it has zero meaning'`\n", "\n", "`>> compress(phrase)`\n", "\n", "`'012345617891011'`" ] }, { "cell_type": "markdown", "id": "6b12a0f0", "metadata": {}, "source": [ "En effet, la liste des mots uniques est :\n", "\n", "`['the', 'number', '0', 'is', 'such', 'a', 'strange', 'strangely', 'it', 'has', 'zero', 'meaning']`\n", "\n", "Il faut donc bien voir que le mot 'strangely' est à la 8e place dans la phrase initiale mais à la 7e place dans la liste des mots uniques, c'est donc 7 qu'il faut récupérer en non 8." ] }, { "cell_type": "markdown", "id": "728f89b3", "metadata": {}, "source": [ "## Version classique avec boucles" ] }, { "cell_type": "markdown", "id": "4fe60606", "metadata": {}, "source": [ "On peut commencer par créer la *liste des mots uniques* trouvés dans la phrase et dans un second temps parcourir à nouveau tous les mots de la phrase pour trouver leurs positions dans cette liste. Première étape :" ] }, { "cell_type": "code", "execution_count": 2, "id": "a9b28f09", "metadata": {}, "outputs": [], "source": [ "var compress = phrase => {\n", " var mots = []; // Tableau des mots uniques\n", " for (m of phrase.toLowerCase().split(' ')) // On parcourt chaque mot\n", " if (!mots.includes(m)) mots.push(m) // Nouveau mot ? On l'ajoute\n", " return mots \n", "}" ] }, { "cell_type": "code", "execution_count": 3, "id": "4d569d01", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[\n", " 'the', 'number',\n", " '0', 'is',\n", " 'such', 'a',\n", " 'strange', 'strangely',\n", " 'it', 'has',\n", " 'zero', 'meaning'\n", "]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compress('The number 0 is such a strange number Strangely it has zero meaning')" ] }, { "cell_type": "markdown", "id": "a51beabe", "metadata": {}, "source": [ "On peut aussi utiliser `reduce` (puisque l’on part d’un tableau vide `[ ]` et que l’on va ajouter au fur et à mesure les mots nouveaux). Ce qui donne :" ] }, { "cell_type": "code", "execution_count": 5, "id": "6ec9a96b", "metadata": {}, "outputs": [], "source": [ "var compress = phrase => {\n", " decoup = phrase.toLowerCase().split(' ')\n", " mots = decoup.reduce((a, m) => a.includes(m) ? a : a.concat(m), [])\n", " return mots\n", "}" ] }, { "cell_type": "code", "execution_count": 6, "id": "2447ed05", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[\n", " 'the', 'number',\n", " '0', 'is',\n", " 'such', 'a',\n", " 'strange', 'strangely',\n", " 'it', 'has',\n", " 'zero', 'meaning'\n", "]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compress('The number 0 is such a strange number Strangely it has zero meaning')" ] }, { "cell_type": "markdown", "id": "34b4a788", "metadata": {}, "source": [ "Ensuite, pour la seconde partie, il s’agit de **transformer** (`map`) chaque mot en sa position dans la liste des mots uniques. Voici 2 exemples d’utilisation de `map` :" ] }, { "cell_type": "code", "execution_count": 7, "id": "273e0db9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[ 1, 25, 100 ]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[1, 5, 10].map(v => v * v) // On met chaque élément au carré" ] }, { "cell_type": "code", "execution_count": 8, "id": "163ad982", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[ 'A', 'C', 'B' ]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "['abra','cada','bra'].map(m => m[0].toUpperCase()) // 1ere lettre en majuscule" ] }, { "cell_type": "markdown", "id": "aa32b891", "metadata": {}, "source": [ "Ce qui donne cette version finale :" ] }, { "cell_type": "code", "execution_count": 9, "id": "f0deb25f", "metadata": {}, "outputs": [], "source": [ "var compress = phrase => {\n", " decoup = phrase.toLowerCase().split(' ')\n", " mots = decoup.reduce((a, m) => a.includes(m) ? a : a.concat(m), [])\n", " return decoup.map(m => '' + mots.indexOf(m)).join('') \n", "}" ] }, { "cell_type": "code", "execution_count": 10, "id": "de6fede9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'012345617891011'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compress('The number 0 is such a strange number Strangely it has zero meaning')" ] }, { "cell_type": "markdown", "id": "ce719e9f", "metadata": {}, "source": [ "Le `” +` permet de convertir un nombre en chaine. Par exemple `” + 2` donne `'2’`, on peut aussi utiliser `(2).toString()`." ] }, { "cell_type": "markdown", "id": "1524977e", "metadata": {}, "source": [ "## Autre piste" ] }, { "cell_type": "markdown", "id": "08402512", "metadata": {}, "source": [ "Nous aurions également pu utiliser un **ensemble** :" ] }, { "cell_type": "code", "execution_count": 11, "id": "04e628bd", "metadata": {}, "outputs": [], "source": [ "var compress = phrase => {\n", " decoup = phrase.toLowerCase().split(' ')\n", " mots = [...new Set(decoup)] // Liste des mots uniques\n", " return decoup.map(m => '' + mots.indexOf(m)).join('') \n", "}" ] }, { "cell_type": "code", "execution_count": 12, "id": "20c64311", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'012345617891011'" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compress('The number 0 is such a strange number Strangely it has zero meaning')" ] } ], "metadata": { "kernelspec": { "display_name": "JavaScript (Node.js)", "language": "javascript", "name": "javascript" }, "language_info": { "file_extension": ".js", "mimetype": "application/javascript", "name": "javascript", "version": "18.3.0" } }, "nbformat": 4, "nbformat_minor": 5 }