Aller au contenu

Extensions

Vous devez faire au minimum deux extensions parmi les extensions proposées ci-dessous.

Vous pouvez également proposer vos propres extensions, il faudra dans ce cas fournir une explication relativement détaillée de ce que fait chaque extension.

Vous n'êtes pas limités à deux extensions. Toutefois, mieux vaut produire peu d'extensions avec un code propre et bien testé plutôt que de nombreuses extensions avec un code illisible et non testé.

Les extensions ne sont que peu guidées. Il vous appartient donc de chercher des informations, et de rendre compte de ces recherches dans le rendu final, par exemple, en mentionnant un mail de question envoyé à un professeur, ou encore un lien vers un site internet contenant des informations que vous avez utilisés.

Vous êtes encouragés à demander l'avis du professeur au moins une fois avant le rendu final, pour avoir un retour et d'eventuels conseils à appliquer.

E1 : Amélioration de la sortie

Dans le chapitre précédent, on a vu deux problèmes éventuels liés à l'affichage en console :

  • Les affichages sont en mode sombre (blanc sur fond noir) ou clair (noir sur fond blanc). Celà change la perception de l'image si elle est rendue avec des pixels. On veut donc pouvoir "inverser" la luminosité des pixels de l'image au moment de la conversion, pour que l'affichage s'adapte autant au blanc.

