online
- Milos ZA
- Super građanin
- Pridružio: 31 Dec 2015
- Poruke: 1269
|
Pozdrav!
Imam projekat za koji mi je potrebna funkcija za hesiranje matrice. Projekat je vezan za igru Othello (Reversi), sto znaci da treba da hesiram matricu 8x8.
Ovako izgleda inicijalizacije table:
board = [['.' for x in range(8)] for y in range(8)]
Evo i jedan primer kako tabla izgleda.
[
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '2', '1', '.', '.', '.', '.', '.'],
['.', '.', '2', '.', '.', '.', '.', '.'],
['.', '.', '1', '2', '1', '.', '.', '.'],
['.', '.', '.', '1', '2', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.']
]
Kao sto se moze videti, jedan igrac je 1, a drugi je 2, a prazna mesta su oznacena sa tackom.
Moja sadasnja hash funkcija izgleda ovako:
def hesiraj(self, board):
string = ''
for y in range(8):
for x in range(8):
string += board[y][x]
broj = 0
for index, znak in enumerate(string):
broj += (index + 1) * ord(znak)
return broj
Funkcija prihvata tablu (matricu) i od nje prvo napravi string koji sadrzi sva polja table onakva kakva jesu i onda taj string hesiram u broj po formuli iz for petlje. Funkcija ord vraca ASCII vrednost karaktera.
Svestan sam da ovo nije dobra hash funkcija, pa me interesuje da li imate neku ideju kako bih mogao da je poboljsam ili da implementiram neku skroz drugaciju. Video sam na internetu neku ideju gde stanje table predstavim kao dva 64-bitna binarna broja gde jedan sadrzi jedinice na mestima gde igrac 1 ima figure, a na ostalim mestima nule, a drugi sadrzi jedinice na mestima gde igrac 2 ima figure. Kada to napravim onda odradim neku operaciju nad ta dva broja (cini mi se da je bila XOR), ali iskreno, nisam siguran da bi ispala dobra hash fukcija i nisam siguran kako bih je implementirao.
Napomenuo bih da je potrebno da ja napravim svoju hash funkciju, sto znaci da ne smem da koristim python hash fukciju ili funkcije iz neke biblioteke.
Unapred hvala.
|