Aller au contenu

Dessins fractals

Exemples de constructions

Le cadre

On vous propose de construire une jolie fractale.

On commence par associer une couleur aux nombres de Fibonacci, ou plus simplement un numéro de couleur.

\[\begin{array}{c|ccccccccccccc} \mathtt{num\_couleur} & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13\\ \hline F_n & 1 & 2 & 3 & 5 & 8 & 13 & 21 & 34 & 55 & 89 & 144 & 233 & 377 & 610\\ \end{array}\]

À la représentation minimale de Zeckendorf de n, on peut associer une suite de bandes colorées collées les unes aux autres à la ligne n, en partant du bord à gauche et en commençant par les plus grands morceaux.

Par exemple avec \(100 = 3 + 8 + 89\), on veut :

  • bande(100, 0, 89, 9) : depuis la colonne 0 et de largeur 89, avec la couleur 9 associée à 89
  • bande(100, 89, 8, 4) : depuis la colonne 89 et de largeur 8, avec la couleur 4 associée à 8
  • bande(100, 97, 3, 2) : depuis la colonne 97 et de largeur 3, avec la couleur 2 associée à 3

Le tout à la ligne 100, car on traitait le cas \(=100\).

Le début de votre programme

Vous avez le droit de dessiner les bandes dans l'ordre que vous souhaitez, cependant, votre programme sera trié et les premières lignes seront disponibles. Il devra commencer comme ceci :

🐍 Console Python
>>> print(programme)
Votre programme de dessin :
    bande(1, 0, 1, 0)
    bande(2, 0, 2, 1)
    bande(3, 0, 3, 2)
    bande(4, 0, 3, 2)
    bande(4, 3, 1, 0)
    bande(5, 0, 5, 3)
    bande(6, 0, 5, 3)
    bande(6, 5, 1, 0)
    bande(7, 0, 5, 3)
    bande(7, 5, 2, 1)
    bande(8, 0, 8, 4)
    ...

Explication pour ces dernières lignes affichées :

  • \(7 = 5 + 2\), donc on dessine les bandes
    • bande(7, 0, 5, 4) ; en effet, 4 est la couleur associée à 5
    • bande(7, 5, 2, 2) ; en effet, 2 est la couleur associée à 2
  • \(8 = 8\), donc on dessine une seule bande
    • bande(8, 0, 8, 5) ; en effet, 5 est la couleur associée à 8
  • ...
  • le programme se poursuit, si besoin.

Exercice

Coder une fonction fractale_min qui prend un entier positif n en paramètre et qui dessine toutes les bandes nécessaires, peu importe l'ordre, pour tous les entiers positifs inférieurs ou égaux à n.

La fonction bande est uniquement disponible dans cet exercice pour dessiner une bande horizontale. bande(i, j, l, c) dessine une bande sur la ligne i, depuis la colonne j vers la droite, de longueur l et dont la couleur porte le numéro c.

Contraintes
  • \(0 < n < 1000\)
  • Fonction récursive interdite
  • Modules math et functools interdits
  • Code source limité à 2000 caractères
