Skip to content

Commit

Permalink
Hashmap implimentation
Browse files Browse the repository at this point in the history
  • Loading branch information
malangadan committed Apr 23, 2023
1 parent 6880486 commit 0eb4590
Show file tree
Hide file tree
Showing 16 changed files with 157 additions and 0 deletions.
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions .idea/Project3bMMA.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions playground/.idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions playground/.idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions playground/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions playground/.idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions playground/.idea/playground.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions playground/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file not shown.
26 changes: 26 additions & 0 deletions playground/hashmap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from hashmapClass import HashMap
import json

# Read data from JSON file
with open('learnsets.json') as f:
data = json.load(f)


# maps pokemon to moves they learn
pokemonList = HashMap()
for pokemon, learnset in data.items():
if 'learnset' not in learnset:
continue
pokemonList[f'{pokemon}'] = learnset

# maps moves to pokemon that can learn it
moveList = HashMap()
for pokemon, learnset, in data.items():
if 'learnset' not in learnset:
continue
for move, levels in learnset['learnset'].items():
if move in moveList:
moveList[move] += f', {pokemon}'
else:
moveList[move] = pokemon

48 changes: 48 additions & 0 deletions playground/hashmapClass.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@

class HashMap:
def __init__(self, capacity=8):
self.capacity = capacity
self.size = 0
self.table = [None] * self.capacity

def __len__(self):
return self.size

def __contains__(self, key):
index = self._get_index(key)
if self.table[index] is not None:
return True
return False

def __getitem__(self, key):
index = self._get_index(key)
if self.table[index] is None:
raise KeyError(key)
return self.table[index][1]

def __setitem__(self, key, value):
if self.size >= self.capacity * 0.8:
self._resize()
index = self._get_index(key)
self.table[index] = (key, value)
self.size += 1

def _resize(self):
old_table = self.table
self.capacity *= 2
self.size = 0
self.table = [None] * self.capacity
for pair in old_table:
if pair is not None:
self[pair[0]] = pair[1]

def _hash(self, key):
return hash(key) % self.capacity

def _get_index(self, key):
index = self._hash(key)
i = 1
while self.table[index] is not None and self.table[index][0] != key:
index = (index + i * i) % self.capacity
i += 1
return index
1 change: 1 addition & 0 deletions playground/learnsets.json

Large diffs are not rendered by default.

0 comments on commit 0eb4590

Please sign in to comment.