Par exemple, on voudrait pouvoir générer ces deux chaînes à partir de l'image de Marie Curie :

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@#@########@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@######0****00000#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####0*****--****0###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@##0**--*********-*000#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@###0*------*-******0*0#######@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###0---.----******000**000000#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##*-.------*****00********0*0###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###0-.-.-----*****000**-**000000###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@##0*-.-------*0*000000**--*00000#0###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@#00--.-------*00*00#00000******00#000###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@#0*--.------***000#00#0000##0****00##0####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@##*-..---******00####0000##00*00**000000##0#@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@##0-.....--*0*000#000**00##000000**0*****##000##@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@##0-......-***0******000000000000*0*-**-*##0--0#@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@#0*-......--***********00**000*00000*--***00-.*###@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@#*---....----------***000**0#00000000--***0**--0#@#@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@#0*-......----....--***00000000000000**---**0*-.*#@#@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@#0*-......--.......----**00000000##0*00*--***---*###@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@#00*..................---***0*000*****00**000*-*--###@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@###-..................--------*****0***--*000**---0##@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@#####-.....  .  ............-----*----**---*000**----##@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@###0......         .............----------*000*00*-.*###@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@##*.....         ................-----**--00###0*-.*0###@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@##0-....       .. ................-----**0-*0000**-.*###@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@##0-....         .................------*0*********.*##@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@##*-. ..      ...................-------*0*****-**-.-##@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@####0-. ..    . .................--------**000**---*-.-00#@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@###00*-. ..    ..................----------*000*-**---.-*0###@@@@@@@@@@@@@@@@@@@@
#@@@@@@@@@@@@@@@@@@@##0**-.  .     .  ..............---------***00*------.-*0##@@@@@@@@@@@@@@@@@@@@@
#@@@@@@@@@@@@@@@@@@@@##0*-.  ..        .............-------*****000-.----.-**0#@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@##00-.  ..       ............---------*****000*-------*00#@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@##***.....      ..........-------------*00**000**-----**###@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@##0**.....     .........--------....---**000000****---00####@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@##00*-....    ....-----------.---.....--**00000*000*-*000###@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@###0*-... .....---------------------..--*00000*000***00#####@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@##00*-. ...-*******--****0000*****------***00000**--000###@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@####*-...-**000000*--*00#######000***----**000000*--0#####@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@#0*-..-*0###@@00*-**0#####@@####000**---**00#0*****00###@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@#0**-..-0#000###0*--*000##@#######0000*---*000********00#@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@##0**-..-0#00#@@#0*..-*00####0@@@###0#0-----*00******00*0#@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@#00***-. .**--###00-...**00##0-0#0*0##00-----*000000000000###@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@##*****-.  ...--****. ..-*000**--*-**00*------**00##00#0000###@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@#0*0***-.    .-----.  ..--****---***----..----**00##000000####@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@##0000*--.  .  .....   ..---***---------...----*000#0*0000#####@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@##0000**-.  .  ....    ..---****-------....----*00*00*0#00####@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@###000**-.   ......    ..----***------....----**000***###00###@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@###0***.  ......     ..--***-------..----*-**00#0-**#######@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@##000*. ......      ..-*****----------******00#**-0########@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@##0000....... ...  ...-*-***-------********00##0**0#######@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@##000-.......... ..-----*0*------********000#00*0#####@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@###00*........-..--***00*00*-----*******0000#000@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@###0*.......---*-00##@@#00**-----*****0000#@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@##00-.....---..-*#@@@@0*****---*****00000###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@###0*.....---....0###0*--**********000000#####@@@@@#@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@#00*....---... .-**0**--*********0000000######@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@#000-...--......---****-*****0**0000000##@##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@#00*...--.-.  .-.---******000000000000###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@###0......*--**--0****0***000*0000000#0#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@####-....*#**0###@@@###000*****00000#000#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###0...-0-  ..-******0##0*****0000##000@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##@#...--...-----******00****0000###0**#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@*.......*0000000********0000###00**#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#.......-*000********000000####00***#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0........------*****0000###@#000****#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*...........--*****000##@@@#000**-*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0-.......----****0###@@@###000**-*##@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0-....---****00##@@@@@####00**--0#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#0----***000###@@@@@@@###000****00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###***00#####@@@@@@@@@####000**00**@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####*0*--0######@##@@@###0000**0#@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####0*@0..-*0########@@##0000000##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####--##-..-*0##########0000000##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####0.-#@*..-*00########0000000-0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@######0-0@@0...-*000####000000#0-.-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@######0*#@@#-..--*0000000000000000###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@######**#@@#-..--***0000***00*0#@@@##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@######.-#@@@*..--*********00--#@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@######-*#@@@*-..-*******-0#*-*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####@#-0@@@@0-..--***---0##**0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@###@@#-0@@#@0-..------*####0*0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@##@@@@@@###@@0-0#00##-..---..*00**00000#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@#@@@@@@@@@##@@@@@@##@@@*..--*0#*...-****-.-*@@@@##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@##@@#---*0####*...0@##0--0@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@#@@@@@@@@@@@@@#@@###@@#0@@@@@@@@@0-.-#@#0--#@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@##@@@@@@@@@@@@@@@@##@@##@@@@@@@@@@@@#*0@@@00#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@##@@##@@@@@@@@@@@@##@@@@@@@@@@@@@@@@@@#*0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@###@@##@@@@@@@@@@@@@@@@@@##@@@@@@@@@###*.*##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@###@###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##0-.*0#@@@##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@###@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@##@#*.*0#@##0#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@#@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@000@@@#*0#@@@00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@#@@@##@@@@@@@@@@@@@@@@@@@@@@@@@@0--0#@@#--*0@@*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
@@@@@@@@@@@#@@@@##@@@@@@@@@@@@@@@@@@@@@@@@@0--00##*..-#@#0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
@@@@@@@@@@@@@@@@##@@@@@@@@@@@@@@@@@@@@@@@@#0*-000*..-0@@0#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@##@@@@@@@@@@@@@@@@@@@@@@@@@#00----.-*0@@##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@##@@@@@@@@@@@@@@@@@@@@@@@@@@#*-....-*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@###@@@@@@@@@@@@##@@@@@0*... .**#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@##@@@@@@@@@@@@##@@@@@#--**--0#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@#####@@@@0-*#00-*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@######@@@#..0##0-.-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#####@@@#--0#0*..-#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####@@@#--0#0*.-0#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##@@@@@0-000**#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0.----0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0..-.-0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0.----#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@00###0#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#0#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
...................................................................................  ....  .........
...................................................................................  ....     . ....
........................................................................................          ..
............................................................................    ..... ..           .
..........................................................................   .  ........          ..
.............................................................................. .  ... ...       ....
............................................................... ... .......... .. .   ..         ...
................................................................................. .   ..        ....
......................................................................... ...  .. .    .       .....
...................................................................................  ...        ....
...................................................................................   ..        ....
...................................................-............................ .. .             ..
................................................................................ .  .             ..
.................................................-----..........................                  ..
...........................................--***0***-*-.................... ...  .                ..
........................................---0000000000*---................... .. ..                ..
......................................-**00000000*00000**--................  .....                ..
....................................-00##0#000000******---.---.............  .....                ..
..................................-*#######00000**--****-*-*--...........    ..  ... ..           ..
................................--0#######000*0****00*000***-...........  .   ....  .....          .
...............................-*0#######00**0****0000***------...................   ...          ..
..............................-0########00*0*****-*0#00**--------.......................          ..
............................--0#########0***---*****00**00*------........................         ..
...........................-*0########0****----*--**---**0**-*------......... .... . . ..         ..
...........................-0######000****---.---*-----***00******---.......... .  ... ..         ..
..........................--#######0*****-----***-----*--**0*0000*-.**--........ . ... ..     .  ...
..........................-*####@###00***00000****--**--*****0000*-.*00*........... .....       ....
..........................*0########000000***************--***0#00***0#0-........... .......     ...
.........................-*0########000###0000******--********##00***0##*-..................     ...
.........................*0####@############00*********----*-*00000**0##*-..................    ....
........................-*0#@#@@@##############0***---------***0000**0##0......... ..... ...       .
........................--0#@@@@@@@@@@#@@@#####000*************00****00#0-.-............ . .      ..
.......................---0@#@@#@@@@@@@@@@@#########000000**0000**--*000#*-.............  .       ..
........................--0@#@#@@@@@@@@@@@@##########000000000#0*****0#0#0-.............          ..
........................-*#@##@@@@@@@@@@@@@@@############00#####0*-****0##*-........ . ...      ....
........................-0@@#@@@@@@@@@@@@@@@@@######@@@#####00000*----*0##*---............ .    ....
........................-#@@@@@@@@@@@@@@@@@@@@@@@@@##########0**00******0#*--............. ..   ....
........................*#@@@@@@@@@@@@@@@@@@@@@@@@############0*00*****00#0-............ . .........
.......................-*#@@@@@@@@@@@@@@@@@@@@@@@@@########0#0****0000000#0--.......................
....................----*#@@@@@@@@@@@@@@@@@@@@@@@@###########0*****00000#@#*-...... ..... ..........
....................---*0#@@@@@@@@@@@@@@@@@@@@@@@############00***000000###**-.....  ..........  ...
.....................--00#@@@@@@@@@@@@@@@@@@@@@@##########00000****0#######0*-...... ...............
......................-**#@@@@@@@@@@@@@@@@@@@@@@##########000****-*0#######0**......................
......................-**0@@@@@@@@@@@@@@@@@@@@@###########00*****-*0#######**--.....................
......................-**0@@@@@@@@@@@@@@###@@##############00********0#0###**.-.....................
......................-**0#@@@@@@@@@@@#####################00****---*0000##**-................. ....
......................--*0#@@@@@@@@@@@######################00***---****000-----..........    . ....
........................--*###@@@@@@####0#######000000########0**---*--*000---.-........       .....
........................--*0##@@@##0000000#0000******00000####00********000*--...... ...  ..    ....
..........................-*##@@#0**--****#00**-...----****00##00**---***0#*--..........   .........
..........................*0##@#0*-....-**00**--......------*000000*--***000*--....... ... .........
.........................-00#@@0*--*--..*0#0**---..----------*0##00*--*0**00*0*-....................
........................-***0@@#*-*-...--0##0**---.--.....----0###00*-****0****--.............  ....
.......................-*0000@@@0*#0-.-**0@@#0**---*0-.-*-.--*0####0*-**-*-*-**---.....     ........
......................-*00*0#@@@@@##0*0*0#@@#00****000000***0######0*----*------.--.....     .......
.....................-*****0#@@@@@@#0000#@@@##00**00#0000000######00***--**--*-----...... .  .......
.....................-**-*00#@@@@@@@@##@@@@@##000000##############00***--0*-------....... ...... ...
.....................-**-*00#@@@@@@@@#@@@@@@##0000000##0####@####00****-*0----.-............... ....
......................---*000@@@@@@@##@@@@@@##0000000000###@####000**-**0*-------...................
....... ................-***0@@@@@@@@@@@@@@@##00000##00#######00000*--*00*-------................ ..
........................-****@@@@@@@@@@@@@@@##00000########0000000**--*00*.------...................
........................--***#@@@@@@@@@@@@@###000*0#####000000*0****--**0-.----.................. ..
.........................-**-#@@@@@@@@#@@@###00#0**0####00000******--****--........ ...... ...  ....
.........................----0@@@@@@@###@#000****-*0#####0000******---*-..........  ....... ..  ....
..........................--**#@@@@@##0000*--....-*000##00000******-..............  .... ...........
...........................--*#@@@@##00###*-....-00000000000******--.................... ..... .....
........... ...............---0@@@###0#@@@#*---*00000000000******---................... ... ... ....
...........................--**#@@##00#@@@#00**00000000*******-----.......................  ... ....
.................... .......-**#@######@@@#0#00000000********------............  ..  ....... .. ....
............................---0@@#####@@@####0000000*********-----...........  ... ..   ...... .. .
.......  ...... ... .........--*#@##@#0##00#0***00**0**********-----..........  ... .     . ... ....
........... ....... ..........--0@@@@0-*0*--......--***********---*-........... . . .    .   .......
............ .................--*@@@#*0@@@##0*00***--**000*****---**............... ..       . .....
......... .. . .................-#@@##@@@#0###0********0******-.-***. ...   .....   .        .......
..........  .... ................0@@#@@@#0------**00*********-.--***-.     .......  .      . .......
........ .. ..   ................-#@@@@@#0******00000******--..-***0*-    ..... ..           .......
....  .    .. .   ....... ........*@@@@@@#######000******---..--**000*... ....  ..            ......
...... .    ...  .  ..... .........0#@@@@@@@#####00****---....--***000-..  ...  .  .   .   ..... ...
.........    ..  .   ..  ...........*#@@@@@#####00****--......--***0#0-.  . .. ..  ..      .........
............... .. ..     ...........-#@@@###000****-........---**00#*.. .   ....... .   .  ........
.............. .......................-###00****---.........----**000*-.    .......  ..  .  ........
......... ....  .....................--*00*----............----***0*-*0.         ...  ..............
........     .  . ........  ..........-*-0#0*--............----****...-         ....  ...  .. ......
.........   ..  ......... ..........-.**.-###0*-..........----****...           ....   .............
..........  ..  .....................-##-.#@##*---.......--*--***-..            ...      ...........
........  .  .  .....................*@#-.0@##0*----....--***--*0*.           ..... ....  ..........
......... .  ..... . ................*#-. *####**-------****--*##0...         ....   ...   .........
.........  . .. ...................-.*0-. -####0****---****---**-..-.         ....     ... .........
..............  .....................00.. .0###00***********0*..  .-        . . ..    .. .... ......
........ .     .....................-##-. .0####0******00*-0#-..  ..       ...  ..   .  .. .    ....
........      ......................-#0-. .*####0000*000*.*#0...  .         .  . .    .. ...    ....
........     .......................-0*....*####0000000*..*0*.              .   ..   .. ....  ......
..........   .......................-0*....-####0####0-.-.*0*.                  ..   ...............
..........  ........................-#*---.-0#######0********--..           .    .   . .............
..........  ........................0###00*-0####000*0##*.....-.                  ..................
.......... .........................##00*-..-0###- --*##-  .....             .  .  .... ............
....................................-.       .*0##. .*#0-  ....                ..  ..  .............
....................................           ..*-...-*-  ....             .  . ..... .............
........ ..............................  ..      ..**....                 . .. .....................
........  ...............   ...........  ....  .--*#0..     .                    . .................
..........................      .......  .. . .--*0#0--...--.                    ......  ...........
......  ............  .................  .. . ....*#*-- .-*.        ..      .   ....................
........ ..............................  ...**-....0*.. .**                     ... ...... .........
.......................................   .*##*-...0#*- .*-           .     .  .......... ..........
.......  ...............................  .*##*---*#@#- -*.      ..       ........ .................
.......  ...............................  .-*0****###- .--       ...         ............ ..........
......  ................................  .--000#@#0- ..-.   .....  .....       ....................
....... ................................  .-*##@@@00-....    .....  .. .   ..    ...................
....    ................................  .-0##@@#0*.. ..     ... ...  .   ............ ............
....    ................................   -0#000#*-....     .. .....  ..  ............ ............
...    .................................  .*#0--*#*-. ..  .  .   .. .   .. .....   .... ............
.   ....................................  -##*--*##0-...... ..  ..      .  ....   ..... ............
.   ........  ..........................  -##---*@@0-....... .  ...    ... ...   ...... ............
.   . ......  ..........................  .0#---*#0*..... ....   .. ......  ..  ....................
.    .......  ..........................   -#*--00......  .... .... .......    ....... .............
.    .......  ..........................   -##00#*.....    .... ... .......   ..... ................
.   .......   ........ .................   *#####-..      .. .      .. ...   .  ....................
.   . ......  ....  .. . ...............   *##0#0-.     ....         . ..   .........  .............
.   ......    ...      . ....... .......   -*--.-.      .....   . .  ...   ......... . .............
.    ....     ...      .  ...... .......   .......      .....     .....  ..........  . .............
.   ...       ..          .....   ... ..   .....         ....    ....   .............. ...  ........
.             ..         .... .  .... ..   ...              .      .    ........ ....  .............
.             ..             ...       .    ....         .  .           ..    .....  ...............
.             ..             .         .    ...          .  .          ...  .  .  .   ..............
.                                      .    -*.          . ..         ....  . .....  ...... ........
.                                      .    .-.            .. .      .. ..  ...  ..  ... .. ........
.                                     .     ..            ...       . . ..... ...    ... ...........
.                                                          ..     . .   .....  ....  ... . .........
.                                                                 ...  .    .  . ...................
.                                                                   ..     .   .    ................
.                                                                    .          ..  ................
.                                                                           ... .... ...............
.                                                                 .     .   .... ..     ............
.                                                                 .         ....  ..    . ..........
.                                                                      ......... ..  .  . ..........

