Aller au contenu

Représentation maximale de Zeckendorf

Représentation minimale de Zeckendorf

À un entier positif n, on peut associer plusieurs tableaux de bits qui indiquent les nombres de Fibonacci présents dans une représentation de Zeckendorf de n.

Exemple de représentation minimale : \(100 = 3 + 8 + 89\)

🐍 Script Python
# Nombres de Fibonacci          1  2  3  5  8 13 21 34 55 89 (144 ...
assert zeckendorf_repr(100) == [0, 0, 1, 0, 1, 0, 0, 0, 0, 1]

La représentation de Zeckendorf de \(100\) est \(3+8+89\), ou sous forme de tableau de bits [0, 0, 1, 0, 1, 0, 0, 0, 0, 1]

  • La liste ne peut pas se terminer avec un 0
  • La liste ne contient pas deux 1 consécutifs.

On dit que c'est la représentation minimale de Zeckendorf. Il n'y en a pas d'autre avec moins de termes.

Représentation maximale de Zeckendorf

On peut démontrer que pour un entier \(n\), il existe une unique représentation de Zeckendorf, comme somme de nombres de Fibonacci distincts, mais avec une liste de bits qui a comme contraintes :

  • La liste ne peut pas se terminer avec un 0
  • La liste ne contient pas deux 0 consécutifs.

On dit alors que c'est la représentation maximale de Zeckendorf. Il n'y en a pas d'autre avec plus de termes.

Exemple
La représentation maximale de Zeckendorf de \(100\) est : \(1 + 2 + 3 + 5 + 13 + 21 + 55\)
🐍 Script Python
# Nombres de Fibonacci  1  2  3  5  8 13 21 34 55 89 (144 ...
assert zeckendorf_eval([1, 1, 1, 1, 0, 1, 1, 0, 1]) == 1 + 2 + 3 + 5 + 13 + 21 + 55 == 100

# n = 100
assert zeckendorf_max([0, 0, 1, 0, 1, 0, 0, 0, 0, 1]) == [1, 1, 1, 1, 0, 1, 1, 0, 1]

Exercice

Coder une fonction zeckendorf_max qui prend en paramètre une liste bits, une représentation quelconque de Zeckendorf et qui renvoie sa représentation maximale.

👍 Les fonctions zeckendorf_eval et zeckendorf sont disponibles.

Contraintes
  • la longueur de la liste bits est inférieure à \(10^4\)
  • 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 : /
.128013]x,59/f.Z78r;nb _o=ylaepcwgu)vd461z3kRméhtsP(S0+2[j-i:050F0x0Q0w0#0v0R0q0z0v0w0R0R0t010Q0#0y010406050R0C0N0N0w0m0u040U0s0v0C0`0s0o050g111315170 0y04051n1g1q0g1n0 0F0#0E0/0;0?0^0P0#0B0P0v1E0P0Q0}050*0p0v0x1z0=0@011D1F1H1F0Q1N1P1L0Q0m1o0Q0P1R1B010h0,0x0o0w0N0x010/1a0R0y0w0o0^0X1L1|1~1,1T1/1P1=1@0}0a0q0S0m0s0y0s0R0#1d0o0q0(1`0m0m0x0z2l1g230o1o0g1*2y1%1)1(1M0F250^1H0o1;2i1L1w1y0:1S2I0#2K0o0s2O1L0y2r1o2w2y2$101}2m2Q1-2V0m140v0}0q0I2v2*0~2)242,1T2.2:2=0X2^1~2`2w2H012 0w2;040q0K332x0 362}0^393b0q0G3f352*373l2=0e3p3h3r3j380s2/3a2=0H3w2{2+1A2~3B303c0k3G3i3J3k3L3D3c0l3P3y3R3A3C3m0f3X2|3Z3t040I0V3(3I2R3!3M0I2@1h2_3x3)3;3+0I323_343{3:2-3T3b0I3e413g3H3s460}0I3o4a3q3|453#4f3v4i434d4m3,3F4p4c3z3~3O4v3Q3}4e3,3W4A3Y4C4s0I3%4G4k3K4s0X3.4M444O3M0X3^2$4q4x4D0X404Y4w3*4#492(1t2!1g2O2B0F1)2G3z0z2W1^1o4;1p4/4-2(4`0(2#4H1-0L0}0(0h3p4)3;0A2=5c4B2-0h0}0J2s0L1;0F3B0h0r140c5h561T0|040T5w4N3k0}0p2k0R5C4T0^5z0D0$3/375f3c0q5T5J370R0F0}015!5P3z5X2=5T0q0M1;0E0s0#1Q0;0q2r2Z0O0R1;0*2l0q5u0#2:1Q2o0j5n5p5r2n1Q5G0Q5I4S5W5Y5S5T5!013w5*0q5d570}0#5b4i6m5i2~5F5H3p6t5x0^0s0}0t0t6y6n5y0}0Y0b5O4p6l6l6H0^58042r0Q0C0m1f6s6Q015z6K3w066P6u5E041/0p0r0Z5V3z5z0d6G6+380}6.0r0L6_6A016C046F6Z6`0N0#0}4R2(6`6@705D01784f6k5*6!0o0}0U7f5K726D7q377i047b3`6*716S0h3B7u4x6p7F3Z0s5R2T7I3}0p0}0m1~0B0x6=3Z5z5B4i7m7P04287V3;7X7(2-6w6b7+6I040D5N7k6O6z7g7n6-0#6/6;7Z7d0}6^76717{6}6 847g73752$7_7r867}6~7/5L827N7,7|7~8m1T730W8q6,877@6O7m7o8u7s040W8c2_8e3s6|8h884Y6)7l6`7{6Y8d6!8b8B7{5m0z5o0o5q0m5s0x0E3a8j6#0}7Y7c857-6c8/7g5M8x8z045 8B8U898f5l658!5r0r5@0m8+7*808:188}0}0!8V0}8R2_6!8^6N8O7B0}0A1D1P8V7#7%9a8@8-8+7{8|9w7r9l8S6`73020v0Q0n8F348H4x9u1;989y9C8I046a8=9j817;6M4Y7^5U8P0}9B8?7r730i9z0}0w0y0y5p9S5A8+7w7y349k0}0D8_6`7C7E8 9V0#8}7L9i9N7!7Q7S7U9U6?9T9-3s9Qac2xa09{ai3*8;9`7=9$7z9(8`9,9Z716$9;04a9as7)0}0b9d748B7w4X8G8T9e9g8{0w0caHalaj040YaFaYaC9x04aL4p8N9)9o049q1:aUaB9 9!a$aI1-739fa|1TaP9`a,9F718b9M2x9O3Z9}9`ax429(ba3}9+aWa(a_b60}9:b06,2h0y9`0Ta29ma/7g6S6U6Wao3caAbk3G0g530x2y2ZbK4:1x4=2B2E2z0w1ObN0g4;0 bX0)0+0-04.