By: Team CS2103T-W11-1 Since: Sep 2019 Licence: MIT

1. Introduction

AlgoBase (AB) is a one-stop management platform for Computer Science students preparing for technical interviews. With AlgoBase, say goodbye to tough interview days!

Tired of having to manually track your progress across multiple websites like Kattis, HackerRank and LeetCode? AlgoBase allows you to pull practice questions from these online repositories (and more!) and consolidates them into a single application.

Do you have to prepare for mutliple interviews, and want to customize your preparations for each of them? We got you covered! AlgoBase also allows you to create highly flexible training plans to tailor to your individual needs.

Are you a guru that has completed many problems, and want a powerful way to filter through your problems? No worries! AlgoBase comes equipped with a comprehensive tag system and a flexible filtering mechanism for your needs.

Are you used to the speed of Command Line tools and find that Graphical User Interface (GUI) applications are too slow? Not a problem! AlgoBase is designed for those who prefer to use a desktop app for managing algorithm problems, equipped with a robust Command Line Interface (CLI) while still maintaining the benefits of a GUI.

Interested? Jump to the Section 2 to get an "Overview" of the AlgoBase, or Section 3 “Quick Start” to get started with AlgoBase!

2. Overview

AlgoBase is primarily a problem management application, where users can add different algorithm problems from all kinds of sources. Within the application, users can create training plans consisting of tasks, where each task is a problem that the user has to complete. Upon completing a task, users can mark it as done, which contributes to the progress of their plan.

The figure below illustrates the layout of the AlgoBase application:

AlgoBaseLayout
Figure 1. Layout of AlgoBase

AlgoBase is split into following 3 panes:

  • Display Tabs – displays a list of items (problems, tags, plans or find rules)

  • Details Tabs – displays details of a specific item

  • Task Management Pane – displays details of the current plan

3. Quick Start

  1. Ensure you have Java 11 or above installed in your Computer.

  2. Download the latest algobase.jar here.

  3. Copy the file to the folder you want to use as the home folder for your AlgoBase application.

  4. Double-click the file to start the app. The GUI should appear in a few seconds.

    Ui
    Figure 2. UI of AlgoBase
  5. Type the command in the command box and press Enter to execute it.
    e.g. typing help and pressing Enter will list all possible commands in the result window and open the help window.

  6. Some example commands you can try:

    • listprob : lists all problems

    • addprob n/factorial d/define a function factorial that takes in a number and n and returns the factorial of the number t/recursion a/Halim : adds a problem called 'factorial' tagged with 'recursion' and authored by 'Halim'

    • editprob 1 src/LeetCode : edits the first problem displayed and sets its source to 'LeetCode'

    • switchtab tt/display i/2 : switches to tag tab

    • switchtab tt/display i/3 : switches to plan tab

    • findplan n/CS2040 : finds plans that with name 'CS2040'

    • donetask plan/1 task/1 : marks the first task in the first training plan as done

    • clear : resets AlgoBase

    • exit : exits AlgoBase

  7. Refer to Section 4, “Features” for details of each command.

4. Features

Command Format

  • Words in UPPER_CASE are the parameters to be supplied by the user e.g. in addprob n/NAME, NAME is a parameter which can be used as addprob n/Two Sequences.

  • Items in square brackets are optional e.g n/NAME [t/TAG] can be used as n/factorial t/recursion or as n/factorial.

  • Items with ​ after them can be used multiple times including zero times e.g. [t/TAG]…​ can be used as   (i.e. 0 times), t/recursion, t/recursion t/dynamic-programming etc.

  • Parameters can be in any order e.g. if the command specifies n/NAME a/AUTHOR, a/AUTHOR n/NAME is also acceptable.

  • If there are duplicate parameters, and the command format doesn’t expect multiple parameters of the same name (i.e. having …​ in its format), AlgoBase will only consider the last parameter and ignore previous parameters (with the same parameter name). e.g. addprob n/nameA n/nameB will add a problem with name nameB.

4.1. Problems

4.1.1. Adding a problem: addprob

Generates a new problem.
Format: addprob n/NAME [a/AUTHOR] [w/WEBLINK] [d/DESCRIPTION] [diff/DIFFICULTY] [src/SOURCE] [t/TAG]…​

  • DIFFICULTY should be an integer or decimal in the range of (0, 5] (If no difficulty is provided, AlgoBase will internally store the difficulty as 0)

Don’t provide extreme values like 5.00000…​01 as difficulty as computers can’t store decimals exactly and some round-off error is unavoidable.
A problem can have any number of tags (including 0)

Examples:

  • addprob n/Sequences a/Tung Kam Chuen w/https://open.kattis.com/problems/sequences d/Find the sum of the number of inversions of the 2k sequences, modulo 1000000007 (109+7). diff/3.0 src/Kattis t/recursion

4.1.2. Deleting a problem : deleteprob

Deletes an existing problem.
Format: deleteprob INDEX [f/]

  • Deletes the problem with the specified INDEX.

  • The index refers to the index number shown in the displayed problem list.

  • The index must be a positive integer 1, 2, 3, …​

The command will fail if the problem identified by INDEX is used in some task(s) in existing plans. Add f/ to force AlgoBase to delete all tasks associated with the problem.

Examples:

  • listprob
    deleteprob 2
    Deletes the second problem in the displayed list.

  • findprob n/factorial
    deleteprob 1
    Deletes the first problem in the results of the findprob command.

4.1.3. Editing a problem : editprob

Edits an existing problem.
Format: editprob INDEX [n/NAME] [d/DESCRIPTION] [a/AUTHOR] [t/TAG]…​

  • Edits the problem at the specified INDEX. The index refers to the index number shown in the displayed problem list. The index must be a positive integer 1, 2, 3, …​

  • At least one of the optional fields must be provided.

  • Existing values will be updated to the input values.

  • When editing tags, the existing tags of the problem will be removed i.e adding of tags is not cumulative.

  • You can remove all the problem’s tags by typing t/ without specifying any tags after it.

Examples:

  • editprob 1 a/John Doe
    Edits the author of the first problem to be John Doe respectively.

  • editprob 2 n/permutations t/
    Edits the name of the second problem to be permutations and clears all existing tags.

4.1.4. Listing all problems : listprob

Displays a list of all existing problems.
Format: listprob

4.1.5. Sorting problems: sortprob

Sorts the current list of problems by a specified method and order.
Format: sortprob m/METHOD [ord/ORDER]

  • METHOD can be name, author, weblink, difficulty or source.

  • ORDER can be ascend or descend representing ascending and descending order. The default is in ascending order.

  • String-based values (i.e. name, author, etc.) are sorted alphabetically.

If sorted by ascending order (i.e. the default order), empty fields will have the highest priority, which means if you execute sortprob m/weblink, the first few results would be (if any) without web links.

Examples:

  • sortprob m/name Sorts the current list of problems in ascending order of names.

  • sortprob m/author ord/descend Sorts the current list of problems in descending order of author names.

  • sortprob m/difficulty ord/ascend Sorts the current list of problems from lowest to highest difficulty.

4.2. Searching Problems

4.2.1. Locating problems: findprob

Finds problems fulfilling all provided constraints.
Format: findprob [n/NAME] [a/AUTHOR] [d/DESCRIPTION] [src/SOURCE] [diff/LOWER_BOUND-UPPER_BOUND] [t/TAG_KEYWORDS]

findprob 1
Figure 3. The result of findprob is shown in the problems list
When providing the search restrictions, you should ensure that keywords are non-blank and difficulty range is valid (as specified in addprob command). Also at least one search restriction should be provided.
  • Name

    • is case-insensitive. e.g. henz will match Henz

    • is considered a match as long as one word matches. (e.g. Henz Ben matches both Martin Henz and Ben Leong)

    • is matched word by word. e.g. hello will match hello world but not helloworld

  • Author requires an exact match.

  • Description

    • is case-insensitive

    • is matched word by word

    • is considered as a match only when the problem’s description includes all words in the constraint. e.g. wordA wordB matches wordC wordB wordA not wordD wordA

Words are separated by empty spaces. Thus if we have a sentence "Hello, world!", we have two words Hello, and world!.
  • Source requires an exact match.

  • Tag

    • Constraints are separated by spaces. (e.g. findprob t/Recursion Brute-Force will display all problems with both tag Recursion and Brute-Force)

    • Constraint tag set is a subset of matching problems. (e.g. findprob t/Recursion Brute-Force will match problem with tags Recursion+Brute-Force+Playful but not Recursion+Adhoc)

    • Two tags are considered equal only when their tag strings are exactly matched.

  • Difficulty

    • matches problems with LOWER_BOUND <= difficulty <= UPPER_BOUND

If you want to match problems with exact difficulty 1.5, please use diff/1.5-1.5.
If you want to match problems with with difficulty no lower than 1.5, please use diff/1.5-5.0 because 5.0 is the upper limit of difficulty.
Note that negative difficulty is not allowed, as mentioned before. Otherwise the command may be considered invalid.

Examples:

  • findprob n/Sequences
    Returns any problem with word Sequences (case-insensitive) in its name.

  • findprob t/algorithm diff/2.0-4.0
    Returns any problem with algorithm as one of its tags AND with a difficulty between 2.0 and 4.0 (inclusive).

  • findprob a/Hentin Marz src/Kattis
    Returns any problem from Kattis that’s authored by Hentin Marz.

4.2.2. Storing a problem-finding rule: addfindrule

Saves a problem-finding rule from provided constraints.
Format: addfindrule RULE_NAME [n/NAME] [a/AUTHOR] [d/DESCRIPTION] [src/SOURCE] [diff/LOWER_BOUND-UPPER_BOUND] [t/TAG_KEYWORDS]
Alias: afr

find rule 1
Figure 4. Information related to find rules is displayed in the "Find Rules" panel
If you want to "keep a list of problems" that fulfills certain conditions, say "graph theory questions from Kattis", you may store these rules using addfindrule and apply them later.
Unlike plans, as you add new questions to AlgoBase, so long as the new questions fulfill the search rule, they will show up if you apply that rule.
The rules for constraints are the same as those described in findprob command. Note that keywords in a find rule may be less restrictive than the fields (e.g. name, source, etc.).

Examples:

  • addfindrule MediumDiffAlgo t/algorithm diff/2.0-4.0
    Adds a new find rule named MediumDiffAlgo that when applied, returns any problem with algorithm as one of its tags AND with a difficulty between 2.0 and 4.0 (inclusive).

  • addfindrule Kattis src/Kattis or afr Kattis src/Kattis
    Adds a new find rule named Kattis that when applied, returns any problem from Kattis.

4.2.3. Applying a problem-finding rule: apply

Applies a problem-finding rule.
Format: apply INDEX

  • Applies the find rule at the specified INDEX.

  • The index refers to the index number shown in the displayed find rule list.

  • The index must be a positive integer 1, 2, 3, …​

You can find problem-finding rules that you can apply with in the "Find Rules" panel by clicking on the "Find Rules" tab.
apply a problem-finding rule is essentially the same as executing a pre-filled findprob command.

Examples:

  • apply 2
    Applies the second find rule in the displayed list.

4.2.4. Deleting a problem-finding rule: deletefindrule

Deletes a problem-finding rule.
Format: deletefindrule INDEX
Alias: dfr

  • Deletes the find rule at the specified INDEX.

  • The index refers to the index number shown in the displayed find rule list.

  • The index must be a positive integer 1, 2, 3, …​

Examples:

  • deletefindrule 2 or dfr 2
    Deletes the second find rule in the displayed list.

4.3. Tags

4.3.1. Creating new tags: addtag

Generates a new tag.
Format: addtag t/NAME [c/COLOR]

Examples:

  • addtag t/graph

  • addtag t/sssp c/BLUE

Tag color can only be "RED" "ORANGE" "YELLOW" "GREEN" "BLUE" "PURPLE" "TEAL" "BLACK" or "DEFAULT".

4.3.2. Listing tags: listtag

Displays a list of all existing tags.
Format: listtag

4.3.3. Deleting current tags: deletetag

Deletes an existing tag.
Format: deletetag INDEX

Examples:

  • deletetag 1

4.3.4. Editing tags: edittag

Edits an existing tag.
Format: edittag INDEX [t/NAME] [c/COLOR]

Examples:

  • edittag 1 t/difficult c/BLUE

4.4. Training Plans

Training plans consist of wrapped-up problems which we call task s.

4.4.1. Adding a plan: addplan

Generates a new plan.
Format: addplan n/NAME [d/DESCRIPTION] [start/START_DATE] [end/END_DATE]

  • Plans cannot have duplicate names.

  • START_DATE and END_DATE should be in the format of yyyy-MM-dd

  • START_DATE should be before or equal to END_DATE.

  • START_DATE will be set to LocalDate#now() if not specified, and END_DATE will be one month from START_DATE if not specified.

Examples:

  • addplan n/CS2040 d/past year questions in practical exams start/2019-01-01 end/3019-12-12

4.4.2. Deleting a plan : deleteplan

Deletes an existing plan.
Format: deleteplan INDEX

  • Deletes the plan at the specified INDEX.

  • The index refers to the index number shown in the displayed plan list.

  • The index must be a positive integer 1, 2, 3, …​

Examples:

  • listplan
    deleteplan 2
    Deletes the second plan in the displayed list.

  • findplan n/CS2040
    delete 1
    Deletes the first plan in the results of the findplan command (will be introduced in the next section).

4.4.3. Editing a plan : editplan

Edits an existing plan.
Format: editplan INDEX [n/NAME] [d/DESCRIPTION] [start/START_DATE] [end/END_DATE] [f/]

  • Edits the plan at the specified INDEX. The index refers to the index number shown in the displayed plan list. The index must be a positive integer 1, 2, 3, …​

  • At least one of the optional fields must be provided.

  • Existing values will be updated to the input values.

  • START_DATE should be before or equal to END_DATE.

  • The time range of the edited plan should cover due dates of its tasks. However, adding f/ will force inconsistent due dates to change to the plan’s end date.

Examples:

  • editplan 1 d/past year questions of sit-in labs
    Edits the description of the first plan to be past year questions of sit-in labs respectively.

  • editplan 2 start/2019-08-13 f/
    Edits the starting date of the second plan to be 2019-08-13 and any task with due date before 2019-08-13 to the plan’s end date.

4.4.4. Listing all plans : listplan

Displays a list of all existing plans.
Format: listplan

4.4.5. Locating plans: findplan

Finds plans fulfilling all provided constraints.
Format: findplan [n/NAME] [d/DESCRIPTION] [start/RANGE_START] [end/RANGE_END] [task/TASK_NAME]

  • Name

    • is case-insensitive.

    • is considered a match as long as one word matches.

    • is matched word by word.

  • Description

    • is case-insensitive

    • is matched word by word

    • is considered as a match only when the problem’s description includes all words in the constraint.

  • Start and end range

    • is considered a match when there exist overlaps in time. (e.g. a plan with start date of 2019-01-01 and end date of 2019-03-03 matches a plan with start date of 2019-02-02 and end date of 2019-04-04)

    • both RANGE_START and RANGE_END should be specified.

    • RANGE_START should be before or equal to RANGE_END.

  • Task name

    • is case-sensitive.

    • is matched word by word.

    • is considered a match only when there is a task whose name is exactly the same as the given task name.

Examples:

  • findplan start/2019-08-05 end/2019-12-07
    Finds plans whose duration overlaps with NUS AY 19/20 Semester 1.

  • findplan task/Sequences
    Finds plans that contain a task named 'Sequences'.

4.5. Task Management

4.5.1. Adding new tasks: addtask

Adds a task to a specified plan.
Format: addtask plan/PLAN_INDEX prob/PROBLEM_INDEX [due/DUE_DATE]

  • The target plan should not contain tasks with the same problem as the one identified by PROBLEM_INDEX.

  • DUE_DATE should be in the format of yyyy-MM-dd

  • DUE_DATE should be in between plan’s start date and end date (inclusive).

DUE_DATE will be set to the end date of the plan to be added into, if unspecified.

Examples:

  • addtask plan/1 prob/1 due/2019-12-12
    Creates a new task with the first problem in the displayed problem list and due date on 12 December 2019, and adds it the first plan in the displayed plan list.

4.5.2. Copying tasks between plans: copytask

Copies a specified task from one plan to another.
Format: copytask task/TASK_INDEX from/PLAN_FROM_INDEX to/PLAN_TO_INDEX

  • Task identified by TASK_INDEX should have a due date in between the start date and end date of the plan identified by PLAN_TO_INDEX (inclusive).

  • Plan identified by PLAN_TO_INDEX should not contain tasks that consist of the same problem as the task identified by TASK_INDEX.

