Advertisement
DeGZeG

Untitled

Nov 12th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. import argparse
  2. import random
  3. import time
  4. import math
  5. import pprint
  6. import sqlite3
  7.  
  8. conn = sqlite3.connect('BD_Tournament.sqlite')
  9. c = conn.cursor()
  10. pp = pprint.PrettyPrinter(width=120)
  11.  
  12. c.execute('''
  13. Create table if not exists Tournament (
  14. tournament int NOT NULL,
  15. stage int NOT NULL,
  16. match int NOT NULL,
  17. round int NOT NULL,
  18. p1name varchar(50) NOT NULL,
  19. p2name varchar(50) NOT NULL,
  20. p1point int NOT NULL,
  21. p2point int NOT NULL,
  22. winner varchar(50) NOT NULL
  23. );
  24. ''')
  25.  
  26. c.execute('Select max(tournament) From Tournament')
  27. curtour = c.fetchall()[0][0]
  28. if curtour is None:
  29. curtour = 1
  30. else:
  31. curtour += 1
  32.  
  33. parser = argparse.ArgumentParser()
  34. parser.add_argument("roundnumber", type=int)
  35. parser.add_argument("playersnumber", type=int)
  36. args = parser.parse_args()
  37. roundnum = args.roundnumber
  38. playersnum = args.playersnumber
  39.  
  40. namegen = [
  41. ["Колян", 0],
  42. ["Владик", 0],
  43. ["Димка", 0],
  44. ["Антон Сергеевич", 0]
  45. ]
  46.  
  47. stages = int(math.log2(playersnum) + 1)
  48. names = [['' for x in range(playersnum)] for y in range(stages)]
  49.  
  50. for i in range(playersnum):
  51. k = round(random.random() * 100) % 4
  52. namegen[k][1] += 1
  53. name = namegen[k][0] + str(namegen[k][1])
  54. names[0][i] = name
  55.  
  56.  
  57. def player(curstage, player):
  58. name = names[curstage][player]
  59. while True:
  60. yield round(random.random() * 10), name
  61.  
  62.  
  63. name1, name2 = '', ''
  64. curstage = 0
  65. k = playersnum / 2
  66. j = 0
  67. s = 0
  68. for i in range(playersnum - 1):
  69. playerOne = player(curstage, s)
  70. playerTwo = player(curstage, s + 1)
  71. p1wins = 0
  72. p2wins = 0
  73. print("Match " + str(i + 1))
  74. print()
  75. r = 1
  76. while r < roundnum + 1:
  77. x, name1 = next(playerOne)
  78. y, name2 = next(playerTwo)
  79. # time.sleep(2)
  80. print("Round " + str(r))
  81. print(name1 + ": " + str(x))
  82. print(name2 + ": " + str(y))
  83. print()
  84. if x > y:
  85. print(name1 + " win!")
  86. p1wins += 1
  87. Data = [(curtour, curstage + 1, j + 1, r, name1, name2, x, y, name1)]
  88. c.executemany('''Insert into Tournament values(?,?,?,?,?,?,?,?,?)''', Data)
  89. conn.commit()
  90. elif x < y:
  91. print(name2 + " win!")
  92. p2wins += 1
  93. Data = [(curtour, curstage + 1, j + 1, r, name1, name2, x, y, name2)]
  94. c.executemany('''Insert into Tournament values(?,?,?,?,?,?,?,?,?)''', Data)
  95. conn.commit()
  96. else:
  97. print("Friendship win! Rematch!")
  98. r -= 1
  99. r += 1
  100. print()
  101. # time.sleep(2)
  102. print("Match is over!")
  103. if p1wins > p2wins:
  104. print(name1 + " win match!")
  105. names[curstage + 1][j] = name1
  106. elif p1wins < p2wins:
  107. print(name2 + " win match!")
  108. names[curstage + 1][j] = name2
  109. if j == k - 1:
  110. k = k / 2
  111. curstage += 1
  112. j = 0
  113. s = 0
  114. else:
  115. j += 1
  116. s += 2
  117. print()
  118. print(names[stages - 1][0] + " win tournament!")
  119. print()
  120. for i in range(stages - 1, -1, -1):
  121. k = playersnum
  122. for j in range(k):
  123. print(names[i][j], end=" ")
  124. k /= 2
  125. print()
  126.  
  127. c.execute('Select * From Tournament')
  128. pp.pprint(c.fetchall())
  129.  
  130. c.execute('''
  131. With temp as
  132. (Select tournament, max(stage) stage From Tournament Group by tournament)
  133.  
  134. Select t.tournament, winner
  135. From Tournament t join temp on t.tournament = temp.tournament
  136. Where t.stage = temp.stage
  137. ''')
  138. pp.pprint(c.fetchall())
  139.  
  140. conn.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement