{
"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 }