Aller au contenu

Ajout d'un terme à une représentation (Performance)

⚠ Exercice difficile sur la gestion des indices.

Le cadre

Une représentation de Zeckendorf d'un entier est son écriture comme une somme de nombres de Fibonacci distincts.

On souhaite ajouter un nombre de Fibonacci à cette représentation.

Une méthode récursive est proposée à la page précédente, ce n'est pas performant ! D'autre part, la preuve de terminaison de la méthode est cavalière ; en effet, il est délicat de mesurer qu'on se rapproche du cas de base.

Exercice

Coder une fonction zeckendorf_ajout_fib

  • qui prend en paramètres
    • une liste bits, une représentation quelconque de Zeckendorf d'un entier \(n\)
    • un entier positif \(k\)
  • et modifie en place bits pour obtenir la représentation de Zeckendorf de \(n + F_k\)

⚠ Les fonctions fibonacci, zeckendorf_eval et zeckendorf_repr sont disponibles pour les petits tests, mais totalement impraticables avec les nouvelles contraintes. À ne pas utiliser dans le code !

👍 Toute représentation de Zeckendorf sera acceptée.

Contraintes
  • ⚠ La longueur de la liste bits est inférieure à \(10^6\)
  • Fonction récursive interdite
  • Modules math et functools interdits
