{ "cells": [ { "cell_type": "markdown", "id": "2167c041", "metadata": {}, "source": [ "# Troisième exercice Python (Niveau Lycée)" ] }, { "cell_type": "markdown", "id": "bf9936e9", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "id": "28f4e6cc", "metadata": {}, "source": [ "*Résumé en français* : un **isogram** (En français on parle d'**heterogramme**) est un mot qui ne contient aucune lettre répétée. Ecrire une fonction qui renvoie **vrai** ou **faux** suivant que le mot est un heterogramme, sans tenir compte de la casse (majuscule/minuscule)" ] }, { "cell_type": "markdown", "id": "581b18f6", "metadata": {}, "source": [ "## Les ensembles" ] }, { "cell_type": "markdown", "id": "3bacce01", "metadata": {}, "source": [ "En JavaScript, on définit un ensemble de la façon suivante :" ] }, { "cell_type": "code", "execution_count": 1, "id": "96eebc27", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Set(2) { 5, 1 }" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new Set([5, 5, 1, 5, 1])" ] }, { "cell_type": "code", "execution_count": 2, "id": "19c6ec7a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Set(5) { 'a', 'b', 'r', 'c', 'd' }" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new Set('abracadabra')" ] }, { "cell_type": "markdown", "id": "c8e56dac", "metadata": {}, "source": [ "*L'idée principale* : On aura un heterogramme si la taille de l'ensemble des lettres utilisées pour écrire le mot est égal à la taille du mot initial. " ] }, { "cell_type": "code", "execution_count": 3, "id": "1b6e76f5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Function: isogram]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isogram = mot => mot.length == new Set(mot.toLowerCase()).size" ] }, { "cell_type": "code", "execution_count": 4, "id": "3a4e580a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isogram('Dermatoglyphics')" ] }, { "cell_type": "code", "execution_count": 5, "id": "59601c48", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "false" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isogram('aba')" ] }, { "cell_type": "code", "execution_count": 6, "id": "8a870e76", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "false" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isogram('moOse')" ] }, { "cell_type": "markdown", "id": "9ce02163", "metadata": {}, "source": [ "Remarquez que le mot a besoin d'être mis en minuscule (ou majuscule) uniquement pour créer l'ensemble des lettres, pas pour trouver sa taille initiale. `len` permet en Python de donner la taille d'une chaine, d'une liste ou d'un dictionnaire." ] }, { "cell_type": "markdown", "id": "2fb75793", "metadata": {}, "source": [ "## Recherche d'au moins une lettre en double" ] }, { "cell_type": "markdown", "id": "3d495a46", "metadata": {}, "source": [ "Une autre idée peut être de rechercher s'il existe au moins une lettre en double, par exemple en utilisant 2 boucles, en voici une version :" ] }, { "cell_type": "code", "execution_count": 7, "id": "8a4ff2a6", "metadata": {}, "outputs": [], "source": [ "function isogram(mot) {\n", " mot = mot.toLowerCase();\n", " for (i = 0; i < mot.length - 1; i++) {\n", " for (j = i + 1; j < mot.length; j++) {\n", " if (mot[i] == mot[j]) return false;\n", " }\n", " }\n", " return true;\n", "}" ] }, { "cell_type": "code", "execution_count": 8, "id": "b0e0c35b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isogram('Dermatoglyphics')" ] }, { "cell_type": "code", "execution_count": 9, "id": "91414da7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "false" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isogram('aba')" ] }, { "cell_type": "markdown", "id": "5f75f965", "metadata": {}, "source": [ "## D'autres pistes..." ] }, { "cell_type": "markdown", "id": "07b64b26", "metadata": {}, "source": [ "Ecrivons une **expression régulière** (Regex) qui va tester si une correspondance (`match` en anglais) existe entre un caractère (noté `.` en Regex) et ce même caractère un peu plus loin. " ] }, { "cell_type": "markdown", "id": "093c031d", "metadata": {}, "source": [ "L'expression régulière est (exemple ici avec le mot couleur):\n", "\n", "
(.).*\\1
" ] }, { "cell_type": "code", "execution_count": 10, "id": "04257b94", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Function: isogram]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isogram = mot => !/(.).*\\1/i.test(mot.toLowerCase())" ] }, { "cell_type": "code", "execution_count": 11, "id": "22660260", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "isogram('Dermatoglyphics')" ] } ], "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 }