/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . it ach i 1 7 0 6 . dro ide g gs . QE gg . E aster E gg . quares Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . graphics . drawable . Icon Ċ import Ġandroid . os . Parcel Ċ import Ġandroid . os . Parcelable Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġjava . util . ArrayList Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . round Ċ Ċ @ Requires Api ( 2 3 ) Ċ class ĠQu are ( val Ġwidth : ĠInt , Ġval Ġheight : ĠInt , Ġval Ġdepth : ĠInt ) Ġ: ĠParcel able Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdata : ĠInt Array Ġ= ĠInt Array ( width Ġ* Ġheight ) ĊĠĠĠ Ġprivate Ġval Ġuser : ĠInt Array Ġ= Ġdata . copyOf () ĊĠĠĠ Ġprivate Ġfun Ġload And Quant ize ( bitmap 8 bpp : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbitmap 8 bpp . get Pixels ( data , Ġ 0 , Ġwidth , Ġ 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġif Ġ( depth Ġ== Ġ 8 ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġ( 2 5 5 f Ġ/ Ġdepth ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġf Ġ= Ġ( data [ i ] Ġ ush r Ġ 2 4 ). toFloat () Ġ/ Ġs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġf Ġ= Ġf . pow ( 0 . 7 5 f ) Ġ// Ġgamma Ġadjust Ġfor Ġb older Ġlines ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf Ġ*= Ġ 1 . 2 5 f Ġ// Ġbrightness Ġadjust Ġfor Ġb older Ġlines ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf . coerce At Most ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ i ] Ġ= Ġ( round ( f ) Ġ* Ġs ). toInt () Ġshl Ġ 2 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġis Blank (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . sum () Ġ== Ġ 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġload ( drawable : ĠDrawable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresized Ġ= ĠBitmap . create Bitmap ( width , Ġheight , ĠBitmap . Config . ALPHA _ 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( res ized ) ĊĠĠĠĠĠĠĠ Ġdrawable . setBounds ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġdrawable . set Tint ( 0 xFF 0 0 0 0 0 0 . toInt ()) ĊĠĠĠĠĠĠĠ Ġdrawable . draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġload And Quant ize ( res ized ) ĊĠĠĠĠĠĠĠ Ġresized . recycle () ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġload ( context : ĠContext , Ġicon : ĠIcon ) Ġ{ ĊĠĠĠĠĠĠĠ Ġicon . load Drawable ( context )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġbitmap (): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap . create Bitmap ( data , Ġwidth , Ġheight , ĠBitmap . Config . ALPHA _ 8 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun ĠgetUser Mark ( x : ĠInt , Ġy : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser [ y Ġ* Ġwidth Ġ+ Ġx ] Ġ ush r Ġ 2 4 ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun ĠsetUser Mark ( x : ĠInt , Ġy : ĠInt , Ġv : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuser [ y Ġ* Ġwidth Ġ+ Ġx ] Ġ= Ġv Ġshl Ġ 2 4 ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun ĠgetData At ( x : ĠInt , Ġy : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata [ y Ġ* Ġwidth Ġ+ Ġx ] Ġ ush r Ġ 2 4 ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġcheck (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . content Equals ( user ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġcheck ( x Sel : ĠInt , Ġy Sel : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Start Ġ= Ġif Ġ( x Sel Ġ< Ġ 0 ) Ġ 0 Ġelse Ġx Sel ĊĠĠĠĠĠĠĠ Ġval Ġx End Ġ= Ġif Ġ( x Sel Ġ< Ġ 0 ) Ġwidth Ġ- Ġ 1 Ġelse Ġx Sel ĊĠĠĠĠĠĠĠ Ġval Ġy Start Ġ= Ġif Ġ( y Sel Ġ< Ġ 0 ) Ġ 0 Ġelse Ġy Sel ĊĠĠĠĠĠĠĠ Ġval Ġy End Ġ= Ġif Ġ( y Sel Ġ< Ġ 0 ) Ġheight Ġ- Ġ 1 Ġelse Ġy Sel ĊĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġy Start .. y End ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġx Start .. x End ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( getData At ( x , Ġy ) Ġ!= ĠgetUser Mark ( x , Ġy )) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġerrors (): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠInt Array ( width Ġ* Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabs ( data [ it ] Ġ- Ġuser [ it ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġget Row Cl ue ( y : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Cl ue (- 1 , Ġy ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġget Column Cl ue ( x : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Cl ue ( x , Ġ- 1 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġget Cl ue ( x Sel : ĠInt , Ġy Sel : ĠInt ): ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarr Ġ= ĠArrayList < Int >() ĊĠĠĠĠĠĠĠ Ġvar Ġlen Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġx Start Ġ= Ġif Ġ( x Sel Ġ< Ġ 0 ) Ġ 0 Ġelse Ġx Sel ĊĠĠĠĠĠĠĠ Ġval Ġx End Ġ= Ġif Ġ( x Sel Ġ< Ġ 0 ) Ġwidth Ġ- Ġ 1 Ġelse Ġx Sel ĊĠĠĠĠĠĠĠ Ġval Ġy Start Ġ= Ġif Ġ( y Sel Ġ< Ġ 0 ) Ġ 0 Ġelse Ġy Sel ĊĠĠĠĠĠĠĠ Ġval Ġy End Ġ= Ġif Ġ( y Sel Ġ< Ġ 0 ) Ġheight Ġ- Ġ 1 Ġelse Ġy Sel ĊĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġy Start .. y End ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġx Start .. x End ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( getData At ( x , Ġy ) Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlen ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( len Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr . add ( len ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlen Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( len Ġ> Ġ 0 ) Ġarr . add ( len ) ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( arr . size Ġ== Ġ 0 ) Ġarr . add ( 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġarr . to IntArray () ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġreset User Marks () Ġ{ ĊĠĠĠĠĠĠĠ Ġuser . forEach Indexed Ġ{ Ġindex , Ġ_ Ġ-> Ġuser [ index ] Ġ= Ġ 0 Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠParcel able Ġinterface ĊĠĠĠ Ġoverride Ġfun Ġdescribe Contents (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( p : ĠParcel ?, Ġflags : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġp ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . writeInt ( width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . writeInt ( height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . writeInt ( depth ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . write IntArray ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . write IntArray ( user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcompanion Ġobject ĠCRE ATOR Ġ: ĠParcel able . Creator < Qu are > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate From Parcel ( p : ĠParcel ?): ĠQu are Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġp !!. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQu are ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . readInt (), Ġ// Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . readInt (), Ġ// Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . readInt () Ġ Ġ// Ġdepth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . read IntArray ( it . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . read IntArray ( it . user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Array ( size : ĠInt ): ĠArray < Qu are ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf Null s ( size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }