Assignment

You are required to implement a hashtable between words and number of occurrences, using the D programming language. Your hashtable must provide the following interface:

Method Description
this(size_t initialLength); a constructor that takes the initial size of the hashtable
size_t length(); returns the size of the hashtable
void add(string word); add a new word to the hashtable, or increase the number of occurrences
void remove(string word); remove the word from the hashtable; the word doesn't necessarily have to exist
size_t get (string word, size_t defaultValue = 0); return the number of occurances for the given word, or defaultValue if the word doesn't exist in the hashtable
void clear(); clear the table.
void resizeDouble(); double the size of the hashtable
void resizeHalve(); halve the size of the hashtable. Excess memory must be freed.
string bucketToString(size_t index_bucket); returns a string containing all the pairs <word, numOcc>, separated by one space (” ”) character
string toString(); returns a string containing all the pairs <word, numOcc> in the hashtable, starting with index 0

The implemented hashtable must be named Hashtable and it will contain SIZE buckets. Each bucket will contain a pair consisting of the word and number of occurrences.

Implementation details

1. You are not allowed to use the built-in Associative Array type, nor other library implementations of a hashtable.

2. You are allowed to use any other features/built-in types that the language provides.

3. You must use the globally available `hashOf` function, as your hash function:

string phrase = "Bran got the Throne";
size_t hashValue = hashOf(phrase);

4. Inserting in a bucket list always adds at the end of the list.

5. When halving, if the size is odd (2k + 1), the new size must be k.

6. We encourage you to use unittest blocks to test your implementation.

Deployment

You are required to write a small Linux Bash script, named `dmd_setup.sh`, that will setup the test environment. The script must do the following sequence of actions:

1. Clone the DLang repositories: dmd compiler, druntime, standard library (Phobos).

2. Build each component.

3. Do the necessary environmental setup such that the command `custdmd hashtable.d` will compile the file `hashtable.d` using the binaries obtained at step 2.

For detailed information about how to achieve the above, read the Starting as a contributor and Building under Posix guides.

Requirements

1. The hashtable implementation must reside in a single file, named `hashtable.d`.

2. The environment setup script must be named `dmd_setup.sh`.

Testing and grading

The assignment must be submitted as a `.zip` archive on VMChecker for the `DLang` course. The archive must have the following naming convention: firstName-lastName.zip. The archive will contain the `hashtable.d` and `dmd_setup.sh` files.

The final grade will consist of:

  • Test suite - 80%
  • Coding style - 20%

The use of idiomatic D code will be highly appreciated.

Contact

Make sure you are subscribed to forum. For any questions please use the forum.

dss/assignment.txt · Last modified: 2020/05/03 22:42 by eduard.staniloiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0