- Use this tool when you want to fairly conduct a sign-up (or request) process for any reason. For this tool, options chosen for requesting are not ranked-choice. Thus, all requested choices will be equally considered into the algorithm's auto-assigning process. - Instructions are self-explanatory except for the "Random-assign leftover" setting. When it is impossible for any of a requester's choices to be assigned, turning this setting on permits the algorithm to randomly assign an unrequested option still available (if any) to them. When this setting is off or when there simply is a preset total number of available spots less than the total number of requesters, those unlucky ones are assigned to "N/A". - You can import data from an online (MS or Google) form through ".txt" files on Windows. First, manually input all the options and their availability into this tool. Then, copy & paste the "requester name" and "option #s" columns into separate ".txt" files. Then, click "see inside" on this project. Import the files into the corresponding "requester" and "chosen" lists. - If you would like to use the ranked choice edition, please use this tool: https://scratch.mit.edu/projects/1001676719/ - Limits to the capacity of this tool: 3 to 99 options, 3 to 200,000 requesters, customizable maximum choice limit of 1 to 99 choices per requester, and a slight algorithmic decision to favor choices of requesters that signed up earlier for the use of "Random assign leftover?" setting. - The paragraph below explains precisely how the algorithm functions in a chronological process: 1. add up all availabilities of each requester's chosen options into "# sum" list. 2. requesters with lesser value in "# sum" are sorted higher on a separate list "# priority". 3. add up all # of requests per option into "# requests" list. 4. on a separate list "# overbook", calculate for each option: "# overbook" = "available slots" - "# requests". 5. sort option # from most overbooked to least overbooked on a separate list "# competition". 6. check whether requester at item 1 of "# priority" list has chosen an option still left, beginning to scan from the top of the "# competition" list. Remove requester from the "# priority" list. 6A. if an option chosen by the requester is available while scanning, assign the option to requester. Subtract 1 from "available slots" list and add 1 to "# taken" list of that option #. If "available slots" for the option becomes zero, remove option from "# competition" list. Unless "# priority" list is empty, go back to step 6 to repeat. 6B. if no option chosen by a requester is available after checking all options on the "# competition" list, add the requester to a RANDOM ROW on the separate "# leftover" list. Unless "# priority" list is empty, go back to step 6 to repeat. 7. only if "Random-assign Leftover" setting is on and "# leftover" list is not empty after all of "# priority" has been checked (& assigned when available): from the top of "# leftover", randomly assign an available option from "# competition" list. Subtract 1 from "available slots" list and add 1 to "# taken" list of that option #. If "available slots" for the option becomes zero, remove option from "# competition" list. Remove this requester from the "# leftover" list. Repeat this step until either "# priority" is empty or "# competition" is empty. 8. if no more slots remain (meaning "# competition" list becomes empty) but "# leftover" list is not empty, assign all of those requesters to option titled "N/A", which means unassigned. - Version 1.1: Last updated on Dec. 16, 2025.