Some of my projects for the Coursera course Java Programming: Arrays, Lists and Structured Data by Duke University
In this module, I've learned about the basics of cryptography, the science of keeping information private and secure. As a final project, I've created OOCaesarCipher, an algorithm to encrypt and decrypt messages by shifting or unshifting the alphabet. To solve these problems, I've worked more with processing Strings, but I also learned about arrays as way to store an indexable sequence of elements.
Acquired Skills:
- Combine Strings using concatenation
- Build Strings within a Java program using StringBuilder
- Use arrays to store and manipulate collections of data
- Refactor your programs for improved organization using object-oriented principles
- Practice effective algorithm design
Acquired Skills:
- Program a word frequency counter to analyze any input text file
- Select and substitute words from a list into a document template using both ArrayList and HashMap
- Create new lists to use in templates
- Recognize brittle code
- Improve code with flexible, object-oriented design.
In this module, I've learned about how web server logs store information about visitors to a website and write programs to access information like user IP address, date and time of access, and more.
Acquired Skills:
- Read information from a web server log
- Count the number of unique visitors to a website
- Count the number of times each visitor uses a website
in progress... 💪
In this module, I've developed a program to break the Vigenère Cipher, a more complex version of the Caesar Cipher. I improved my program in three stages:
- decrypting messages where you know the language and key length
- adding the capability to handle messages with unknown key length
- extending the program to handle messages in a range of possible languages
Acquired Skills:
- Effectively use HashSet and HashMap
- Expand an algorithm from solving a simpler problem to handling broader, more complex problems
- Design and modify program code involving a more complex collection of classes, methods, and data