###(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 : /
.128013.8594x/.ùTr;nb|Oylaeêu)*dM6z3Am?(P+02-],59fqZ7}8 _o={pcwgvF41kRIéhtsàSC[ji:050v0q0/0p0_0o0:0T0Z0o0p0:0:0W010/0_0Y010406050:0s0B0B0p0h0n040=0V0o0s1b0V0j050d1i1k1m1o1g0Y04051E1x1H0d1E1g0v0_0$131517190.0_0#0.0o1V0.0/1e050~0k0o0q1Q1618011U1W1Y1W0/1(1*1$0/0h1F0/0.1,1S010N100q0j0p0B0q01131r0:0Y0p0j190H1$2d2f201.231*26281e0a0T0E0h0V0Y0V0:0_1u0j0T0|2b0h0h0q0Z2C1x2k0j1F0d1~2P1{1}1|1%0v2m191Y0j252z1$1N1P141-2Z0_2#0j0V2)1$0Y2I1F2N2P2`1h2e2D2+212:0h1l0o1e0T0T0)2M2~1f2}2l301.3234360T0H3a2f3c2N2Y013h0p3504370z3m2O1g3p3f193s3u370(3y3o2~3q3E3j0L3I3A3K3C3r0V333t3j0x3P3d2 1R3g3U3i3v0T0Q3Z3B3$3D3(3W3*0S3-3R3/3T3V3F0T0M3^3e3`3M3v0)0G403#2,3{3)38391y3b3Q414943383l4e3n4g48313;3F0)3x4m3z3!3L4r360)3H4v3J4h4q3|4A3O4D4o4y4H443Y4K4x3S4j0)3,4Q3.4i4z443@4W3_4Y4N383 4$4F3%4)0H464,4p4.4b0H4d2`4L4S4Z3k4l4{4R424~0H4u514X4G4^4C574%593=3k4J5c4-3:4/4P5i4?5k4^4V5n4M4^4#5s4}4/4+5w534)0z4;5A4(4b0z4`4f525G5f0z505K584@5N565Q5d5S3F0z5b5V5j4a5N5h5#5o5%5Y5m5*5t5N5r5/5x5H5v5?5B5H5z5`5M3F0(5E5~5e605J4n5L64360(5P675R5p5f0(5U6d5W6f605!6j5$4j0(5)6o5+6q5.6t5:605=6x5@6g5_6B5{6g5}6F5 360L626J693v0L664w6e5,6L6c6T6k6V6Q6i6Y6p4~0L6n6%6u6)6s6,6y6L6w6:6C3F0L6A6@6G6_6E6|6K6Q6I706P0T0x6N745X360x6S4E6-4)0x6X7e6;3v0x6$7j6^7b6+7o6}7b6/7s71766?7w750x6{7A7a7l6 7E6l7b737I6!3+787M4j0Q7d4|7t3v0Q7i7U7x0Q7n7Z750Q7r7%7F3+7v7+7J7W7z7/7N0Q7D7?7R7H7`4~0Q7L7}4)0S7P814b0S7T687,0S7Y897:0T0S7$8d7N0S7*8i4j0S7.8m4~0S7=8q827_8u867|8x5f0S808A3F0M848E360M886U4j0M8c8M4~0M8h8Q4)0M8l8U4b0M8p8Y5f0M8t8$8F8w8*8J8z8-3v0M8D8:458H8@0G8L6Z43458P8}4Z458T914N458X953)458#993=458)9d3u458,9h1e458/9l04458?9p0)45477k9u8|6(960)909A9a4t9w7p9q4B9H7V9u9c9E9e0)9g9P9i4U9L719u9o9T9m0)9s9!9q4:9W6P9C9z7f9a0H9D9/9e559+7F9C7r1I2^1x2)2S0v1}2X3S0Z2;291Fa01G9~2|4D05a60|2_6Z0*1e0|0N3I8i0!36ao8M0N1e0y2J0*250v3U0N0U0p0^0V1t0U230kas6Z1d040DaL6p1e0k2B0:aQ5+aN0K3I0T8m1e0*aW3qaN0t0`9_19aq3*37a)3S0:0v1e01a{a.01a^3j370w2;0_231+250T0Y150Z1+150T2I2@0-0:250~2C2E1+0PaxazaBbm0T1w4=3qa a;37bz0V0fbt0T0q0:0/bEbG0T0o00bj0_0q0hbe0qbgbi0j0/0-b81m0TaT0/aVbva@a_by0AaF1t1+0%0_0k0D0*0t0T0;bK0pbRbTbj0p2Lb(3`bxbzc50TbB0Tb:0kb{0T0N1v2K0_1vbsca1v0p0Z0Z0_0K0T0p0$2Jc9b;0D0Lb^0W0T7.067?c4bz0D0)b^b,aG0/bPcvb=0*0TcAcI0T0O0s0_bIbH0-0#3tb_cOb?cR3kb^0D2.1Nbb0TcXcA0G0tcq0ZbMbJ2e2I10a}cFc62Ecf0TcQcScR020#0/0ic;c*8_6Zd10T0D0HcJb-cMbQcac)c?c^13c{bH2#bebO2D0N0 2Id0b*c5a{013Pc58iak04b4a!a$04a(4Da#6U0V1e0W0WdO6U0B0_1e7P8iaNa-4Kd2a=6UdL2I0/0s0hbu4{dJd/1e0q1YandSdPdR2`dT6ZdV04dXdZ6Zd#9ma?3`d*dId-e1e95$e6dYe0d!d$0484d`ajd|110qed49efd,eh8Ma%ej5+e60Ieme38ieb047Y06es5$0Z0)1e032uaGbQ0r1{1+1{2fcV101*egd.8}aSaUex21e60ee/3g1e0p0Y0Yaze?19aNaPaeeod%e}01a+e*e45$dL0!1Ue)en8}0k1e2pf4e f40je-b$fj1e0teE3qe6020odbeI3bf86ueDf1aM1ed+d_eBe,04b#b%2|dU1ee=fDaR04e_e{0j0vfpaOf4eLd(6Uf64KeObzdK1edNfefSfLfY0@flfCfNfE040Jfs3Selfy3nfA3qf#fYfG4fd-g24SfnfM3bd)1ef?fRfBdQfYf|f/eFdWf}3`eL7TeP5+dLd}big5f7gt3qeReT0T0+2J0.bP0ZgHbm120s0jgc4ng8dP0^gp49elgU31f^g7fIf91efb24gXe@fKe.gha*gff@04gTg.3SaNgleJfOe7g02Og9gqep7dge04g6gQg8f+eCg=g*19e60Fg~3veKh23Pf*d28igC04eU9yhr9y0G37dcc;0o0T0ncrgL380T0^0s0:cVbM2D0^0Igsg#giaKgmftgohR3Sgrgzh9et04g(fdg{fJg?h%ek1ed9fxhc3rgZ3nh4h63zh8hYf:g-f_5$aNggh}gih)gdf%1eg`fz8igWhU42aShXhmhahQh*gne7h/hWibgV1e0Ih/fmfKa!h049hoeU0w0p0#bOiec6gSh/eGhgiv21imfHifh(iG1ehfilhjf)gR6Uix0T0A0j0j0s15bl0v0sbmd@bObQ2egPh^hO3qdLf.ii3Lidine:dWiIhiecg@eefFiDgAgag,foj2eyg:jagYhbjd1.g_iPiki|1.iLg!h_dPf;jge~jci1i`jfi_f~iQiSj1jvg^i6jji f2eqiDf,04gwewjsf5j4eAjpigh|i4f`i0jWfSi3h=i5f{jGjBjJiUi=a5eShp0T0m2DcMbVb6hKjKd{dMd jyicj8i:aih~jujZi2gkjGjHeaepf$f`h@1fh_e+h{j9jDj304jYj$iOjPjijlhdhTj 49jnh7jTfJ230j0_j)kt010*0Z1e0g0h0sjOiMiEj|jNgyjSh8dPkCkEkGiakw21kI1e0%3tgxj,iNeQj/eU0?16bY0h1b0Zi$i-120^dej{hZi^i8j%f0klgVa:2:0/ir1ekXfYfrkZa:2ffXkGfkjPisj#g i9i~j*kdk404a,j5h`5+iX0l0X0)0Rhu0T0b0T0l8{hv13bZ0)0T0FhDcA0HdelO3klwkihPjVkpltko2Oj0j+l521ksk#1.k!l2kbf3kUiVfJjrl*jhk5l!5+kyl%j%i7g1lpjkl-19l kgkhkW2.kYm601l/m3d/kJ04kLkNhkl@k.gDj=k?bHb`c#0sgJkOjokQhZh#mymhe5l70Vl9kGislckrjRkPmolyk/0T0,0j0$1m0_2fb$bs0kaG141+kfhlkViWmR0T0uhE0Th-dcermam,gDm.b!aU0@0^0JcRcSlWiJ1.iXm{fLm~lU0)n0dX0Tm@kAmpj:n7m}k}0I38n00q0c0_bG0qcq1lnrc;0ja6i!0sn3hnmR0enF0ClBlDnCj|l1mEkjk2h4l$k3k7kZipj*h3m1k9nWkTmOm^6ZiXnF0e0)nIlElGn*0G0X0G0RlNn/nF8{hNkhlxjwl_k6g/kng;lnhhg|iqkGm8h4m2log|ka5$g4l?n%nOf=o4k8nUm5l:ogiTn$nglYkko1jEo3ll1eo5n4ku040Fn!mMj(ooofl~osmzn}mbkDkFmek%mkkMmDi;oui?eunModkqmef oHl`jth5n3j63`lzn;lCn.370l45lNdc0ZbZlSlPlScA0(c*lNlPhulP7$n}o:4igboljPoho,jQoJo)kvoqoMjCoOojovnPj%nRl(nXf`oco6e5pmnNpol)pqoZj7o0l}o2pvjI7ioboSpng3oNkzpboQmdpRjzoppDi?mjmloXm9pH3`gvevn#pGm+n(nEnFbtci0$0_0|o/n~j.gDn:n-37lG0T0Xn*0Rn=n@hulGq6nFn@9voip+49i@j~pYk0oCm4e8o9eppOj%m)pbj-o;mRlA0Cqfnfqwp~p,f-qlp#pIlZm0jXf!kconplg}lrp/pUqEmAnheUqAqCq3o_htp}qijepJqMl#qOl=pil,qmiop!o%orppqVqWqFpdk1pfpioanYoKo+p:qWjqqLnSpLq/eMqQq?i}q^pAq`9qq)p;fSmLqRoLp$kKoWrmpck$euk+q;mNr7qEnDgDq!9uo^lH8{lJ0To}lMlU0xc*0Qc*p0cBrvqxq q,rboypMl;pFpKoypzoDmfpCq_pEqDq}q~q+ranQrdpxltr+qpr6q|r=r9owr)kmr$rkqtpypQqJh1q:rCqws2ptqNpgep7npPr5qrq{oYr=r?g+rprgl.r.rjgup%ruqhrnguryp)h?rWlXgBmRk}m=lVsCoPnLqIr/n r^puomooo8meeLs8r|nZsor(q-aXrBs0q}rEj:n:o?lDq$0Tn*8^n|srsJqKs3s+rcoAjxsvoEsZt501s#rfsbq@rrhVpTsqs}sgr1oxqntbsTpZtescs*p*s}r,isrZr_t3qog|oGs)r{s,pkt8mgtotrs|tihasutcrhtqqjsAmmsPpro!jMp.oIqvtus~qyq0nF45q2lF37n*nIrHsIqXpstks4q tApB04t7tPjmtgr!kmr}oeqTtVsfjUt0u2jbozpilmtnsyhSrir,phsepVu9shq.tzjjtCs!u1smrqr thsriFsYtRiKqst=rwn5p?0en-8{uGss19iXcib|aTb70vbh3;nruNt%iwmRm/sMdam?uZr,iXm/n8m p5u+s:eUu.nknancneu=m_j:u^b$n9nmnbcUcWbEnqnsu}p=mq2De{1tb!m$1*bQ1ibQt/o@mnuO01iX0w0-260#p)m*jLmClar0oIs6ijt~t1tfspubl+jFoKuDu0sdt_vKo.sCtjjPe;g;2y0YfY0Dle510dag0q2P2@v*9 1Oa12S2V2Q0p1)v-0da01gv`0}0 1104.