Mise à jour de la liste d'emprunt d'une bibliothèque
Le cadre
Pour simplifier à l'extrême la gestion d'une base d'emprunt de N livres d'une bibliothèque, on considère que :
- Tous les livres sont indicés de
0inclus àNexclu. - Chaque livre possède une
datede disponibilité (un entier positif, sur une échelle de temps adaptée) - Un tableau
disponibilitéqui renseigne de la date de disponibilité de chaque livre.- Initialement, tous les livres sont disponibles à l'ouverture de la bibliothèque, à
date = 0. - Si un livre est disponible depuis une
dateindiquée dansdisponibilité, il peut effectivement être emprunté à nouveau dès ladateindiquée. - Si un livre est emprunté pour une certaine
duréeà unedate_emprunt, alors sa prochaine disponibilité seradate_emprunt + durée.
- Initialement, tous les livres sont disponibles à l'ouverture de la bibliothèque, à
Exemple concret
Le jour de l'ouverture de la bibliothèque, il y a 5 livres, et on disponibilités = [0, 0, 0, 0, 0]
On envisage quelques requêtes d'usagers :
- On souhaite emprunter, le livre d'indice 1, à compter de la date
0, pour une durée de5- C'est possible. Modification en place,
disponibilités = [0, 5, 0, 0, 0]
- C'est possible. Modification en place,
- On souhaite emprunter, le livre d'indice 1, à compter de la date
2, pour une durée de2- C'est impossible. Pas d'autre modification,
disponibilités = [0, 5, 0, 0, 0]
- C'est impossible. Pas d'autre modification,
- On souhaite emprunter, le livre d'indice 4, à compter de la date
3, pour une durée de1- C'est possible. Modification en place,
disponibilités = [0, 5, 0, 0, 4]
- C'est possible. Modification en place,
- On souhaite emprunter, le livre d'indice 2, à compter de la date
3, pour une durée de10- C'est possible. Modification en place,
disponibilités = [0, 5, 13, 0, 4]
- C'est possible. Modification en place,
- On souhaite emprunter, le livre d'indice 4, à compter de la date
4, pour une durée de4- C'est possible. Modification en place,
disponibilités = [0, 5, 13, 0, 8]
- C'est possible. Modification en place,
- On souhaite emprunter, le livre d'indice 1, à compter de la date
4, pour une durée de7- C'est impossible. Pas d'autre modification,
disponibilités = [0, 5, 13, 0, 8]
- C'est impossible. Pas d'autre modification,
Exercice - Partie 1
Coder une fonction emprunt_possible
- qui prend en paramètres :
disponibilités, un tableau d'entiers positifs qui indique la disponibilité de chaque livre de la bibliothèque.i_livre, un indice qui indique le livre à emprunterdate_emprunt, la date souhaitée pour emprunteri_livredurée, la durée souhaitée pour emprunteri_livre
- et qui renvoie un booléen
False, si le livre n'est pas disponible pour l'emprunt souhaité.True, sinon. Et dans ce cas le tableaudisponibilitésdoit être modifié en place pour refléter l'emprunt souhaité.
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
.128013],5/fTr;nb _o=ylaepcwgu)vd46F13kméhtsP(S+2[i:050A0s0K0r0S0q0L0l0u0q0r0L0L0o010K0S0t010406050L0x0H0H0r0h0p040O0n0q0x0.0n0j050e0^0`0|0~0?0t04051e171h0e1e0?0A0S0z0$0(0*0,0J0S0w0J0q1v0J0K0;050X0k0q0s1q0)0+011u1w1y1w0K1E1G1C0K0h1f0K0J1I1s010f0Z0s0j0r0H0s010$110L0t0r0j0,0Q1C1:1=1Z1K1$1G1)1+0;0a0l0M0h0n0t0n0L0S140j0l0V1.0h0h0s0u2c171`0j1f0e1X2p1U1W1V1D0A1|0,1y0j1(291C1n1p0%1J2z0S2B0j0n2F1C0t2i1f2n2p2T0@1;2d2H1!2M0h0{0q0;0E2m2X0=2W1{2Z1K2#2%0;0Q2+1=2-2n2y012=0r2(040F2_2o0?2|2:0,2 310B342{2X2}3a0;0d3d363f382~0n2$300;0C3d1i2R172F2s0A1W2x3n0u2N1,1f3y1g3w2V182,053E0V2S3m1r1K0G0;0V0f3u373T0,0v0;0l3Z3S2I2~0f0;0s0H2Q0x0j0K0m280*0S1F0s3*2/3#010:040N3 2Y410j3W0S1:153|0Z2b0I0L462}430c3d3)3!3,49040S0m1y0z2i4j3n4l4n2.474q3W0r0K0s0m3:3=3@4y414A3M2`4o3+2!3W0x0h0I3~4Q2o4C4k0;0y0T3k0l4,4S403,3V4s3Y4!044.4D4U041n4c0j4e1y0K4h4N3,430R544{4t4v4x4@4$4z0;0b4B4p1!0n0;020q0K0i0o5i4T2;4F4H4J3;0h3?0K581K434*4@064-5I4_3g4a4~504g4i5d5j5D0;575R5t390;5a1o5c2V5S0,435h4@5K3n5l045r5,5e485v4I4K5z4M5=5(015/0P5s4/4{0A4W4Y4+5J4,5?4:0;2i0K4W165}5X010G0u0;0g5z4Z2T5H4-6b1!4;0s0!6q3N5~5E68696u3U6d0W6g624`3U6m040D300L6z2`0?0e3P0s2p2Q6X3x1o3z2s2v2q0r3}2p3y6U0V0X0Z0L04.
Exercice - Partie 2
Coder une fonction traitement
- qui prend en paramètres :
disponibilités, un tableau d'entiers positifs qui indique la disponibilité de chaque livre de la bibliothèque.- un tableau
requêtescomposée de tuples(i, date_emprunt, durée)
- et qui renvoie un tableau de booléens reflétant si les emprunts souhaités ont été acceptés, ou non. Le tableau
disponibilitésdoit alors être mis à jour en place.
La fonction
emprunt_possible sera disponible, même si vous n'avez pas abordé la partie 1.
###(Dés-)Active le code après la ligne
(Ctrl+I)
# Tests (insensible à la casse)(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
(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
.128013.128077],5/f.qr;nb _oO=ylaeêpcwgu)vd41ç3kRAméhtsP(S0+2[-ji:@050E0v0P0u0!0t0Q0n0y0t0u0Q0Q0r010P0!0x010406050Q0B0M0M0u0j0s040T0p0t0B0`0p0l0n020u0M0x0k0n0K0v140j0i0B0v0Q050f111315170 0x04051C1v1F0f1C0 0E0!0D0/0;0?0^0O0!0A0O0t1T0O0P0}050*0m0t0v1O0=0@011S1U1W1U0P1$1(1!0P0j1D0P0O1*1Q010g0,0v0l1i0v010/1a0Q0x0u0l0^0W1!2a2c1~1,211(240M26040a0n0R0j0p0x0p0Q0!1d1f0(280j0j0v0y2A1v2h0l1D0f1|2M1_1{1`1#0E2j0^1W0l232x1!1L1N0:1+2W0!2Y0l0p2$1!0x2F1D2K2M2@102b1f2(1 2-0j140t0}0G2J2{0~2`2i2}1,2 310}0W352c372K2V013c0u32040I3g2L0 3j3a0^3m3o0F3r3i2{3k3x0}0e3A1G2=1v2$2P0E1{2U3v010y2.2p0%1M1D2;0v2?363H3S0(3!391P1,0J0}0(0g3H3u3+0^0z0}0n3;3C3Q0l0g0}1_0+0P1o230P3{3*2)010|040S472|3?3l3.0!2a1e0!0m0,2z0N1u1w3#3=494b0d3A3`4u2~0}2F1r0w434r2_4A1,4b0C0#3A060n4Q4z3|4g0l4C4q0B0t0*464s3h4S481 0p0}0r4y384f4v0}0X0c4O4R4(4:1 3-040g0p0j4.4J0^4b4d4$2L4/3D0}0!0o1W0D2F4e3k4w524T494V040E0u430o1o2;0B0l4#4I5l1 5j57044`5a5o0B0j0N0v5h3Q4L5k4)1,0p3^042+5O4{3b4C0v4E4G5L4g4b4N5C4P4_4R593}4W114Z5q5$494+040h5@4B040u0x0x230E5|4K0}565y5P3w0}5t0j5v0P0o2w0?4m1(6454666l4h5o4j2w0l4m4o0P4q6o5B2@5E5/5T5d1M5g5C5.5%0}4x5C6B4U3.5q0v5s1j6d5w6y6K5V5F0E5H5J6W040C0C4^5-53014}2F0P5H0l6Y6C5I5;4!4O1v3%3Z3I6 0f3L1v0P3N742S2N0u1%713L1B3)5W0^2F0M0o0g0u0J6R0O0I0}1n1p1r1t0n5)2_1I372$3k0u0E0M4l2A0n0`4b1B7C7E7G0!1e0Y0`0P1@040L0D2G0n5v1)1W0Q430n23286T0N0O232y1e1G7A1M3k1.1V1X1Z7f3k2l23250}2r0T0y0j0{0P2s0s1|7;6H3Y7f2^3#6~7}3Q4}3/6o5S3`6H6-3~400j42446V8q5z654c6o5n1L4k6t4n1W6w4H4t8z6m046L6A6I5m5Y5!1t6%4M6+4Q8R4|5Y6;0j6?6M8!8A0X8Y5,8+6a046c6e6g2x2y7b6%678L696p8E6s6u8I6x8y8 6z366N8S6D5e6G687g4a6X8*8r6P5r8?8x9f5i9i8Q9k5G5I5K969g5N5*5,6,8M6.0}4 519j9D558C5b6%8P998:906Q6S5u9o8~9y9r9P9t6!9v8W6@4g5R5b8)9s9D5n4D0B4F8V9A9C970}4@5*6}3T2M8e3K3W7e050!0M0A0n3n0P0^0b273Q0P0z1o0p0Z0!270Q0j0y1R1=0x0Q0#0f0f0y0E0l0h0Z0Q0(9d0h2Y0P0f1U0f0Z0(0y7n0E2Nag7Faj0$0G0e0h0G0h0U0f1+0)0Q1w0D0A0f0G0g0F0F0E0h0Qa)277S1(0^0#0V0G0#010f5D0q1f7i157u8u0n0;0n7l0H1e0n2C0x0;0y0v0jb87v850p0y7.0P0.0)bl0.0Q0u1c0.2C1:2Y5{7z0 72a23K0)0+0-04.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)