Ensuite, on peut remarquer ci-dessus que l'image apparaît étirée vers le haut. C'est parce que les caractères affichés dans une console ou un éditeur ne sont pas carrés, mais rectangulaires : ils sont plus hauts que large.

Pour compenser, on peut redimensionner l'image pour réduire sa hauteur d'une certaine proportion, en vue de l'"applatir" pour compenser l'étirement. Ce qui peut par exemple donner :

...................................................................................  ....    .......
............................................................................ ...........          ..
...........................................................................  .  ..... ..          ..
.............................................................................. .. .   ..        ....
................................................................................. .   ..        ....
................................................................................ .. .           ....
...................................................-............................                  ..
........................................---***0000*****--.................. ...  .                ..
....................................-**0000000000****0**----...............  .. ..                ..
.................................-*0#######0000*************--..........  .  .....   ..           ..
..............................-*0#######00********00#00***------..................  ....          ..
...........................-**########00****---*-********0**-*----................ ......         ..
..........................--0######00*****----****-----****0******-.*--........... ... ..        ...
..........................-*########000*00000****************00000*-*0#*-................        ...
.........................*00################000******-***--***00000**0##*-..................     ...
........................-*0#@#@@@######@@######000*************000***00#0-.............. . .       .
........................--0@#@@@@@@@@@@@@@@##########000000000#0*****000#0-.............          ..
........................-*@@#@@@@@@@@@@@@@@@@@#@#########0##00000*----*0##*--.............      ....
........................*#@@@@@@@@@@@@@@@@@@@@@@@@@##########00*00*****00#*-.............. ... .....
....................----*#@@@@@@@@@@@@@@@@@@@@@@@@###########0****000000###--.......................
....................---*0#@@@@@@@@@@@@@@@@@@@@@@##########00000****0#0#####0*-.....  ...............
......................-**0@@@@@@@@@@@@@@@@@@@@@###########000****-*0#######**--.....................
......................-**0#@@@@@@@@@@@@####################00****-***0000##**-.-............... ....
.......................--*0###@@@@@@####0######000000########00**---****000---.-........        ....
.........................--0##@@#0***-****#00**-------****000#000**-*-***00*--..........   .........
.........................-*0##@#*----..-*0#0**--........-----*0##00*--*0**00***-....................
.......................-**000@@@0*00-.-**0@@#0**---*0-.-*----*0####0*-******-**---......    ........
.....................-****00#@@@@@@##000#@@@##00**00##000000#######0***--*---*-----......    .......
.....................-**-*00#@@@@@@@@#@@@@@@##000000########@####000***-*0------....................
....... ...............--***0@@@@@@@@@@@@@@@##000000000#######00000*--*00*-------...................
........................--***#@@@@@@@@@@@@@@##000*0######00000000***--*00-.----.................. ..
.........................----0@@@@@@@#####000****-*00###00000******---*-..........  ........... ....
...........................--*#@@@@##00###0-....-*0000000000******--.................... ...........
...........................--**#@@#####@@@@00***0000000*******-----........................ ... ....
................... ........---0@@######@@###00000000*********-----............ ... ..   ...... ....
........... ....... ..........--0@@@#0*0#0***-------***********---*-........... ... .    ..  . .....
...........  ...................-#@@#0@@@#0000*********00*****---***. ..   .......  .        .......
........ .  ...  ................-#@@@@@#0******00000*****---..-***0*-..  ....  ..           .......
........    ...  .. ....  .........*#@@@@@@@#####00***----....--***000-.. .... ..  .       ..... ...
............... .....................*0#@###0000***--........---**000*-. .  ..... ....   .  ........
.........  ...  ......................-*000*----...........----*****--*.         ...  .... .. ......
.........   ..  .....................-*0.-###0*-..........----***-... .         ....    ............
......... .  .. .... ................*#0..*###0*----...---**--*00*.           ....   . .  ..........
.........  . .. .....................*0-. -####0****---******--*--.-.         ....   ..... .........
........ .    . ....................-#0-. .0####00****00*-*00-.   ..        .   ..    ......   .....
.........    .......................-0*....*####000000*--.*0*.                  ..   .......  ......
..........  ........................*#0***--0@###0##0****------.                 ..  ...............
.......... .........................00**--..-*0##0.--*##-  .....                .  .................
.....................................         ..-*-...--.  ....             .  . ...................
........ .................   ..........  ..    ..-0#0-.   ...                    ...... ............
.................... ..................  .....-...*#*-- .-*.                    ....................
.......................................   .*##*-..-##0- .*-           .     . ......................
....... ................................  .-*0***0##0-..-.       ..            .....................
.....   ................................  .-*##@@@0*.....    ........  .   ..  .....................
....    ................................  .-0#*00#*-....     ..  ....   .  ...... ..... ............
.   ....................................  -##*--*##0-......  .  ...     .. ....   ..... ............
.    .......  ..........................  .0#*--*#*-..... ....  ...  ......    .....................
.    .......  ..........................   -#####*.  .     ... ...  .. ....   ......................
.   .......   ....  .  . ....... .......   -00***-      ....      .  ....   .........  .............
.   ....      ...         .....   ......   .......       ....     ....  ...........  . ... .........
.             ..          .....   .   ..    ...             .           ..... .....    .............
.                            .         .    .-.          . ..         ....  .  ....  ...............
.                                     ..    ...           ...         . ......... .  ... .. ........
.                                                          ..     ...  ..  ..  .     ... ...........
.                                                                   ..         . .  ................
.                                                                           ...  ..  ...............
.                                                                       ... .... ..     . ..........

