package Ġcom . github . k 0 z ka . finder 4 j . back track . examples . que ens Ċ Ċ import Ġcom . github . k 0 z ka . finder 4 j . back track . Step Factory Ċ import Ġjava . util . ArrayList Ċ Ċ class ĠQue ens Step Factory Ġ: ĠStep Factory < Que ens Step , ĠQue ens State > Ġ{ ĊĊ ĉ override Ġfun Ġproduce ( state : ĠQue ens State ): ĠList < Que ens Step > Ġ{ Ċĉ ĉ val Ġret Ġ= ĠArrayList < Que ens Step >() Ċĉ ĉ val Ġque ens Short s Ġ= Ġstate . que ens Ċĉ ĉ val Ġlast Queen Ġ= Ġstate . last Queen Ċĉ ĉ // Ġa Ġstructure Ġto Ġkeep Ġwhere Ġthe Ġnew Ġque en Ġcan Ġbe Ġplaced Ċĉ ĉ val Ġpossible Places Ġ= Ġcalculate Possible Places ( que ens Short s . to Typed Array (), Ċĉĉĉĉĉĉĉĉĉĉĉĉĉ Ġlast Queen ) ĊĊĉ ĉ for Ġ( i Ġin Ġpossible Places . indices ) Ġ{ Ċĉĉ ĉ if Ġ( possible Places [ i ]) Ġ{ Ċĉĉĉ ĉ ret . add ( Que ens Step ( last Queen , Ġi . to Short ())) Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ return Ġret Ċ ĉ } ĊĊ ĉ comp anion Ġobject Ġ{ ĊĊĉ ĉ internal Ġfun Ġcalculate Possible Places ( que ens Short s : ĠArray < Short >, Ċĉĉĉĉĉĉĉĉĉĉĉ Ġlast Queen : ĠShort ?): ĠBoolean Array Ġ{ Ċĉĉ ĉ val Ġpossible Places Ġ= ĠBoolean Array ( 8 ) Ċĉĉ ĉ for Ġ( i Ġin Ġpossible Places . indices ) Ġ{ Ċĉĉĉ ĉ possible Places [ i ] Ġ= Ġtrue Ċĉĉ ĉ } Ċĉĉ ĉ // Ġtake Ġeach Ġque ens Ġpreviously Ġplaced Ċĉĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġ( last Queen Ġ?: Ġ 0 )) Ġ{ Ċĉĉĉ ĉ val Ġloc Ġ= Ġque ens Short s [ i ] Ċĉĉĉ ĉ val Ġdistance Ġ= Ġlast Queen !! Ġ- Ġi Ċĉĉĉ ĉ possible Places [ loc . toInt ()] Ġ= Ġfalse Ċĉĉĉ ĉ if Ġ( loc Ġ- Ġdistance Ġ> Ġ 0 ) Ġ{ Ċĉĉĉĉ ĉ possible Places [ loc Ġ- Ġdistance ] Ġ= Ġfalse Ċĉĉĉ ĉ } Ċĉĉĉ ĉ if Ġ( loc Ġ+ Ġdistance Ġ< Ġ 8 ) Ġ{ Ċĉĉĉĉ ĉ possible Places [ loc Ġ+ Ġdistance ] Ġ= Ġfalse Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉĉ ĉ return Ġpossible Places Ċĉ ĉ } Ċ ĉ } Ċ Ċ } Ċ