Examples:

  • copytask task/1 from/1 to/2
    Copies the first task in the first plan to the second plan in the displayed plan list.

4.5.3. Deleting tasks: deletetask

Deletes a specified task from a specified plan.
Format: deletetask plan/PLAN_INDEX task/TASK_INDEX

Examples:

  • deletetask plan/1 task/1
    Deletes the first task in the first plan to the second plan in the displayed plan list.

4.5.4. Marking tasks as done: donetask

Marks a specified task in a specified plan as done.
Format: donetask plan/PLAN_INDEX task/TASK_INDEX

  • The task to be marked as done should have a current status of undone.

Examples:

  • donetask plan/1 task/1
    Marks the first task in the first plan as done.

4.5.5. Editing due date of tasks: edittask

Edits the due date of a specified task from a specified plan.
Format: edittask plan/PLAN_INDEX task/TASK_INDEX due/DUE_DATE

  • DUE_DATE should be in the format of yyyy-MM-dd

  • DUE_DATE should be in between plan’s start date and end date (inclusive).

Examples:

  • edittask plan/1 task/1 due/2019-12-12
    Changes the due date of the first task in the first plan to 12 December 2019.

4.5.6. Moving tasks between plans: movetask

Moves a specified task from a specified plan to another.
Format: movetask task/TASK_INDEX from/PLAN_FROM_INDEX to/PLAN_TO_INDEX

  • Task identified by TASK_INDEX should have a due date in between the start date and end date of the plan identified by PLAN_TO_INDEX (inclusive).

  • Plan identified by PLAN_TO_INDEX should not contain tasks that consist of the same problem as the task identified by TASK_INDEX.

Examples:

  • movetask task/1 from/1 to/2
    Removes the first task from the first plan and adds it to the second plan in the displayed plan list.

4.5.7. Setting current plan: setplan

Sets a specified plan as the current plan in main display.
Format: setplan PLAN_INDEX

Examples:

  • setplan 10
    Sets plan with index 10 as the current plan.

4.5.8. Marking tasks as undone: undonetask

Marks a specified task in a specified plan as undone.
Format: undonetask plan/PLAN_INDEX task/TASK_INDEX

  • The task to be marked as undone should have a current status of done.

Examples:

  • undonetask plan/1 task/1
    Marks the first task in the first plan as undone.

4.6. Graphical User Interface (GUI) Enhancements

AlgoBase currently supports several GUI features with an intuitive layout, including the following:

  • Opening, Closing and Switching between Tabs

  • Editing a Problem or Plan

  • Deleting a Problem or Plan

4.6.1. Managing Tabs

There are 3 types of tabs in AlgoBase, 2 of which (Display and Details) are shown in the figure below.

TabsOverview1
Figure 5. Types of tabs and their usage
  • Display tabs give a high level overview of the contents of a list of items

  • Details tabs give a more detailed description of an item in a display tab.

Much like tabs you see in other applications, tabs in AlgoBase work the same way.

  • To Switch Tabs – Click on a tab to switch tabs

  • To Open a Tab – Double click on an item in the Display tab to open it in the Details tab

  • To Close a Tab – Click on the x button next to a Details tab to close it.

Display Tabs cannot be closed.

4.6.2. Editing a Problem or Plan

The following steps show how a user can edit problems or plans from the GUI.

Step 1: Select the problem or plan you want to delete by double clicking on it. .Plan with name "Data Structures" is opened. image::gui/EditPlanUiAction0Annotated.png[width=70%, scaledwidth=12cm] Step 2: Make changes to the problem or plan by editing the fields directly.

EditPlanUiAction1Annotated
Figure 6. The name and start date of the plan are modified.

Step 3: Save changes to the problem or plan by clicking on the Edit Problem or Edit Plan button.

EditPlanUiAction2Annotated
Figure 7. The plan is successfully edited.
The Edit Plan Button cannot be clicked if there are no changes made to the plan.

4.6.3. Deleting a Problem or Plan

The following steps show how a user can delete problems or plans from the GUI.

Step 1: Select the problem or plan you want to delete by double clicking on it. .Problem with name "Sequences" is opened. image::gui/DeleteProblemUiAction0Annotated.png[width=70%, scaledwidth=12cm] Step 2: Click on the red Delete Problem or Delete Plan button at the bottom right. To prevent accidental deletion, a warning dialog will appear to confirm if you would like to delete the item. Click on the "confirm" button.

DeleteProblemUiAction1Annotated
Figure 8. Warning Dialog to confirm problem being deleted.

Step 3: Click on Confirm.

DeleteProblemUiAction2Annotated
Figure 9. The problem is successfully deleted.

4.6.4. Switching Tabs: switchtab

SwitchTabCommand
Figure 10. Demonstration of the SwitchTab command

Switches between tabs in the GUI
Format: switchtab tt/TAB_TYPE i/TAB_INDEX
Format: st tt/TAB_TYPE i/TAB_INDEX

  • Tab Type

    • can be display or details

    • Alternatively, display and details can be replaced by 1 and 2 respectively

Examples:

  • switchtab tt/display i/3 – Switches to the third display tab (i.e. plans tab).

  • st tt/1 i/3 – Same effects as the previous command but in a shorter format.

  • switchtab tt/details i/3 – Switches to the third details tab

  • st tt/2 i/3 – Same effects as the previous command but in a shorter format.

4.6.5. Opening Tabs: opentab

OpenTabCommand
Figure 11. Demonstration of the OpenTab command

Opens a new Details tab in the GUI
Format: opentab m/MODEL_TYPE i/MODEL_INDEX
Format: ot m/MODEL_TYPE i/MODEL_INDEX

  • Model Type

    • can be problem, tag, plan and findrule

    • Alternatively, problem, tag, plan and findrule can be replaced by 1, 2, 3 and 4 respectively

Examples:

  • opentab m/problem i/2 – Opens the 2nd problem in the list of problems.

  • ot m/1 i/2 – Same effects as the previous command but in a shorter format.

  • opentab m/plan i/3 – Opens the 3nd plan in the list of plans.

  • ot m/3 i/3 – Same effects as the previous command but in a shorter format.

4.6.6. Closing Tabs: closetab

Closes a details tab in the GUI
Format: closetab i/DETAILS_TAB_INDEX
Format: ct i/DETAILS_TAB_INDEX

Examples:

  • closetab i/3 – Closes the third details tab

  • ct i/1 – Same effects as the previous command but in a shorter format.

4.7. Data Management

4.7.1. Importing data: import

Imports external data in JSON format into local storage.
Format: import format/FORMAT path/FILE_PATH

  • Format can only be JSON.

  • File path refers to the relative path of the input file.

Examples:

  • import format/json path/./steven_halim_secret.json

4.7.2. Exporting data: export

Exports data into JSON format.
Format: export format/FORMAT path/DIRECTORY_PATH

  • Format can only be JSON.

  • Directory path refers to the relative path of the directory to store the output file.

Examples:

  • export format/json path/.

4.8. Miscellaneous

4.8.1. Viewing help : help

Lists all possible commands or shows the command usage of a command word.
Format: help [COMMAND_WORD]

help
Figure 12. All possible (full) command words will be listed using help command
  • help Shows all possible commands.

  • help addprob Shows command usage for addprob command.

help command only searches commands' full command word. (i.e. aliases is not supported by help)

4.8.2. Clearing all entries : clear

Clears all entries from AlgoBase.
Format: clear

4.8.3. Exiting the program : exit

Exits the program.
Format: exit

You can press to navigate back or to navigate forward in the command history.

4.8.5. Saving the data

AlgoBase data is saved in the hard disk automatically after any command that changes the data.
There is no need to save manually.

5. FAQ

Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous AlgoBase folder.

