-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtri-tres-selectif.py
60 lines (48 loc) · 1.61 KB
/
tri-tres-selectif.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import os
def usage():
print('Actions possibles:')
print(' - "comparer X Y": compare les valeurs du tableau aux cases X et Y, et retourne 1 si la valeur en X est inférieure ou égale à celle en Y, 0 sinon.')
print(' - "echanger X Y": échange les valeurs du tableau aux cases X et Y, et affiche le taleau modifié.')
print(' - "longueur: retourne la longueur du tableau.')
print(' - "verifier: retourne le flag si le tableau est trié.')
def printArray(A):
print(" ".join("*" for a in A))
def verifier(A):
return all([ A[i] <= A[i + 1] for i in range(len(A) - 1) ])
if __name__ == "__main__":
A = list(os.urandom(32))
print("Votre but est de trier un tableau dont vous ne voyez pas les valeurs (chacune est remplacée par *) :")
printArray(A)
usage()
B = A[:]
try:
nbCmp = 5 * 32 + 25
while True:
x = input(">>> ")
if x.startswith("comparer"):
if nbCmp > 0:
x, y = list(map(int, x.split(" ")[1:]))
print(int(A[x] <= A[y]))
nbCmp -= 1
else:
print("Erreur : plus de comparaisons disponibles !")
elif x.startswith("echanger"):
x, y = list(map(int, x.split(" ")[1:]))
A[x], A[y] = A[y], A[x]
elif x.startswith("longueur"):
print(len(A))
elif x.startswith("verifier"):
c = verifier(A)
if c:
flag = open("flag.txt").read().strip()
print(f"Le flag est : {flag}")
else:
print("Erreur : le tableau n'est pas trié")
print(f"Le tableau de départ était : {B}")
print(f"Le tableau final est : {A}")
print("Bye bye!")
break
else:
usage()
except:
print("Erreur : vérifier les commandes envoyées.")