style textarea border 1px solid green display inline resize none style script let nx 2 let ny 3 for let y 1 y ny 1 y for let x 1 x nx 1 x let t document createElement textarea document body appendChild t t value t style background color orange t x x t y y t onclick e selectcell e t x y t oninput e selectcell e t x y t onkeypress e inputcellcell e t x y t classList add cell corners if x 0 y 0 x nx 1 y ny 1 x 0 y ny 1 x nx 1 y 0 t classList add cornercell t style background color transparent t value continue left or right if x 0 x nx 1 t style background color yellow t classList add xcell continue top or bottom if y 0 y ny 1 t style background color blue t classList add ycell continue middle t style background color gray t classList add bodycell t setAttribute maxlength 1 const characters ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 const randChar characters charAt Math floor Math random characters length t value randChar next line if x nx 1 document body appendChild document createElement br function selectcell e t x y console log selectcell x y update function inputcellcell e t x y if t className bodycell let charCode e keyCode let ascii String fromCharCode charCode if ascii matchAll a zA Z0 9 g length 0 t value ascii console log charCode update function update let cells document getElementsByClassName bodycell let xcells document getElementsByClassName xcell let ycells document getElementsByClassName ycell console log cells length cells cells xcells xcells ycells ycells cells forEach c let left xcells filter cc return cc x 0 cc y c y 0 let ss cells forEach ca if ca y left y ss ca value try let re new RegExp left value console log left left value console log ss ss let res ss match re if res res 0 length ss length left style background color green else left style background color orange catch e let right xcells filter cc return cc x nx 1 cc y c y 0 let ss cells forEach ca if ca y right y ss ca value try let re new RegExp right value console log right right value console log ss ss let res ss match re if res res 0 length ss length right style background color green else right style background color orange catch e let top ycells filter cc return cc y 0 cc x c x 0 let ss cells forEach ca if ca x top x ss ca value try let re new RegExp top value let res ss match re if res res 0 length ss length top style background color green else top style background color orange catch e let bottom ycells filter cc return cc y ny 1 cc x c x 0 let ss cells forEach ca if ca x bottom x ss ca value try let re new RegExp bottom value let res ss match re if res res 0 length ss length bottom style background color green else bottom style background color orange catch e update console log ready script
cells xcells xcells ycells ycells cells forEach c let left xcells filter cc return cc x 0 cc y c y 0 let ss cells forEach ca if ca y left y ss ca value try let re new RegExp left value console log left left value console log ss ss let res ss match re if res res 0 length ss length left style background color green else left style background color orange catch e let right xcells filter cc return cc x nx 1 cc y c y 0 let ss cells forEach ca if ca y right y ss ca value try let re new RegExp right value console log right right value console log ss ss let res ss match re if res res 0 length ss length right style background color green else right style background color orange catch e let top ycells filter cc return cc y 0 cc x c x 0 let ss cells forEach ca if ca x top x ss ca value try let re new RegExp top value let res ss match re if res res 0 length ss length top style background color green else top style background color orange catch e let bottom ycells filter cc return cc y ny 1 cc x c x 0 let ss cells forEach ca if ca x bottom x ss ca value try let re new RegExp bottom value let res ss match re if res res 0 length ss length bottom style background color green else bottom style background color orange catch e update console log ready script