###(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 : /
.128013x/.r;nbylaeu)d6z3Am?(P+02-U],59f!78 _o=pcwgv4F1kIéhtsSà[ji:E050o0l0!0k0*0j0#0K0P0j0k0#0#0N010!0*0O010406050#0m0t0t0k0e0i040$0M0j0m100M0g050c17191b1d150O04051t1m1w0c1t150o0*0S0^0`0|0~0Z0*0R0Z0j1K0Z0!13050:0h0j0l1F0{0}011J1L1N1L0!1T1V1R0!0e1u0!0Z1X1H010G0=0l0g0k0t0l010^1g0#0O0k0g0~0z1R22241=1Z1^1V1{1}130a0K0w0e0M0O0M0#0*1j0g0K0.200e0e0l0P2r1m290g1u0c1:2E1-1/1.1S0o2b0~1N0g1`2o1R1C1E0_1Y2O0*2Q0g0M2U1R0O2x1u2C2E2,16232s2W1?2#0e1a0j130K0V2B2:142/2a2=1Z2@2_2{0z2~24302C2N01350k2`040K0r392D153c330~3f3h0K0T3l3b2:3d3r2{0E3v3n3x3p3e0M2^3g2{0p3C312;1G343H363i0I3M3o3P3q3R3J3i0J3V3E3X3G3I3s0F3%323)3z040V0y3.3O2X3*3S0V2}1n2 3D3/3`3;0V383 3a1x2*1m2U2H0o1/2M3F0P2$1~1u4c1v4a2.472D054i0.2+3(3`0W130.0G3v3N3d0Q2{4C3W430G130G0e0k2z3g0l0L0t2Z4H4w1?12040v4V422?131l4q4v4$1Z4Y0n0+3C0K4=0K4D3F0g4L0*0h3v4@4I1?0M130N4~4^3)4Y0(4#3_1?4T133~2.504-130D555h0~5d04465g4W5i040C4;4?564x4L3H5l5s3q130*5C4,0~0M4F044U4*4 5D3e0h134N0g0R0l5a3d4Y4!4*5y4%044)2,5P5I0152040x5H5b1Z5o5f2 5%5t4/5w4?5x5m014y5M4B5O5{5E041^4}5$61585Y3F5/0A6f3)5^6j3`4Y5v66615/020j0!0f5=3y5F6m4X134:4*065 6G605Q4`694|6A1Z5/0d6N680k0O0O1`0o6R015!6Y6K6a6Y6e6c5Q6h6Y6l6*5-6o6x6g135;6q6J4{6b5r6:13596/5?5J136i713d5o5q5`6d130C0n5~6G673e5T0l0#0!5X6_5-5/547o727i5M7f5 7h6K0)6=3)7q7B3`5o3@6E6H4=7h630G5B7s6y040W7E515L5N5+7y5S045U5W6(135#6}7t0g7Z2e7%4Z6#6{7/7e766?04757*770*5e7/5k7P7_7{7a5Q6.7|3F4Y817X6r746-7~3=7?6D2,6F7J7x61630*658c6`6L6|856~0470883:137S7^577c7T6O136t6v7r8s5-6K2x7l7n8A6n6C7w8m6I8O7j8R8H737`8M2 5,7+7=8E8U8y7;7R7/6p8k8X7J7y130h240.7/7)8w8,7v8.6B048b8*8{047A955t983a8+7Q6%9d0~6)8T5(8D9n5t0C9f2D9h4_8C7?8W8_9a9c8N7t5/0x8)9g9a9j9q9l6 8;9p925Z8G6E1m4t0l2E2)9W4b1D4d2H2K2F0k1U9Z0c4c159-0/0;0?302U3d0k0o0t1k2q0*1k0K104Y1s9_9{9}2r0A100!1+040s1i8Q0K4M4O0:1V0#1x301tae0K1N0l0m2t1W9Y0g0o2xar7k0K2#0t0hag2u0U4|1k4O0P0*0D0Ka06V1i0Kaxaz1WalaU0m0*0|240PaC2u0.0m0b0d0K0B2s1`100l0e20191W0#0Ma`avaZa#0#a%1Wa+0baP0P007k0!ar000Y0P0e2q0maA0h2Z0;aA0H0Kae2x0q0A0S0M0m0@0m2Q0K0)1g0*1Wai4P1V0K0u0K0,bb0k0S2y2t000kafaC172qa)1WaEaGaC0uan1s040X0j0K0i0K0kbQbS1-aC0l0b0O0Ybg1`a(0@0%ahbm0lb7a}1}aU2xayaA0`0K2x2)0Y0#a=0k2r0K1a0b0*2_1WbSarbDau2uca4T0gcm4Q0dczb%9!0S04.

Coder, cliquer sur 'Lancer', patienter... votre image sera ici !