DSA Projects

De la WikiLabs
Jump to navigationJump to search

The following projects may be implemented for increasing the continuous evaluation grade for SDA. The projects will be accompanied by a slide presentation. You may do the project in any programming language you want.

  1. Involvement in any OpenSource projects for development or bug fixing (e.g: The Linux Kernel: http://eudyptula-challenge.org/, the Ubuntu Linux Distribution: http://community.ubuntu.com/contribute/, The Netbeans IDE: https://netbeans.org/community/contribute/, etc.). Any involvement, no matter how small, counts, as long as it is included in a release.
  2. Learn a new programming language (Java, Python, C#, Scheme, ObjectiveC, etc.) and re-do the homework exercises in that language.
  3. Join a software & programming summer school or internship.
  4. Write an application designed to check a password against enforced strong password policies. Given the username, the old password, and the new password, your program needs to say if the new password meets the following password policies:
    • a password should be at least 6 characters long;
    • a password should contain at least one character from three of the following character classes: lowercase characters (a-z), uppercase characters (A-Z), numbers (0-9) and special characters (any printable characters on the keyboard that is not in the other three classes);
    • a password should not contain the username;
    • a password should not contain any three consecutive characters from the old password;
  5. Write an application that parses a text file and creates a statistic with every word that appears in the text and the number of occurrences. Then write a basic compression algorithm for text files that works by replacing the most common words with a code that represents a dictionary entry. For example, you can encode "and" as 0 so you replace "and" everywhere in the text with 0. Don't replace a word unless the length of the code is less than the length of the word (so don't replace "and" with 1234) and the addition of the dictionary entry doesn't make the file larger (for example, if there are two "and" in the text, and they are replaced by 0, you save 4 characters, however, if you add the dictionary entry "0=and", you lose 6 characters -- newline char is the sixth --, so overall, your file is two characters larger). Also make sure you properly handle the numbers that appear in the original text, so that decompression doesn't accidentally replace them with words (you can, for example, add an escape character before them, so you know that they aren't dictionary entries). The dictionary must be added to the compressed file. Also write a decompression algorithm that replaces the numbers with the corresponding dictionary entry and removes the dictionary from the file. The usage of the application should be: "./comdecom -c source.txt compressed_file.comp" and "./comdecom -d compressed_file.comp decompressed_file.txt". The flags "-c" and "-d" stand for "compress" and "decompress" and they are followed by file names. After running both commands above, the file "compressed_file.comp" should be smaller than "source.txt" and "source.txt" and "decompressed_file.txt" must be identical.