@@ -44,10 +44,14 @@ <h3>Log</h3>
4444 for ( let i = 0 ; i < 81 ; i ++ ) { cells [ i ] . value = v [ i ] ?String ( v [ i ] ) :'' ; }
4545 }
4646
47+ const PYODIDE_INDEX_URL = "https://cdn.jsdelivr.net/pyodide/v0.26.1/full/" ;
4748 let pyodideReady = ( async ( ) => {
48- const py = await loadPyodide ( ) ;
49- await py . loadPackage ( [ ] ) ;
50- const code = `
49+ try {
50+ log ( "Downloading Pyodide runtime..." ) ;
51+ const py = await loadPyodide ( { indexURL : PYODIDE_INDEX_URL } ) ;
52+ log ( "Initializing solver..." ) ;
53+ await py . loadPackage ( [ ] ) ;
54+ const code = `
5155from typing import List, Tuple
5256def col_cell(r, c): return r*9 + c
5357def col_row(r, v): return 81 + r*9 + (v-1)
@@ -134,14 +138,26 @@ <h3>Log</h3>
134138 return g
135139def clues_from_grid(g):
136140 return [(r,c,g[r][c]) for r in range(9) for c in range(9) if g[r][c]!=0]
137- ` ) ;
138- py . runPython ( code ) ;
139- return py ;
141+ ` ;
142+ py . runPython ( code ) ;
143+ log ( "Pyodide ready. Enter digits and press Solve." ) ;
144+ return py ;
145+ } catch ( err ) {
146+ console . error ( "Failed to load Pyodide" , err ) ;
147+ log ( "Failed to load Pyodide. See console for details." ) ;
148+ throw err ;
149+ }
140150 } ) ( ) ;
141151
142152 function log ( msg ) { logEl . textContent = msg ; }
143153 document . getElementById ( 'solveBtn' ) . onclick = async ( ) => {
144- const py = await pyodideReady ;
154+ let py ;
155+ try {
156+ py = await pyodideReady ;
157+ } catch ( err ) {
158+ log ( "Pyodide is not available." ) ;
159+ return ;
160+ }
145161 const v = readGrid ( ) ;
146162 log ( "Solving..." ) ;
147163 py . globals . set ( "vals" , v ) ;
@@ -161,7 +177,13 @@ <h3>Log</h3>
161177 log ( "Solved. Solutions=" + cnt ) ;
162178 } ;
163179 document . getElementById ( 'clearBtn' ) . onclick = ( ) => { writeGrid ( Array ( 81 ) . fill ( 0 ) ) ; log ( "Cleared." ) ; } ;
164- document . getElementById ( 'sampleBtn' ) . onclick = ( ) => {
180+ document . getElementById ( 'sampleBtn' ) . onclick = async ( ) => {
181+ try {
182+ await pyodideReady ;
183+ } catch ( err ) {
184+ log ( "Cannot load sample because Pyodide failed to initialize." ) ;
185+ return ;
186+ }
165187 const s = ( "53..7...." + "6..195..." + ".98....6." + "8...6...3" + "4..8.3..1" + "7...2...6" + ".6....28." + "...419..5" + "....8..79" ) ;
166188 const arr = [ ...s ] . map ( ch => ch === '.' ?0 :parseInt ( ch , 10 ) ) ; writeGrid ( arr ) ; log ( "Loaded sample." ) ;
167189 } ;
0 commit comments