/* ĠCopyright Ġ 2 0 1 6 ĠGoogle ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . google . en ge du . word lad der Ċ Ċ import Ġandroid . util . Log Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . util .* Ċ Ċ class ĠPath Dictionary ( inputStream : ĠInputStream ?) Ġ{ ĊĊĠĠĠ Ġfun Ġis Word ( word : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwords . containsKey ( word . toLowerCase ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġne ighbours ( word : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( words [ word ] Ġ== Ġnull ) ĠlistOf () Ġelse Ġwords [ word ] !!. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Path ( start : ĠString , Ġend : ĠString ): ĠArray < String >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd q Ġ= ĠArray Deque < List < String >>() ĊĠĠĠĠĠĠĠ Ġval Ġvisited Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġd q . offer ( listOf ( start )) ĊĠĠĠĠĠĠĠ Ġvisited . add ( start ) ĊĠĠĠĠĠĠĠ Ġvar Ġsearch Amount Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġdepth Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( dq . isNotEmpty () Ġ&& Ġdepth Ġ<= ĠMAX _ SEARCH _ DEPTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnew Search Amount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. search Amount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Ġ= Ġd q . poll () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( next Ġin Ġwords [ cur . last ()] !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! visited . contains ( next )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisited . add ( next ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd q . offer ( cur Ġ+ ĠlistOf ( next )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Search Amount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Ġ== Ġend ) Ġreturn Ġ( cur Ġ+ ĠlistOf ( next )). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Amount Ġ= Ġnew Search Amount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepth ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ WORD _ LENGTH Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġwords Ġ= ĠHashMap < String , ĠMutable List < String >>() ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ SEARCH _ DEPTH Ġ= Ġ 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( inputStream Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Word Ġl adder ", Ġ" Loading Ġdict ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ` in ` Ġ= ĠBufferedReader ( InputStream Reader ( inputStream )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Word Ġl adder ", Ġ" Loading Ġdict ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(` in `. readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġline !!. trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( word . length Ġ> ĠMAX _ WORD _ LENGTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ word ] Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarr Ġ= Ġword . toCharArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġarr . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Ġ= Ġarr [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr [ i ] Ġ= Ġ' a ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( arr [ i ] Ġ<= Ġ' z ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arr [ i ] Ġ!= Ġoriginal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( words . containsKey ( String ( arr ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ word ] !!. add ( String ( arr )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords [ String ( arr )] !!. add ( word ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr [ i ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr [ i ] Ġ= Ġoriginal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" sb ", Ġ" init : Ġ${ words . toString () }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }