Aller au contenu

Ajout d'un terme à une représentation

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.

S'il est distinct des autres, aucun problème... Sinon, il faut travailler.

On pourra remarquer que \(F_{n} + (F_{n-1} + F_{n-2}) = (F_{n} + F_{n-1}) + F_{n-2}\) et donc que \(2F_{n} = F_{n+1} + F_{n-2}\), comme dans les exemples :

  • \(2×13 = 21 + 5\)
  • \(2×21 = 34 + 8\)
  • \(2×34 = 55 + 13\)
  • \(2×55 = 89 + 21\)

Si les deux nouveaux nombres, pour remplacer \(2F_{n}\) sont absents, aucun problème... Sinon, il faut travailler. Et pourquoi pas de façon récursive ?

Exemple

Si on prend une représentation de Zeckendorf de \(100\) : [0, 0, 1, 0, 1, 0, 0, 0, 0, 1], et qu'on ajoute \(F_4 = 3\), on doit obtenir \(103\), dont une représentation possible est [1, 0, 0, 1, 1, 0, 0, 0, 0, 1], en effet

  • \(100 = 3 + 8 + 89\)
  • \(103 = 1 + 5 + 8 + 89\)

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 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^4\)
  • 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/.ùr;nbylaeu)dM6z3Am(P+02-],59fqZ78 _o=pcwgv4F1kéhtsSàj[i:050o0l0Z0k0)0j0!0K0P0j0k0!0!0N010Z0)0O010406050!0m0u0u0k0e0i040#0M0j0m0~0M0g050b1517191b130O04051r1k1u0b1r130o0)0S0?0^0`0|0Y0)0R0Y0j1I0Y0Z11050.0h0j0l1D0_0{011H1J1L1J0Z1R1T1P0Z0e1s0Z0Y1V1F010F0:0l0g0k0u0l010?1e0!0O0k0g0|0z1P20221:1X1?1T1_1{110a0K0w0e0M0O0M0!0)1h0g0K0,1~0e0e0l0P2p1k270g1s0b1.2C1+1-1,1Q0o290|1L0g1^2m1P1A1C0@1W2M0)2O0g0M2S1P0O2v1s2A2C2*14212q2U1;2Z0e180j110K0V2z2.122-282:1X2=2@2_0z2|222~2A2L01330k2^040K0s372B133a310|3d3f0K0T3j392.3b3p2_0D3t3l3v3n3c0M2?3e2_0q3A2 2/1E323F343g0I3K3m3N3o3P3H3g0J3T3C3V3E3G3q0E3#303%3x040V0y3,3M2V3(3Q0V2{1l2}3B3-3^3/0V363}383 3@2;3X3f0V3i453k3L3w4a110V3s4e3u40493)4j3z4m474h4q3:3J4t4g3D423S4z3U414i3:3!4E3$4G4w0V3+4K4o3O4w0z3=4Q484S3Q0z3|2*4u4B4H0z444$4A3.4)4d4,4F4p4Z4l4;4L4?3Y0z4s4_4R3W4T4y4 4X514Z4D544v4Z4J594(4T4P5d4.4w0s4V5h4M3Q0s4#3~4-5n3Y0s4+2}1v2(1k2S2F0o1-2K3D0P2!1|1s5B1t5z2,4m055H0,2)4`1X0W110,0F3t5s1;0Q2_5!4=320F110r2w0W1^0o3F0F0L0k0%0M1g0L1?0h5)5U0|10040v60503c110h2o0!665501630C3t0K5#32110W6d3b630n0*3?3b5%3g0K6x6o3D0!0o11016E6t6A6C6w6x0p2!0)1?1U1^0K0O0^0P1U0^0K2v2%0X0!1^0.2p2r1U0H5/5;5?6)0K1j4W3b6B2_6x6_6x0M0d6:0K0l0!0Z6 710K0j006$0)0l0e6X0l6Z6#0g0Z0X6R190K6a0Z6c6=6H6^6x0t5`1g1U0U0)0h0v0W0n0K0$750k7c7e6$0k2y7p3%6@6J6`0K6|0K7x0h7F0K0F1i2x0)1i6/7U1i0k0P0P0)0C0K0k0S2w7T7y0v0D7C0N0K4~3~064%7N6I6`0v0V7C7t5{0Z7a7?7z0W0K7{850K0G0m0)73720X0R3e7D8b7A8e0K0z7C0v2X1A6U0K8k7{0y0n7.0P7774212v0:6G817r7Q5=0g0P0K8d8f8e020R0Z0f8B8t5l5r5*0|7O838v0K877v7b7U8s8D8F0?8I722O6X792q0F0/2v8N3^8,6_6E013A6`6k0|5W046N6i9c68046n4m6j8*010M11020j8!9h9o0u0)115w389i636s4t7Q6_9i0P0V11030?0_7j0e0~0P0m1L7a7o4$9G6y9o9e9g9m9i0g6m9v619p110N0N9+679x4j6z3%9D9a9Y9b9o9)9k9;6e9q049:9%9w9y049A3k9|9}9,9 0)a13ba3a52*9n9,9?048(389H9o9J9L0K840n9{9G9i9e0l0;0l9^3^9`9Fac9Z9,9e2v0Z0m0e6;alam67au049M0v8v3A06ad67afah3Daja*3.9*a69,a30Aa-3^aoaa12a%6e9e0Q1H1Ta@2;11aga:67a38Y8!ak2}aU6e0g0h112caG1;63655P9~696bbj1X6q9E9X9Y9(bp7nbr0|a30cbA9j0k0O0O5;bEblbEaoaq2B9C11ay4ta$asaMb45Zb6beby9W5x9o630(bEa)bn9,630Bb21Xajbbar9ibNbK11bu3~9|9I9KaX9N0=917,b1aJaAbo047mb$9Bb(11b*b-a(b4b{04b:bZai9.b;0|ao5q46a|3baCaEclb}cvbwatc19M1T0K1+7:0/0j6X0X9S0e2n0F1~171^6Uaz7Qbxcbbqci6eb)b+ckc$6p11cnal9ia,co3Db`9maKc_bVaVcFaw0sbSbvc9ae5-6,0g5=0e5@5_885}7yclbm2,cacccl6hc=a.a0dl3^a=cr01a_cld0b~cDd3045.0P5:d65?5^7u0Zdc5 c+3DbLdKdmdidNaH11dkc/ca9ldUa;110xdrctdu3K0b5R0l2C2%d+5A1B5C2F2I2D0k1Sd.0b5B13d{0-cL0!04.