diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2d21cb3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +__pycache__/ +*.py[cod] +*$py.class + +.vscode/ +.idea/ + +env/ +venv/ +*.venv +*.env + +*.json diff --git a/README.md b/README.md index 8022e4d..e3f803d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,51 @@ -# secret-santa +### Secret Santa +Simple `python3` script for the "Secret Santa" game. Creates participants pairs from input json file and prints and saves them to the output json file. +This small script might evolve into a simple website, API or `bash` script in the future! -"Secret Santa" game python script. Might evolve into simple website, API or bash script. \ No newline at end of file +### Run: +- Create `participants.json` file as in the example +- Run the next command in your shell (from the same directory as the `main.py` file): +```sh +python3 main.py +``` +- Enjoy script results! + +### Examples: +- Input file (`participants.json`): +```json +[ + "Jayce", + "Viktor", + "Jinx", + "Vi", + "Ekko", + "Caitlyn" +] +``` + +- Output file (`pairs.json`): +```json +{ + "Jayce": "Vi", + "Vi": "Viktor", + "Viktor": "Caitlyn", + "Caitlyn": "Jinx", + "Jinx": "Ekko", + "Ekko": "Jayce" +} +``` + +- Console output: +``` +Reading from participants.json. +Writing to pairs.json. +Finished! + +Results: +Jayce → Vi +Vi → Viktor +Viktor → Caitlyn +Caitlyn → Jinx +Jinx → Ekko +Ekko → Jayce +``` diff --git a/main.py b/main.py new file mode 100644 index 0000000..f6ff852 --- /dev/null +++ b/main.py @@ -0,0 +1,47 @@ +import copy +import json +import os +import random + + +def create_pairs_dict(lst: list[str]) -> dict[str, str]: + result = {} + lst_len = len(lst) + + if lst_len < 2: + print("\033[1;31mList length should be at least 2!\033[0m") + raise RuntimeError + + for i in range(lst_len - 1): + result[lst[i]] = lst[i+1] + result[lst[lst_len-1]] = lst[0] + + return result + + +# Main +input_file = "participants.json" +output_file = "pairs.json" + + +if os.path.isfile(input_file): + print(f"\033[1;33mReading from {input_file}.\033[0m") + with open(input_file, "r", encoding="utf-8") as f: + participants_list = json.load(f) +else: + print("\033[1;31mNo input file found! Please create participants.json file.\033[0m") + participants_list: list[str] = ["1", "2", "3", "4"] + +shuffled_list = copy.copy(participants_list) +random.shuffle(shuffled_list) +pairs = create_pairs_dict(shuffled_list) + +print(f"\033[1;33mWriting to {output_file}.\033[0m") +with open(output_file, 'w', encoding='utf-8') as f: + json.dump(pairs, f, ensure_ascii=False, indent=4) + +print("\033[1;32mFinished!\033[0m") + +print("\nResults:") +for giver, receiver in pairs.items(): + print(f"{giver} → {receiver}")