Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import argparse
- import random
- import time
- import math
- import pprint
- import sqlite3
- conn = sqlite3.connect('BD_Tournament.sqlite')
- c = conn.cursor()
- pp = pprint.PrettyPrinter(width=120)
- c.execute('''
- Create table if not exists Tournament (
- tournament int NOT NULL,
- stage int NOT NULL,
- match int NOT NULL,
- round int NOT NULL,
- p1name varchar(50) NOT NULL,
- p2name varchar(50) NOT NULL,
- p1point int NOT NULL,
- p2point int NOT NULL,
- winner varchar(50) NOT NULL
- );
- ''')
- c.execute('Select max(tournament) From Tournament')
- curtour = c.fetchall()[0][0]
- if curtour is None:
- curtour = 1
- else:
- curtour += 1
- parser = argparse.ArgumentParser()
- parser.add_argument("roundnumber", type=int)
- parser.add_argument("playersnumber", type=int)
- args = parser.parse_args()
- roundnum = args.roundnumber
- playersnum = args.playersnumber
- namegen = [
- ["Колян", 0],
- ["Владик", 0],
- ["Димка", 0],
- ["Антон Сергеевич", 0]
- ]
- stages = int(math.log2(playersnum) + 1)
- names = [['' for x in range(playersnum)] for y in range(stages)]
- for i in range(playersnum):
- k = round(random.random() * 100) % 4
- namegen[k][1] += 1
- name = namegen[k][0] + str(namegen[k][1])
- names[0][i] = name
- def player(curstage, player):
- name = names[curstage][player]
- while True:
- yield round(random.random() * 10), name
- name1, name2 = '', ''
- curstage = 0
- k = playersnum / 2
- j = 0
- s = 0
- for i in range(playersnum - 1):
- playerOne = player(curstage, s)
- playerTwo = player(curstage, s + 1)
- p1wins = 0
- p2wins = 0
- print("Match " + str(i + 1))
- print()
- r = 1
- while r < roundnum + 1:
- x, name1 = next(playerOne)
- y, name2 = next(playerTwo)
- # time.sleep(2)
- print("Round " + str(r))
- print(name1 + ": " + str(x))
- print(name2 + ": " + str(y))
- print()
- if x > y:
- print(name1 + " win!")
- p1wins += 1
- Data = [(curtour, curstage + 1, j + 1, r, name1, name2, x, y, name1)]
- c.executemany('''Insert into Tournament values(?,?,?,?,?,?,?,?,?)''', Data)
- conn.commit()
- elif x < y:
- print(name2 + " win!")
- p2wins += 1
- Data = [(curtour, curstage + 1, j + 1, r, name1, name2, x, y, name2)]
- c.executemany('''Insert into Tournament values(?,?,?,?,?,?,?,?,?)''', Data)
- conn.commit()
- else:
- print("Friendship win! Rematch!")
- r -= 1
- r += 1
- print()
- # time.sleep(2)
- print("Match is over!")
- if p1wins > p2wins:
- print(name1 + " win match!")
- names[curstage + 1][j] = name1
- elif p1wins < p2wins:
- print(name2 + " win match!")
- names[curstage + 1][j] = name2
- if j == k - 1:
- k = k / 2
- curstage += 1
- j = 0
- s = 0
- else:
- j += 1
- s += 2
- print()
- print(names[stages - 1][0] + " win tournament!")
- print()
- for i in range(stages - 1, -1, -1):
- k = playersnum
- for j in range(k):
- print(names[i][j], end=" ")
- k /= 2
- print()
- c.execute('Select * From Tournament')
- pp.pprint(c.fetchall())
- c.execute('''
- With temp as
- (Select tournament, max(stage) stage From Tournament Group by tournament)
- Select t.tournament, winner
- From Tournament t join temp on t.tournament = temp.tournament
- Where t.stage = temp.stage
- ''')
- pp.pprint(c.fetchall())
- conn.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement