@@ -68,71 +68,74 @@ def get_random_study_plan_problem(slug: str) -> Optional[Dict[str, Any]]:
6868 return cached_api .fetch_problem (problem ["titleSlug" ])
6969
7070
71+ def create_and_solve_handler (
72+ problem_slug , code_snippets , difficulty_label , args
73+ ):
74+ # Determine the starter code based on the chosen language
75+
76+ code = ""
77+ for item in code_snippets :
78+ if item .get ("lang" ).lower () == args ["language" ].lower ():
79+ code = item .get ("code" )
80+ break
81+
82+ if not code :
83+ log (
84+ f"Starter code not found for language: { args ['language' ]} " ,
85+ LogLevel .ERROR ,
86+ )
87+ return
88+
89+ handler = SolutionHandler (
90+ problem = problem_slug ,
91+ code = code ,
92+ difficulty = difficulty_label ,
93+ editor = args ["editor" ],
94+ language = args ["language" ],
95+ time_limit = args ["time_limit" ],
96+ )
97+ handler .solve ()
98+
99+
100+ def open_in_browser (url , open_flag ):
101+ if open_flag :
102+ import webbrowser
103+
104+ webbrowser .open (url )
105+
106+
107+ def log_problem_details (problem , difficulty_label , url ):
108+ log (f"🎯 Problem Selected: { problem .get ('title' , 'Unknown' )} " , LogLevel .INFO )
109+ log (f"✨ Difficulty: { difficulty_label } " , LogLevel .INFO )
110+ log (f"🔗 URL: { url } " , LogLevel .INFO )
111+
112+ topic_tags = problem .get ("topicTags" , [])
113+ if topic_tags :
114+ tags = ", " .join (tag .get ("name" , "Unknown" ) for tag in topic_tags )
115+ log (f"🏷️ Tags: { tags } " , LogLevel .INFO )
116+
117+ ac_rate = problem .get ("acRate" )
118+ if ac_rate is not None :
119+ log (f"📈 Acceptance Rate: { ac_rate :.2f} %" , LogLevel .INFO )
120+
121+ # Assuming `content` is the Markdown content
122+ content = problem .get ("content" )
123+ if content :
124+ try :
125+ html_content = markdown .markdown (content )
126+
127+ text_maker = html2text .HTML2Text ()
128+ text_maker .ignore_links = True
129+ plain_text = text_maker .handle (html_content )
130+
131+ log (plain_text , LogLevel .INFO )
132+ except Exception as e :
133+ log (f"Failed to convert problem content: { str (e )} " , LogLevel .ERROR )
134+
135+
71136class PracticeMode :
72137 def __init__ (self ):
73138 pass
74139
75140 def handle (self , args ):
76141 raise NotImplementedError ("This method should be implemented by subclasses." )
77-
78- def log_problem_details (self , problem , difficulty_label , url ):
79- log (f"🎯 Problem Selected: { problem .get ('title' , 'Unknown' )} " , LogLevel .INFO )
80- log (f"✨ Difficulty: { difficulty_label } " , LogLevel .INFO )
81- log (f"🔗 URL: { url } " , LogLevel .INFO )
82-
83- topic_tags = problem .get ("topicTags" , [])
84- if topic_tags :
85- tags = ", " .join (tag .get ("name" , "Unknown" ) for tag in topic_tags )
86- log (f"🏷️ Tags: { tags } " , LogLevel .INFO )
87-
88- ac_rate = problem .get ("acRate" )
89- if ac_rate is not None :
90- log (f"📈 Acceptance Rate: { ac_rate :.2f} %" , LogLevel .INFO )
91-
92- # Assuming `content` is the Markdown content
93- content = problem .get ("content" )
94- if content :
95- try :
96- html_content = markdown .markdown (content )
97-
98- text_maker = html2text .HTML2Text ()
99- text_maker .ignore_links = True
100- plain_text = text_maker .handle (html_content )
101-
102- log (plain_text , LogLevel .INFO )
103- except Exception as e :
104- log (f"Failed to convert problem content: { str (e )} " , LogLevel .ERROR )
105-
106- def open_in_browser (self , url , open_flag ):
107- if open_flag :
108- import webbrowser
109-
110- webbrowser .open (url )
111-
112- def create_and_solve_handler (
113- self , problem_slug , code_snippets , difficulty_label , args
114- ):
115- # Determine the starter code based on the chosen language
116-
117- code = ""
118- for item in code_snippets :
119- if item .get ("lang" ).lower () == args ["language" ].lower ():
120- code = item .get ("code" )
121- break
122-
123- if not code :
124- log (
125- f"Starter code not found for language: { args ['language' ]} " ,
126- LogLevel .ERROR ,
127- )
128- return
129-
130- handler = SolutionHandler (
131- problem = problem_slug ,
132- code = code ,
133- difficulty = difficulty_label ,
134- editor = args ["editor" ],
135- language = args ["language" ],
136- time_limit = args ["time_limit" ],
137- )
138- handler .solve ()
0 commit comments