Python app for Software development class. Test with pytest and nox.
HEHEHEHA:
......................................................................................................................................................
.................................................................::::^^^!!77???J7:.....^::..........................................................
..........................................................:7YY5PPGGGBBB####&&&&&#....YBBP5J7~^:....................................................
...................................................:^^....!7!!!!!!7B##5...J###P?J5GB##&&#BGPY?!^.........................................
...............................................^YB#&###J...G#B^.::.:~~~~!!!!!!!!G##BY??G###J!!!!7?JYPGB#####B7........................................
.............................................^YB###G###B^..P##?....:~~~~!7!!!!7!5###BB####B7!!!!!!!!!!7?Y###&?........................................
...........................................#&&BY?YGBBGGGGGGPP55P###Y...#####&&#BG5J7~^:..............................................
.................................................^JGBB5:..^B##...:!YB###PJ7P###5?5###G^:::~~~~~!!!!!!!!Y##BJ?5###5!777!!!!7!!!!J###G^........................................
................................................................................
........................................!######################BGJ!!!!!7777777777777!?PB####################&B:.......................................
........................................:G#############BBGGP5YJ?7!77!!77J5PGGP5J77!!7!!7J5PBB###############&J........................................
.........................................YB###P?!!!J####BGP##B!~~~~~~~~~!7!!!!!J###J?G###?!7!!!!!7!!!!7G###7.........................................
.......................................:..........................................
.........................................!G&&&&&&&B:.Y&#&GJJJYY5Y?!!!!!!!!!!!!!!!!777YGGGPYJ?7!?B&&B5#&&&&#GJ:........................................
........................................^G&######&G7P&######&&&&&#?!7777!!7!7777777!Y&&&&&&&#BGPP##&&######&&5........................................
........................................!##########&&####&######&#?!777777777777777!P#######&&&&&###########&#^.......................................
........................................7################&######&B7!777777!!!!77777!JB######################&#YB###P?!!!!!!P###57J###7~~~~~~~~~!7!!!!!?###PY###P!!!7!!!!7!!!!Y###P:.........................................
.....................................................................................
..............................................!B###5!!7!!77JYYYYYYYYJJJJJJYYYJJJJJJYJJJJJJJYYYYYG###Y.................................................
...............................................5####P?!!!!!!!!J###G?J###J~~~~~~~~~!7!!!!!75B######?!!!7!!!!77!!7B###!..........................................
...................................:Y###BP?!!!!!!!!!!7P###PG###?~~~~~~~~~!7!!!!7!!7JYY55J!!!7!77!!!!!!5###5...........................................
...................................^G###P!!!!!!!!!!!7!?#####BP?~~~~~~~~~~~!!!!!!!!!!!!!!!!!!!!!!!77!!?B##B...........................................
....................................G###5!!!!!!!!!!!!!?55Y?!~~~~~~~~~~~~~!7!!77777!!!!!!!!!!!!!!77!!P###J............................................
.....................................^G###P7!!!777!777!!!!!!!~~~~~~~~~~~~~!7!!!!!!!!!!!!!!!!!!!!!!!!J###B^............................................
......................................^P###P7!!!!!!7!!!777!77!~~~~~~~~~~~~~!777!!7!!!!!!!!!!!!!!7!!7G###?.............................................
.......................................:5###G7!!77!!!77777!!7!~~~~~~~~~~~~~!!77!!!!!!!!!!!!!!!!!!!!J###G:.............................................
........................................:Y###G?!!!!!!!!!!!!!!7!~~~~~~~~~~~~!7!!!!!!!!!!!!!!!!!!!7!7G###7..............................................
..........................................J###B?!!!!7!!!!!!!!7!~~~~~~~~~~~~~!!!!!!!!!!!!!!!!!!!7!!Y###P:..............................................
...........................................?###BJ!7!7!!!!!!!!!!!~~~~~~~~~!!!777777777777!!!!!!7!!7B###!...............................................
............................................7###BJ!!7!!!!!!!!!!!!!7??JJYYYYYYYYYYYYYYYYJJJ?77!!!5###5................................................
.............................................7B###Y!!!!!!!!!77?JYYYYYYYYYYYYYYJJYYYYYYYYYYYYYYJ??B##BB###57!7JYYYYYYJJJYJYYJJYJYJYYYYJJJJJJJJJJJJJJJ5###G^.................................................
................................................?J?7G###PJYYYYJJJJJJJJJJJJJJJJJJJJJJJYYYYYYY5555PB###G..................................................
.................................................^P###GYJJJYYYYYYY55555PPPPGGGGBBBB####&&&&&&&&#&5:...................................................
..............................................:::.:Y###BGPBB####&&&&&&&&&&&#####BBBGGPPP55YYY5B&&B!...................................................
..........................................:7YPBBGP7.Y##&&#BGGGPPP555YYJJJ????77777!!!!!!!!!!!7B&&B.5GG####G5YYJ???77777!!777!?PY!777777777!JJ!77!7777?JYPGGB#########Y:........................................
...........................................#&##################GPPPP5555YYYYPB##BG55JJJ???JJJJJJJJJJJJJYPGGGGB###BG5555PPPPPGGGGBBB####################Y..................
.......................P&#&&##############################GYYJJJJJJJJJJJJJJJJJJJJJJ?????JY55G######################################!..................
.......................^B&&&&#############################GYYYYYYJJJJJJJJJJJJJJJJJJJJYYYYYYYYG###################################&B^..................
........................P###Y77777777777777777!7B&5!7!!!!!777!5G7!777777777777??JY5B##B!..........................................
..........................................!B##BJ777?YYYJ?777777777!J##5!77777777775#?!77777777777777777Y###?..........................................
........................................:J###P777?P#####BP?7777777!Y##5777777777775#J!7777777?JYPPP5J777Y###?.........................................
.......................................^P###5777JB&########5777777!Y##Y77777777777Y#Y!77777?5B#######P77!5###?........................................
...........................:^!?Y5PPP55YB##BJ!77JBBGGGB######P7!777!Y##J77777777777Y#Y!7777YB##########P7775###?..?JY555P555YJ7!^.....................
........................^!YGB############G?!777?77!!!7?YPB###J!777!Y##J77777777777J#Y!77!5####BBGPPPGB#Y777P###7!###############BP?:..................
......................:YB################Y!7777!!!!7JYYYJJ5G#5!777!Y#B?77777777777J#Y!!!?BGPYJ??77!!!7??7777P##BG#################&5:.................
......................!&&################G7!777777777JJYYY?7??!!!!!Y&P777777777777?#Y!!!777J5PGPPY7!7!!!7!!!7G#####################G:.................
......................7&##################P!!!!!!!!!!!!!!7?Y5PPPJ77JGJ777777777777?BG55PPGP5Y?77!!!!!!!!!7777?B####################G:.................
......................G&#########&##&&##################BGPP555YYYYYYYYYYYYYYYYYYYYY5555PGB##########################&######&...................
.........................^5&##&&&&&&##############################BBBBGGGGGGGGGGGGGBBBB################################&#&######P!....................
..........................Y&&####B####&&&&&&&&&&&&&&&&&&&&&&&&############################&&&&&&&&&&&&&&&&&&&&&&&&&&#########&#?......................
........................^P&##BGGGJ^~~~!!77??JJJYPGGGPPPPPPPGGGGBBBBBBB##############BBBBBBBBBBBBGBBBGPP555YYJJ???77!5GGGGPB##&&B?.....................
......................:J#&###BGGGGJ:............!YY7.......::::::::::^^^.:.................:JYY^.........:!5GPPPPPPPPGB######&#Y^................
..................!G&&#######GGGGGGGGGBG5J!^:...:JYJ:.:.................:?YY~.:.................:JYJ:......:YYY?^^^^^^^^^::::::::::^JYY.............:?PGPPPPG####&&5^...................
.....................!G&&####GGGGGBP7:..........YY?:...................:JYY!...................:JYY^...........:75GPPPPPPG#####&&B7..................
...................:Y#&&#####GGGGGGGBP?:.......^YYJ:.................:.:?YY7YPPPPPPPPPPPPB#######&&G!...............
................:J#&#########GGGGGGGGGGGGBGG5J7^?YJ:....................?YY^...................:JY?..:^7J5PPPPPPPPPPPPPPG##########&#Y:.............
.........................
...........!B&###############BGGGGGGGGGGGGGGGGGGGGGGGGGPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP################&7..........
..........:B&#################GGGGGGGGGGGGGGGGGGPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPG###############&B^..........
..........:P&&################BGGGGGGGGGGPPPPPPPPPPPPPPPPPPPPPPPPPPGGGGGGGGGGPPPGGGGGGGGPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPB##############&#!...........
...........:Y#&################GPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPGGGGGGGGGGGGPPPPGGGGGGGGGGPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPG##############&B!............
.............P&&##########GGGGGGGGGGGGGGGGBBGGPPP?!^:::..............7YJ:................:::Y5Y?Y55PPPPPPPPPPPPPPPPPPG###########&&G!............
..............?#&############BGGGGGGGGGGGGGGGGGGGGGGGGGPP5YYJ?7!!~~~^^^^^?5Y^^^~~~~~!77??JJYY55PPPPPPPPPPPPPPPPPPPPPPPPPPB#############...........
............^5&&#############BGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPB##############&#P&&##############BGPPPPPPPPPPPPPPPPPPPPPPPPPPPPGGGGGGGGGGGGGGPPPPPGGGGGGGGGGP55555PPPPPPPPPPPPPPPPPPPPPPPG#############&&G^.............
..............:7G&&#############B5YGGPPPPPPPPPPPPPPPPPPPPP55PPPPPPPGGGGGGGGPPPPPGGGGGGP55YYYYYYYYYY555PPPPPPPPPPPPPPP5PB############&&5:..............
................:?B&&&###########G!J5PPPPPPPPPPPPPPPP55YYYYYYYYYYYYYY55PPPPPPGGGGGP5YYYYYYYYYYYYYYYYYYPPPPPPPPPPP5J!!G#########&##&#J:...............
..................^JB&&###########G~.:7J5PPPPPPPPPPP5YYYYYYYYYYYYYYYYYYYYYY5PGGGPYYYYYYYYYYYYYYYYYYYYY5PPPPPP5J7:.G############&B7.................
....................^J#&###&########J:...:!?JY5PPPPPP5YYYYYYYYYYYYYYYYYYYYYYYY5YYYYYYYYYYYYYYYYYYYYYYY5P5J?!::...7B########&###&P^..................
......................P&#&&##########P.......:^^75Y?JJJJYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYJJ??JY?^::......^5########&####&J....................
.....................J##&B#&&##########Y^.......:?Y!..:::^^~~~!!7777???????JYYYJJJ??????77!!~~~^^::..7YJ:......:7B###########&&#&J....................
....................7##&B55G#&&#########BJ^.....7YJ:.::....................^YYY!.::................:.YY7.....#&YYY5P#&&##&######BY!:.!YY!.:......................^YYY!.....................:JYY^.:!5###########&&#PYP##&G:..................
..................^G&&#PYYYYYY5P#&&##########GY5YJ:........................:JYY!.:..................:.7YYJ?P###########&&#G5YYYP&#&Y..................
.................:P&&&P?JYYYYYYY5PB&&&#&&#######BP7^:......................:JYY!.....................:7PG############&&#G5YYYJ??B&&&7.................
.................Y&#&G???JYYYYYYYYYPB#&&###########BPY7~:..................:?YY!.................:^!JP#############&&#G5YYYJ????J#&&B^................
................?&#&BJ??????JYYYYYYYY5G#&&&#############G5J7~^:.............?YY!...........::^!?YPB##############&#BP5YYYJ???????5&&&P:...............
...............7#&&#J?????????JYYYYYYYY5PB#&&################BGPYJ?7!P###########&&B##&#...................
...................^^^^^J557^^^!!7?Y5PGB################&&#GPYYYJJ??????????G&#&J...............
..............B&#&5????????????JYYYYYYYYY5GB#&&#######################BBBBBB##BBB####################&####&&#BP5YYYJ?????????????J#&&#!..............
.............:G&####BPYJ??????????JYYYYYYYYYYPG##&&####################################################&&&#BP5YYYJ?????????????J5G#&&#&G:.............
............:5&&&G5PG###BP5J?????????JYYYYYYYYY5PG#&&&##############################################&&&#BP5YYYJJ???????????J5GB##BGPB&#&Y.............
............J&&&BYYYYY5PB###BG5J???????JYYYYYYYYYY55GB#&&#########################################&&#BP5YYYJJ??????????J5GB##BGP5YYYYB&&&7............
...........7&&YYYYYYYYY5PG####GPYJ?????JYYY55YYYJJY5PB#&&&#################################&&&#BP55YYJJ????????JYPG###BGP5YYYYYYYY5#&&B^...........
..........!#&YYYYYYYYYYYYYY5PGB###BG5YJ????JYY5YJJJJJJYPG##&&##########################&&&##G5YJJYJJ??????JYPGB###BG5YYYYYYYYYYYYYYP&#&P...........
.........^B&##PYYYYYYYYYYYYYYYYYYYY5PGB###BG5YJ??J??JJJJJJJJY5PB#&&&##############&####&&&#BP5YJJ?77??JY5PB####BGP5YYYYYYYYYYYYYYYYYYYB&#&J..........
........:P&&&GYYYYYYYYYYYYYYYYYYYYYYYYYY5PGB####BGY?777??JJJJJJJYPG##&&&############&&&#BPYJJJ?777?YPB####BBPP5YYYYYYYYYYYYYYYYYYYYYYYY5#&&#!.........
........5&&&GYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY5PGBB###BGP5YYYYJJJJJJJYPG############&#G5YYY5PGGGB####BGPP5YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYP##&G:........
.......J&#&BYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY55PGBB#####BBGPPPP555PB##&&&&&###BBBB####BBGGP55YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYG&#&Y........
......7#&##5YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY555PGGBBB####BBBBB###BBBGGGPP555YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYB&.......
.....#&&#PYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY5#&&B^......
....:P&##PYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYP##&5:.....
....?&#&#PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPG#&&&.....
....^G&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&#B##BBBBBBB#GBG#B#B#BB&###B5^:::..
.....:!?JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ????77???77?77??7???7????7~:::::..
......................................................................................................................................................