6. Command Summary

  • Problems

    • Add Problem : addprob n/NAME [a/AUTHOR] [w/WEBLINK] [d/DESCRIPTION] [diff/DIFFICULTY] [src/SOURCE] [t/TAG]…​
      e.g. addprob n/factorial d/define a function factorial that takes in a number n and returns the factorial of the number t/recursion a/Wee Han

    • List Problems : listprob

    • Edit Problems : editprob INDEX [n/NAME] [a/AUTHOR] [w/WEBLINK] [d/DESCRIPTION] [diff/DIFFICULTY] [src/SOURCE] [t/TAG]…​
      e.g. editprob 2 n/permutations t/

    • Delete Problem : deleteprob INDEX [f/]
      e.g. deleteprob 3 f/

    • Sort Problems : sortprob m/METHOD [ord/ORDER]
      e.g. sortprob m/difficulty ord/ascend

    • Find Problems : findprob [n/NAME] [a/AUTHOR] [d/DESCRIPTION] [src/SOURCE] [diff/LOWER_BOUND-UPPER_BOUND] [t/TAG_KEYWORDS]
      e.g. findprob t/algorithm diff/2.0-4.0

    • Add Find Rule: addfindrule RULE_NAME [n/NAME] [a/AUTHOR] [d/DESCRIPTION] [src/SOURCE] [diff/LOWER_BOUND-UPPER_BOUND] [t/TAG_KEYWORDS]
      e.g. addfindrule MediumDiffAlgo t/algorithm diff/2.0-4.0

    • Apply Find Rule: apply INDEX
      e.g. apply 2

    • Delete Find Rule: deletefindrule INDEX
      e.g. deletefindrule 2

  • Tags

    • New Tag : addtag t/NAME [c/COLOR]
      e.g. addtag t/sssp c/BLUE

    • List Tags : listtag

    • Delete Tag : deletetag INDEX
      e.g. deletetag 3

    • Edit tag : edittag INDEX [t/TAGNAME] [c/COLOR]
      e.g. edittag 1 t/sort c/BLUE

  • Plans

    • Add Training Plan : addplan n/NAME [d/DESCRIPTION] [start/START_DATE] [end/END_DATE]
      e.g. addplan n/CS2040

    • Edit Training Plan : editplan INDEX [n/NAME] [d/DESCRIPTION] [start/START_DATE] [end/END_DATE] [f/]
      e.g. editplan 1 n/training start/2020-02-02 f/

    • Find Training Plans : findplan [n/NAME] [d/DESCRIPTION] [start/RANGE_START] [end/RANGE_END] [task/TASK_NAME]
      e.g. findplan n/CS2040 start/2019-03-01 end/2019-03-31

    • List Training Plans : listplan

    • Delete Training Plan : deleteplan INDEX
      e.g. deleteplan 2

  • Tasks

    • Add Task to Training Plan : addtask plan/PLAN_INDEX prob/PROBLEM_INDEX
      e.g. addtask plan/1 prob/2

    • Copy Task between Plans : copytask task/TASK_INDEX from/PLAN_FROM_INDEX to/PLAN_TO_TASK
      e.g. copytask task/1 from/1 to/2

    • Delete Task from Training Plan : deletetask plan/PLAN_INDEX task/TASK_INDEX
      e.g. deletetask plan/1 task/2

    • Edit Due Date of Task : edittask plan/PLAN_INDEX task/TASK_INDEX due/DUE_DATE
      e.g. edittask plan/1 task/2 due/2019-12-12

    • Mark Task as Done : donetask plan/PLAN_INDEX task/TASK_INDEX
      e.g. donetask plan/1 task/2

    • Mark Task as Undone : undonetask plan/PLAN_INDEX task/TASK_INDEX
      e.g. undonetask plan/1 task/2

    • Move Task between Plans : movetask task/TASK_INDEX from/PLAN_FROM_INDEX to/PLAN_TO_TASK
      e.g. movetask task/1 from/1 to/2

    • Set Current Plan : setplan PLAN_TASK
      e.g. setplan 10

  • Tabs

    • Switch Tab : switchtab tt/TAB_TYPE i/TAB_INDEX
      e.g. switchtab tt/display i/3

    • Open Tab : opentab m/MODEL_TYPE i/TAB_INDEX
      e.g. opentab m/problem i/2

    • Close Tab : closetab i/DETAILS_TAB_INDEX
      e.g. closetab i/3

  • Storage

    • Exporting data : export format/FORMAT path/DIRECTORY_PATH
      e.g. export format/json path/.

    • Importing data : import format/FORMAT path/FILE_PATH
      e.g. import format/json path/./steven_halim_secret.json

  • Miscellaneous

    • Help : help [COMMAND_WORD]

    • Clear : clear

    • Exit : exit