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 :
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.