moyen
Casseur de digicode
On cherche dans cet exercice à déterminer la combinaison d'un digicode. Celui-ci est représenté une fonction
digicode prenant quatre paramètres a, b, c et d correspondant chacun à un entier compris entre \(0\) et \(9\) (inclus l'un et l'autre) et renvoyant True si la combinaison formée par ces quatre chiffres est valide et False sinon.
On peut prendre par exemple :
🐍 Script Python def digicode_1 ( a , b , c , d ):
return a + b - c - d == 0
L'appel digicode_1 ( 1 , 2 , 3 , 4 ) renvoie False . ( 1 , 2 , 3 , 4 ) n'est donc pas une combinaison valide.
Par contre digicode_1 ( 4 , 5 , 4 , 5 ) renvoie True . ( 4 , 5 , 4 , 5 ) est une combinaison valide.
Plusieurs solutions !
Ce digicode présente de nombreuses solutions valides (( 0 , 0 , 0 , 0 ) , ( 3 , 4 , 5 , 2 ) ...).
De façon générale, un « digicode » peut avoir plusieurs solutions. On cherche à en déterminer une parmi celles-ci.
Vous devez écrire la fonction digicrack qui prend en paramètre une fonction digicode et renvoie
un tuple de quatre entiers, chacun compris entre \(0\) et \(9\) , correspondant à une combinaison acceptée par le digicode.
On garantit que le « digicode » admet au moins une combinaison valide.
Exemples
>>> def digicode_1 ( a , b , c , d ):
... return a + b - c - d == 0
...
>>> digicrack ( digicode_1 )
(4, 5, 4, 5)
>>> def digicode_2 ( a , b , c , d ):
... return 156 * a - 820 * b + 1463 * c - 465 * d == 7607
...
>>> digicrack ( digicode_2 )
(3, 5, 8, 1)
Indice
Votre fonction n'a pas besoin d'analyser le fonctionnement de la fonction digicode.
Il n'y a pas tant de combinaisons possible que ça, vous pouvez toutes les tester !
En cryptanalyse, on appelle cette méthode attaque par force brute .
Version vide Version à trous
.128013s3obcdufvg/0ly n7apSr1me,(P2=4:twki5h)6050g0y0G0s0J0n0b0p0f0n0s0b0b0D010G0J0t010406050b0h0x0x0s0v0o040u0d0n0h0(0d0q050l0/0;0?0^0-0t041118051b0l1b1d180-0g0J0j0W0Y0!0$0L0J0k0L0n1r0L0G0+050R0e0n0y1m0Z0#011q1s1u1s0G1A1C1y0G0e0d0g0^1z0v190G0L0W0{0b0t0s0q0$0C011E1o010i0T0y0q0s0x0y1y1$1(1-1G1:1C1?1^0+0a0p0B0v0d0t0d0b0J0~0q0p0P1!0v0v0y0f2d111{0q190l1Y2q0G1W1V1X0g1}0$1u0q1=2a1y1j1l0X1F2A0J2C0q1S1k1y0t2j192o2q2U0.1%2e2I1.2N0v0=0n0+0w2n2Y0,2X1|2!1G2$2(0+0C2,1(2.2o2z012?0s2)040c2`2p0-2}2;0$30320E352|2Y2~3b0+0K3e373g392 0d2%310+0N3l2/2Z1n2=3q2@040r3e1a2S112G2t0g2x2~0f1S1_193I1c3G2W122-053N0P2T3n3y0$0I0+0P0i3E383$010H0+0p3,3#2J2 0i3)1r0J0f0v0s0f0I3?2:3.0*040A433x3^0q3{0k3}3O492~460M0F3l0p4n3=3-3^3(040i3q3e4p3@2#0+0s4w3w2~0d3:042L4C4q2#0e0+3 0q0k0y4h3o46483V2{4D3o0x0J2*0m4S450+4k4m4o4-4Y3.4s4u0v4J4y2=0+0e4@443^4F0+4I4W2p4x4}4L4N1(4Q4(3^4U5a1.4!4$5d1G4j4l520,4-5n4o4/4r0+4=4|4a4z040f5u4E4G512U545v2=4M044O595l5q1.5c5L4K1G5f040w4%5P4^0$5j4,5o5#5E2~4;4v5l5%3o4c040g5z3o4 4H105+5M5G574P4R5W555i0+4V2W5Q0$5S5U5h5Y4*5k2U065$6f5p65014s0J3+5_6i5.1j4e3Y5~645X015O6u603a4A696w0+0z5;3.5.4{5 5F6a046F6n6v5.5y6K4i6E6G4b3)6C5Z5l6e6g6%4n5`3%4N0Q0h0v5^5D6*6D476C5.4B6T4T6V6P6z2 4`6Z6}6;6o0+6S6y6L6?6O746Q6Y6{4)040M3v0l6s2q2R0y2q3R2r3K112u2t1R1T2t0s1B7o3H1k2.0l0P0R0T0b04.
.128013s3obcdufvg/0ly n7apSr1me,(P2=4:twki5h)6050g0y0G0s0J0n0b0p0f0n0s0b0b0D010G0J0t010406050b0h0x0x0s0v0o040u0d0n0h0(0d0q050l0/0;0?0^0-0t041118051b0l1b1d180-0g0J0j0W0Y0!0$0L0J0k0L0n1r0L0G0+050R0e0n0y1m0Z0#011q1s1u1s0G1A1C1y0G0e0d0g0^1z0v190G0L0W0{0b0t0s0q0$0C011E1o010i0T0y0q0s0x0y1y1$1(1-1G1:1C1?1^0+0a0p0B0v0d0t0d0b0J0~0q0p0P1!0v0v0y0f2d111{0q190l1Y2q0G1W1V1X0g1}0$1u0q1=2a1y1j1l0X1F2A0J2C0q1S1k1y0t2j192o2q2U0.1%2e2I1.2N0v0=0n0+0w2n2Y0,2X1|2!1G2$2(0+0C2,1(2.2o2z012?0s2)040c2`2p0-2}2;0$30320E352|2Y2~3b0+0K3e373g392 0d2%310+0N3l2/2Z1n2=3q2@040r3e1a2S112G2t0g2x2~0f1S1_193I1c3G2W122-053N0P2T3n3y0$0I0+0P0i3E383$010H0+0p3,3#2J2 0i3)1r0J0f0v0s0f0I3?2:3.0*040A433x3^0q3{0k3}3O492~460M0F3l0p4n3=3-3^3(040i3q3e4p3@2#0+0s4w3w2~0d3:042L4C4q2#0e0+3 0q0k0y4h3o46483V2{4D3o0x0J2*0m4S450+4k4m4o4-4Y3.4s4u0v4J4y2=0+0e4@443^4F0+4I4W2p4x4}4L4N1(4Q4(3^4U5a1.4!4$5d1G4j4l520,4-5n4o4/4r0+4=4|4a4z040f5u4E4G512U545v2=4M044O595l5q1.5c5L4K1G5f040w4%5P4^0$5j4,5o5#5E2~4;4v5l5%3o4c040g5z3o4 4H105+5M5G574P4R5W555i0+4V2W5Q0$5S5U5h5Y4*5k2U065$6f5p65014s0J3+5_6i5.1j4e3Y5~645X015O6u603a4A696w0+0z5;3.5.4{5 5F6a046F6n6v5.5y6K4i6E6G4b3)6C5Z5l6e6g6%4n5`3%4N0Q0h0v5^5D6*6D476C5.4B6T4T6V6P6z2 4`6Z6}6;6o0+6S6y6L6?6O746Q6Y6{4)040M3v0l6s2q2R0y2q3R2r3K112u2t1R1T2t0s1B7o3H1k2.0l0P0R0T0b04.
Fonction d'ordre supérieur
Une des caractéristique du paradigme de programmation fonctionnelle est de considérer une fonction comme n'importe quelle variable.
Une fonction peut ainsi être un paramètre d'une autre fonction.
On appelle fonction d'ordre supérieur une fonction qui a comme paramètre une autre fonction.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)