/rmit2023a-cosc2658-group-project

RMIT 2023A - COSC2658 Data Structures and Algorithms - Group Project

Primary LanguageJupyter NotebookMIT LicenseMIT

COSC2658 Data Structures and Algorithms - Group Project

For problem description, see Assessment Details.


Contribution

Student Name Student ID Contribution Score
Do Le Long An S-3963207 3
Nguyen Nguyen Khuong S-3924577 3
Vo Tuong Minh S-3877562 3
Tran Ly The Quang S-3878707 3

Project Structure

.
├── notebooks/
│   ├── images/
│   └── Analysis.ipynb
├── src/
│   ├── main/java/vn/rmit/cosc2658
│   │   ├── development/
│   │   │   ├── InteractiveApp.java
│   │   │   ├── SecretKey.java
│   │   │   └── SecretKeyGuesser.java
│   │   ├── SecretKey.java
│   │   └── SecretKeyGuesser.java
│   └── test/java/vn/rmit/cosc2658/development
│       └── SecretKeyGuesserTest.java
├── test-data/
├── AssessmentDetails.md
├── README.md
├── LICENSE
├── pom.xml
└── requirements.txt
  1. notebooks/: This folder contains all the images and data analysis with Jupyter Notebook based on different performance parameters
    • images/: This folder contains all the results of data visualization.
    • Analysis.ipynb: The Jupyter Notebook for plotting and visualizing data.
  2. src/: This folder contains two sub-folders:
    • main/java/vn/rmit/cosc2658: This folder contains the final guessing algorithm and the development Java package.
      • development/: This Java package folder contains two classes that support our development and testing phase.
      • SecretKey.java: The initial provided class from the Assessment Details.
      • SecretKeyGuesser.java: The final key guessing algorithm implementation.
    • test/: This folder contains all test cases (using JUnit) for various test secret keys.
  3. test-data/: This folder contains all test results from JUnit tests in .csv format.
  4. README.md: A text file containing useful reference information about this project, including how to run the algorithm.
  5. LICENSE: MIT
  6. pom.xml: XML file used in Maven-based Java projects for building automation and dependency management tool
  7. requirements.txt: Text file for pip installation of necessary packages for our data visualization and analysis in notebooks.

Development Environment

Global Requirements

Requirement Version
Git latest
Maven 4.0.0
OpenJDK 17.0.2
Python 3.11

Note: For this project, we are using Python virtual environment to keep it light. However, feel free to use Anaconda if it is more convenient.

VSCode Requirements

Extension requirements for building and running Java classes:

Requirement Version
Extension Pack for Java latest
Test Runner for Java latest

Additional extensions for viewing data visualization in notebooks:

Requirement Version
Python latest
Jupyter latest

To properly setup Java and Python development environment for our project, refer to the following documentation:

To run tests, you need to install JUnit Maven dependency:

$ mvn install

If you are viewing and running Python scripts in notebooks, install the required Python packages:

$ pip install -r ./requirements.txt

IntelliJ IDEA

Requirement Version
Python Plugin for IntelliJ IDEA latest

Note: The above requirement is needed only for viewing data visualization in notebooks. All Java functionalities and toolchain integrations are IDE's built-ins, so no other plugins are required.

To properly setup OpenJDK 17 to work with IntelliJ IDEA toolchain, refer to this documentation: IntelliJ IDEA - SDKs.

To run tests, you need to install JUnit:

$ mvn install

To enable and run Python functionality within IntelliJ IDEA, refer to the following documentation: Python in IntelliJ IDEA.

If you are viewing and running Python scripts in notebooks, install the required Python packages:

$ pip install -r ./requirements.txt

Refer to IntelliJ IDEA - Getting Started to learn about building, executing, debugging, and testing with IntelliJ IDEA and its Maven toolchain integration.

Build and Execution

  • A console applet is available for you to manually play with guessing a random secret key. Edit line 7 to use any positive non-zero key length of choice.
  • Our final solution can be run by calling vn.rmit.cosc2658.SecretKey.main().
  • All tests are in vn.rmit.cosc2658.development.SecretKeyGuesserTest.

Video Demonstration

Video available on YouTube: Link.