Formes géométriques ASCII

🎨 Un rectangle 3×5 plein, motif: #
    #####
    #####
    #####
🎨 Un triangle creux 5×5, motif: Y
    Y
    YY
    Y Y
    Y  Y
    YYYYY

Dans cet exercice, on travaille avec des listes de chaines de caractères pour représenter des dessins.

  • Chaque ligne d'un dessin sera une chaine de caractères non vide.
  • Un dessin sera une liste non vide de lignes.

Lignes et dessins, dans cet exercice

  • ligne_pleine et ligne_creuse sont des fonctions qui renvoient une ligne que l'on peut afficher avec print
  • rectangle et triangle en version creux ou plein sont des fonctions qui renvoient un dessin (une liste de lignes) que l'on peut afficher avec dessine.

Compléter le code suivant afin de disposer des fonctions indiquées. On utilisera les fonctions simples dans les fonctions élaborées. Vous n'avez qu'à compléter les fonctions ligne, rectangle et triangle dans chacune des deux versions. Le paramètre motif sera une chaine de caractères de longueur 1.

Exemples
>>> print(ligne_pleine('M', 1))
M
>>> print(ligne_pleine('#', 5))
#####
>>> print(ligne_creuse('X', 5))
X   X
>>> print(ligne_creuse('M', 1))
M
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10
.128013s3o_8bcdufvg/ly n7apSr1-me,(P2=4:+twki95h*)6050i0A0J0t0M0o0b0q0h0o0t0b0b0F010J0M0u010406050b0j0z0z0t0w0p040v0d0o0j0-0d0r050n0@0_0{0}0=0u04161d051g0n1g1i1d0=0i0M0l0#0%0)0+0P0M0m0P0o1w0P0J0:050W0g0o0A1r0(0*011v1x1z1x0J1F1H1D0J0g0d0i0}1E0w1e0J0P0#100b0u0t0r0+0E011J1t010k0Y0A0r0t0z0A1D1+1-1=1L1^1H1{1}0:0a0q0D0w0d0u0d0b0M130r0q0U1)0w0w0A0h2i16200r1e0n1%2v0J1#1!1$0i220+1z0r1`2f1D1o1q0$1K2F0M2H0r1X1p1D0u2o1e2t2v2Z0?1,2j2N1?2S0w0`0o0:0x2s2%0;2$212)1L2+2-0:0E2;1-2?2t2E012{0t2.040c2 2u0=322_0+35370G3a312%333g0:0O3j3c3l3e340d2,360:0S3q2@2(1s2`3v2|040s3A3d3D3f3F3x040f3J3s3L3u3w370N3j1f2X162L2y0i2C330h1X1~1e3$1h3!2#172=053+0U2Y3S2O010L0:0U0k3Y3K3}0K0:0q433|2*0k0:1P2H0e0u1H2Q0A492^3T0/040C4l3C3}0r0:0z0d0-423?303B334o0B3j48442*0:0r0g0e3+0o142H0b4r4D0:0R0H3q0q4Z4H4a1L3 042o0J0j0w154A2u4#4m4t4v4x0M4z2Z4;4s1?0d0:0Q4G4C3t4u044L4N104Q0A4S4/0;063r4=1?4(414T3t4604485d533T0r4c044e0A4N2o0j0b4k5q4I1L4o4q5D4$3f4@4y5l4n0:4F5d4|3m4K4M4O5a5c2#5E0+4o4W4Y4!5r3}4(4_525!345U584P0r4R5.5J014 040F0F5_5h1L0z0M2/5N3}4o4X5d064!6c5S3t4(4*4,4.4{5*4J044w5M6a6c6l4%0:0A0Z5C5Z5`685(6d6e3T6g0V6i604}2`5L5-5R6s0+5|0I6I330b1:041;016S3t5|516N5/5G666m575W5@5b6Z3T5|0y6:3}632}6*5F4V6@4~0:6R6%5`556o6M2Z0=0n3_0A2v2W7b3#1p3%2y2A2w1W1Y2y0t1G7e0n3$780U0W0Y0b04.

Fonctions en mémoire

Les fonctions ligne_pleine et ligne_creuse sont chargées en mémoire pour les questions suivantes.

