import time

def create(num, szor):
    return [Dice(num, RNG(1, 10), RNG(1, num), RNG(0, 9), RNG(1, num), RNG(100, 999)) for _ in range(szor)]


def most_frequent(List):
    counter = 0
    num = List[0]
    for i in List:
        curr_frequency = List.count(i)
        if(curr_frequency> counter):
            counter = curr_frequency
            num = i
    return num


def RNG(minimum,maximum):
    now = str(time.perf_counter())
    rnd = float(now[::-1][:3:])/1000
    return int(minimum + rnd*((maximum+1)-minimum) // 1)

class Dice: 
    def __init__(self, number, height, top, force, randi, iff):
        self.number = number
        self.height = height
        self.top = top
        self.force = force
        self.randi = randi
        self.iff = iff
    
    def PRNG(self):
        seed = int(str(self.height) + str(self.top) + str(self.force))
        while True:
            db = 0
            seed2 = seed**2
            for i in str(hash(seed2)):
                if (str(self.randi)[-1]) == i:
                    db += 1
            if db >= 3:
                return self.randi
            else:
                if self.randi - abs(seed2%10) > 0:
                    return self.randi - abs(seed2%10)
                elif self.randi + abs(seed2%10) <= self.number:
                    return self.randi + abs(seed2%10)
            seed4 = (str(seed2)[1:4])
            if len(seed4) >= 2:
                seed = int(seed4)
            else:
                seed = self.iff
                
                
dice6 = create(6, 1000)
dice8 = create(8, 1000)
dice10 = create(10, 1000)
dice20 = create(20, 1000)
with open('Dice.txt', 'w', encoding='utf-8') as f:
    f.write('6 oldalú dobókocka: \n')
    for i in range(len(dice6)):
        f.write(str(dice6[i].PRNG())+',')
    f.write('\n8 oldalú dobókocka: \n')
    for k in range(len(dice8)):
        f.write(str(dice8[k].PRNG())+',')
    f.write('\n10 oldalú dobókocka: \n')
    for z in range(len(dice10)):
        f.write(str(dice10[z].PRNG())+',')
    f.write('\n20 oldalú dobókocka: \n')
    for y in range(len(dice20)):
        f.write(str(dice20[y].PRNG())+',')
        
print('Ez a program azt szimulálja, hogy ha a dobókockát azonos feltételekkel dobnánk el, akkor ugyan az lenne az eredmény. A program minden lefutásnál más eredményeket produkál, mivel mindig más értékeket adunk meg a feltételeknek. 3 feltételt alkalmaztunk: 1: milyen magasan dobjuk el, 2: melyik szám van felűl az eldobás pillanatában, 3: Mekkora erővel dobjuk.')
while True:
    try:
        n = int(input('Add meg hogy hány oldalú dobókockát szeretnél elemezni (6, 8, 10, 20): '))
        if n != 6 and n != 8 and n != 10 and n != 20:
            raise ValueError('Ilyen dobókockát nem szimuláltunk le! Próbáld újra!')
        else:
            break
    except ValueError:
        print('Ilyen dobókockát nem szimuláltunk le! Próbáld újra!')
while True:
    try:
        x = int(input('Add meg hogy melyik számra vagy kiváncsi: '))
        if x > n or x <=0:
            raise ValueError('Nem jó értéket adtál meg! Próbáld meg újra!')
        else:
            break
    except ValueError:
        print(('Nem jó értéket adtál meg! Próbáld meg újra!'))
while True:
    try:
        s = input('Add meg melyik feltétel érdekel (magasság, felsőszám, erő): ')
        if s != 'magasság' and s != 'felsőszám' and s != 'erő':
            raise NameError('Elgépelted a feltételt! Próbáld újra!')
        else:
            break
    except NameError:
        print('Elgépelted a feltételt! Próbáld újra!')
    
if n == 6:
    lista = []
    for l in range(len(dice6)):
        if dice6[l].PRNG() == x:
            if s == 'magasság':
                lista.append(dice6[l].height)
            elif s == 'felsőszám':
                lista.append(dice6[l].top)
            elif s == 'erő':
                lista.append(dice6[l].force)
if n == 8:
    lista = []
    for l in range(len(dice8)):
        if dice8[l].PRNG() == x:
            if s == 'magasság':
                lista.append(dice8[l].height)
            elif s == 'felsőszám':
                lista.append(dice8[l].top)
            elif s == 'erő':
                lista.append(dice8[l].force)
if n == 10:
    lista = []
    for l in range(len(dice10)):
        if dice10[l].PRNG() == x:
            if s == 'magasság':
                lista.append(dice10[l].height)
            elif s == 'felsőszám':
                lista.append(dice10[l].top)
            elif s == 'erő':
                lista.append(dice10[l].force)
if n == 20:
    lista = []
    for l in range(len(dice20)):
        if dice20[l].PRNG() == x:
            if s == 'magasság':
                lista.append(dice20[l].height)
            elif s == 'felsőszám':
                lista.append(dice20[l].top)
            elif s == 'erő':
                lista.append(dice20[l].force)

print(f'A(z) {s} feltételnek a leggyakoribb értéke: {most_frequent(lista)}')