| 
									
										
										
										
											2020-01-09 12:11:34 +01:00
										 |  |  | """
 | 
					
						
							|  |  |  | Question utils functions | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import pathlib | 
					
						
							|  |  |  | from random import choice | 
					
						
							|  |  |  | from typing import List | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | p = pathlib.Path(__file__).parent.parent.joinpath('README.md') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_file_list(): | 
					
						
							|  |  |  |     with open(p, 'rb') as f: | 
					
						
							|  |  |  |         file_list = [line.rstrip() for line in f.readlines()] | 
					
						
							|  |  |  |     return file_list | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_question_list(file_list: List[bytes]) -> list: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     questions_list = [] | 
					
						
							|  |  |  |     temp = [] | 
					
						
							|  |  |  |     after_summary_tag = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for line in file_list: | 
					
						
							|  |  |  |         if line.startswith(b'<details>'): | 
					
						
							|  |  |  |             temp.append(line) | 
					
						
							|  |  |  |             after_summary_tag = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         elif after_summary_tag and line != b'' and b'</details>' not in line: | 
					
						
							|  |  |  |             temp.append(line) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         elif after_summary_tag and b'</details>' in line: | 
					
						
							|  |  |  |             temp.append(line) | 
					
						
							|  |  |  |             after_summary_tag = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             questions_list.append(temp) | 
					
						
							|  |  |  |             temp = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return questions_list | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_answered_questions(question_list: List[List[bytes]]) -> list: | 
					
						
							|  |  |  |     """Dont let the type hint confuse you, problem of not using classes.
 | 
					
						
							|  |  |  |      It needs the result of get_question_list(file_list) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      Returns a list of questions that are answered. | 
					
						
							|  |  |  |      """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     t = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for q in question_list: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         index = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for i in q: | 
					
						
							|  |  |  |             if b'</summary>' in i: | 
					
						
							|  |  |  |                 index = q.index(i) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if q[index+1: len(q) - 1]: | 
					
						
							|  |  |  |             t.append(q) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return t | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_challenges_count() -> int: | 
					
						
							|  |  |  |     challenges_path = pathlib.Path(__file__).parent.parent.joinpath('challenges').glob('*.md') | 
					
						
							|  |  |  |     return len(list(challenges_path)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # WIP WAITING FEEDBACK | 
					
						
							|  |  |  | def get_random_question(question_list: List[List[bytes]], with_answer=False): | 
					
						
							|  |  |  |     if with_answer: | 
					
						
							|  |  |  |         return choice(get_answered_questions(question_list)) | 
					
						
							|  |  |  |     return choice(question_list) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-09 12:18:19 +01:00
										 |  |  | """Use this question_list. Unless you have already opened/worked/need the file, then don't or
 | 
					
						
							| 
									
										
										
										
											2020-01-09 12:11:34 +01:00
										 |  |  | you will end up doing the same thing twice. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-09 12:18:19 +01:00
										 |  |  | eg: | 
					
						
							| 
									
										
										
										
											2020-01-09 12:11:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #my_dir/main.py | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from scripts import question_utils | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print(question_utils.get_answered_questions(question_utils.question_list) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | >> 123 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | question_list = get_question_list(get_file_list()) |