Exemples
>>> dessine(rectangle_plein('A', 3, 5))
AAAAA
AAAAA
AAAAA
>>> dessine(rectangle_creux('O', 3, 5))
OOOOO
O   O
OOOOO
>>> dessine(rectangle_creux('O', 1, 5))
OOOOO
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10
.128013s3o_8bcdufvg/0ly n7apS.r1-me,(P2=4:twki9][5hx)6050i0C0K0u0N0p0b0r0h0p0u0b0b0H010K0N0v010406050b0j0B0B0u0y0q040w0d0p0j0:0d0s050n0`0|0~100^0v04191g051j0n1j1l1g0^0i0N0l0(0*0,0.0S0N0m0S0p1z0S0K0?050Z0g0p0C1u0+0-011y1A1C1A0K1I1K1G0K0g0d0i101H0y1h0K0S0(130b0v0u0s0.0G011M1w010k0#0C0s0u0B0C1G1.1:1^1O1{1K1~200?0a0r0F0y0d0v0d0b0N160s0r0X1,0y0y0C0h2l19230s1h0n1*2y0K1(1%1)0i250.1C0s1}2i1G1r1t0)1N2I0N2K0s1!1s1G0v2r1h2w2y2$0_1/2m2Q1_2V0y0}0p0?0r0z2v2*0@2)242,1O2.2:2=0G2^1:2`2w2H012 0u2;040r0c332x0^362}0.393b0r0I3f352*373l2=0R3p3h3r3j380d2/3a2=0V3w2{2+1v2~3B303c0t3G3i3J3k3L3D3c0f3P3y3R3A3C3m0O3X2|3Z3t040z0o3(3I2R3!3M0z2@1a2_3x3)3;3+0z323_343{3:2-3T3b0z3e413g3H3s460?0z3o4a3q3|453#4f3v4i434d4m3,3F4i1i2!192O2B0i2F370h1!211h4z1k4x2(4v4E0X2#3Y3;0M0?0X0k3p4c3z0L2=4W3Q3}0k0?2r2t1:0m1K0e0v1K2T4#4Q1_0=040E4?4k2~0?0B0d0:4V4v4$4^0?0D3p0r4X3*0?0s0g0e1S2K0b4|441O4_584i5a554~045e0e4E0p175i5k374_0U0J3w0r5G5q4@5s2r0`0p0Z0K595b3;0d0?0H5Q5r0.4_0Q0P5F5H5R1_4S040k3B5W5J3k0?0N5.4}0.0d4Z044=5p5(2~0g4)4,0C5A3z4_4{545/385d5f5h0C5j685@015C5E4p5H6m5I6h0s4)6e0j5N0u5P6g5l5^0?0x645c040u0v0v1}0i6C3;666K2-0?6d4/4;2K6N5m0?672(5X6a0450526U5Y575?6y6!5u5w5y6e6(6i0?0U0U5$5G5~0.5*2r0K0j0y185}6Z6q045L6t5O3w064q3z5*4U6=5`5a6x3s4(772s0Z0s4-0C5v2r0j0T6=6M7k3z766$0N536Y695n6+3s6b5g1z5z7z3Z7H7469766.136:6f7F6h6j6`6o6,5*7D7I7A7K6d7X2_7$375T040H5V7R6h0B0N4f7x0?6k2$066n5%6Z6~0Y71732$7:650?0Q6=766Q4:0C2T637O6L6W8f4 517)8m56045o8a6|6-5f6/0s7N7Y6,5C5#6l84695*0C0$8l8E5B7 7#6m8y76786u6w8x6Z7=7^8Z7G8d8p048h6S8O2_8y7y8P7+6#8r7E8/6Z7Q8%6p7K8B8D8`8(040U8H81836{850?5,0y7*6D5=7_6,5_5;897/8U6077627~4`8*5u7-9e5S0?0A9w1_7{0?408=7P6@803`986n8U6r5M7a8t1O7=6B9Q5:6E6G6I9r6X928~8+7M7s0h7u0b8.348:8o9U6!7C8_9.8{6*9h7J5t8A7V8C6;9;5C6_8I839M7n9O6v6=9S8*6F6H0s6Ja29:9F3}6P9(6R8j6Tai9s9;7B8^9r8w9m758 9 919^936^8S8J6h8670729A5K6s8X3G0n4N0C2y2ZaT4y1s4A2B2D2z1Z1#2B0u1JaW0n4z0^a-0Y0!0$04.
Exemples
>>> dessine(triangle_plein('T', 5))
T
TT
TTT
TTTT
TTTTT
>>> dessine(triangle_creux('F', 5))
F
FF
F F
F  F
FFFFF
>>> dessine(triangle_creux('K', 1))
K
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10
.128013s3o_8bcdufvg/0ly n7apS.r1-me,(P2=4:+twki9][5hx)6050i0C0L0u0O0p0b0r0h0p0u0b0b0H010L0O0v010406050b0j0B0B0u0y0q040w0d0p0j0;0d0s050n0{0}0 110_0v041a1h051k0n1k1m1h0_0i0O0l0)0+0-0/0T0O0m0T0p1A0T0L0@050!0g0p0C1v0,0.011z1B1D1B0L1J1L1H0L0g0d0i111I0y1i0L0T0)140b0v0u0s0/0G011N1x010k0$0C0s0u0B0C1H1/1;1_1P1|1L1 210@0a0r0F0y0d0v0d0b0O170s0r0Y1-0y0y0C0h2m1a240s1i0n1+2z0L1)1(1*0i260/1D0s1~2j1H1s1u0*1O2J0O2L0s1#1t1H0v2s1i2x2z2%0`1:2n2R1`2W0y0~0p0@0r0z2w2+0^2*252-1P2/2;2?0G2_1;2{2x2I01300u2=040r0c342y0_372~0/3a3c0r0I3g362+383m2?0S3q3i3s3k390d2:3b2?0W3x2|2,1w2 3C313d0t3H3j3K3l3M3E3d0f3Q3z3S3B3D3n0P3Y2}3!3u040z0o3)3J2S3#3N0z2^1b2`3y3*3=3,0z333`353|3;2.3U3c0z3f423h3I3t470@0z3p4b3r3}463$4g3w4j444e4n3-3G4j1j2#1a2P2C0i2G380h1#221i4A1l4y2)4w4F0Y2$3Z3=0N0@0Y0k3q4d3A0M2?4X3R3~0k0@2D0O1;0m1L0e0v1L2U4$4R1`0?040E4@4l2 0@0B0d0;4W4w4%4_0@0D3q0r4Y3+0@0s0g0e1T2L0b4}451P4`0V0J3x0r5s5b564 042s0{0p0!0L5a5c3=0d0@0H5D5v0/4`0R0Q5r5t5E1`4T040k3C5J4^5w0O5X4~0/0d4!044?4j5u5Y3l0g0@0y4-0C5l384`4|555.395e5g5i0C5k5|5$015o5q4q5t6a5-650s5;620j5A0u5C645m5%0@0x5^3A6e040u0v0v1~0i6q3!5`6z3~0@614:4=2L6C574{6J5w51536M5L585#6m5~5*6T385G040K6X3A0B0O4g6Q660@0V0V5P5s5R1P5T2s0L0j0y195,6=3l6f5z5B3x064r3A5T4V6+5)5b6l3t4)044+4-4/0h2s0j0U6+6B7c6r50520O542)5K6,04596}7w6s5f5h1A5j7n6-682%066a6~015T7t6$5d047D61632%6c6U6Z0H5I7A5}6(6*7p6A0@7J3{6b5Q7w6@0Z6`6|7X7N5M6+6s6O7Q7+3=4`5O697;5}5T0C0%5@816K7.437:6;7B706h727%657!7R820@0R7}7r6P8c5n0@847K8g7Y385T5V0y8p2.0@5!8m7Z5)5+7`7B5:5x5?7H6L8w6 7T607F628H1P6Z0A8$0/7)04417v5}676:8B8C7q5x6g6i6k8/8n6o8t6t6v6x8U5{8}6U6s6F7j0C0j0b8b965_0@952`7N7~7s7u9j7w4`7z8P5}6s8K9s8~6!8*018,8.9o8:6-6/857:9k8j8{6+6Z6p8W6V6u6w0s6y9P7o9f8^6F4;0C2U9e9D659W9(978u809X7,7y9z7C8Z0m7G9V9F8=7M7=6f6_6{9=9K8l7K1a4O0C2z2!a84z1t4B2C2E2A1!1$2C0u1Kab0n4A0_ao0Z0#0%04.