E2 : Différentes conversions

La correspondance pixel-caractère proposée est la suivante :

repr_chaine = [
    ("@", 40),
    ("#", 40),
    ("0", 40),
    ("*", 40),
    ("-", 40),
    (".", 40),
    (" ", 40)]

Proposez plusieurs autres correspondances, en vue d'améliorer la précision de l'image, par exemple en proposant 10, 15 et 20 caractères différents au lieu de 7.

Vous pouvez aussi proposer des correspondances thématiques, comme par exemple avec uniquement des lettres, ou des chiffres, ou des symboles de calculs (chiffres et opérateurs), ...

E3 : Menu intéractif

Implémentez un menu intéractif permettant de choisir l'image, sa largeur, et les eventuelles options d'autres extensions que vous avez choisies. Par exemple :

### Bienvenue sur Asciimage ### 
Nom de l'image : marie_curie.jpg
Largeur cible : 100
Mode : sombre
Conversion : lettres

E3+ : Menu robuste

Rendez votre menu robuste, c'est à dire qu'il doit redemander une saisie à l'utilisateur si elle est invalide.

### Bienvenue sur Asciimage ### 
Nom de l'image : marie_curie.jpg
Largeur cible (entier > 0) : vacances
Largeur cible (entier > 0) : 0
Largeur cible (entier > 0) : 100
Mode (sombre / clair) : VACANCES
Mode (sombre / clair) : clair
Conversion (letters, chiffres, math, 7, 10, 15, 20) : 30
Conversion (letters, chiffres, math, 7, 10, 15, 20) : 20

E4 : Code robuste

Ajouter des tests et des assertions pour faire en sorte que les fonctions n'acceptent pas des valeurs invalides en paramètres.

E4+ : Tests avancés (difficile)

Ajoutez des tests automatiques pour la fonction image_vers_chaine.

E5 : Conversion retour (très difficile)

Ecrivez un programme qui reconstruit une image en nuance de gris à partir d'une image sous forme d'une chaîne de caractères et de sa chaîne de conversion.