Build a PHP/SQL web app based on the Quicksort algorithm with super simple user interface. It imports a two column CSV, uses the QuickSort algo and the user to make comparisons, then exports CSV once it's been sorted. It can also save files that are not completed sorting for finishing the work later. The goal is to guide the user into sorting through a list in the most efficient way possible vs. staring at a huge list in a CSV. If you have a suggestion for an algo better than Quicksort or a modification to Quicksort, I would be quite open to that.
Input: A CSV file as described below...
I'd like to have in the CSV 2 columns with these headers
2) Urgency rank
- Task is just a list of stuff to do like, clean the house, mow the yard, feed the dog
- Urgency rank is a sequence of numbers starting at 1, and whatever task is in the top position has a value of 1, whatever is last has a value of 30, e.g., if there are 30 tasks total listed in the CSV...this is just like alphebetizing a list of books in a way.
But instead of having the algo compare whether two letters are in the wrong order, a human UI asks using a human to compare pairs of tasks (defined by the QuickSort algo), to help most efficiently sort through the list. So the UI is a simple web app that has these functions:
- Opening screen with a button that says "Import CSV"
- Upon clicking it you can upload a CSV
- The CSV is assumed to have two headers in the first to positions
- Next after successfully importing the CSV, there appears a UI that asks the user, "Which task is more urgent?"
- The user clicks one of the two
- Each time the user clicks, that sequencing information is passed back to the Quicksort algo, just as it would if it learned that the letter F needs to go before P if it were alphebetizing.
- The UI continues asking the user these questions until the entire list is sorted.
- On top of the UI, there is a progress note, that says, "You are approximately X% finished sorting this list and it will take you a total of Y minutes to finish, assuming you take Z seconds per decision"
- After the list is sorted, it says, "Congratulations! You have sorted the whole list!" and there appears a file name to export.
- The file name is automatically named as whatever the input name was concatonated with the date formatted as "MM_DD_YYYY_sorted"
- The last action for the user to take is to click on the file and download the CSV.
- The processed CSV will have the list of tasks, but the "urgency rank" column will have values according to how the user has sorted them.
SAVE AND FINISH LATER SETTING
- In the case that the user cannot complete an entire sorting in one sitting, always in the UI there is a button that says "Save and finish later"
- So on the homescreen there are actually two buttons: "Import CSV" & "Finish a sort"
- If the user clicks "Finish a sort" he sees a list of files.
- The files are named whatever the import CSV was named concatonated with "MM_DD_YYYY_HH_MM_unfinished" with HH meaning 24 hours and MM meaning minutes from the server clock.
- Upon clicking on any unfinished file, the user can continue sorting and pick up where he left off.
TESTING AND PRODUCTION
- I'd like you to build and test this on your own test server.
- Once you're finished, I'll do QA and user acceptance testing.
- Once I accept it, the final step will be I'll give you credentials to my shared server and you install it on my shared server (which is a PHP/SQL)
FYI, NEXT PROJECT PHASE
The project will have ended per the above, but just so you know, after this has gone successfully, I want to continue the project by going onto phase 2. That will be to take a CSV processed by urgency and then do the same thing with "importance"...the user does the exact same thing, but the UI asks him to process by importance, which also uses the QuickSort algo.