package Ġcommon ĊĊ Ċ import Ġorg . hyper skill . h st est . v 6 . stage . Base Stage Test Ċ import Ġorg . hyper skill . h st est . v 6 . testcase . Check Result Ċ import Ġorg . hyper skill . h st est . v 6 . testcase . TestCase Ċ import Ġlife . Main Ċ Ċ abstract Ġclass ĠGame Of Life Stage 3 Test Ġ: ĠBase Stage Test < Cl ue With Checker >( Main :: class . java ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate (): ĠList < TestCase < Cl ue With Checker >> Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtwo Ġtimes : ĊĠĠĠĠĠĠĠ Ġreturn Ġ( 5 .. MAX _ SIZE ). flatMap (:: stage 3 Tests ) Ġ+ Ġ( 5 .. MAX _ SIZE ). flatMap (:: stage 3 Tests ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck ( reply : ĠString , Ġcl ue : ĠCl ue With Checker ): ĠCheck Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcheck Cl ue With Checker Test ( reply Ġ= Ġreply , Ġcl ue Ġ= Ġcl ue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ SIZE Ġ= Ġ 1 0 ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġstage 3 Tests ( universe Size : ĠInt ): ĠList < TestCase < Cl ue With Checker >> Ġ{ ĊĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Dynamic Feedback Test ("$ universe Size \ n ") Ġ{ Ġreply Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Fold Initializer And If To El vis ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgener ations Ġ= Ġreply ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. lines () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (" generation ". to Regex ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. drop ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlines Ġ= Ġit . lines () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( id String , Ġalive String ) Ġ= Ġlines ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġlines . drop ( 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! map . can Be Map ( universe Size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ create Dynamic Feedback Test Ġfail (" Can 't Ġread Ġmap Ġin :\ n $ it \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġint Regex . find ( id String )?. group Values ?. first OrNull ()?. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ create Dynamic Feedback Test Ġfail (" Can 't Ġfind Ġgeneration ĠID :\ n $ it \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalive Ġ= Ġint Regex . find ( alive String )?. group Values ?. first OrNull ()?. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alive Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ create Dynamic Feedback Test Ġfail (" Can 't Ġfind Ġalive Ġcount :\ n $ it \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgeneration Ġ= ĠGeneration ( id , Ġalive , Ġmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalive On Map Ġ= Ġgeneration . alive On Map ( universe Size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alive On Map Ġ!= Ġalive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ create Dynamic Feedback Test Ġfail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Alive Ġcount Ġis Ġwrong Ġ($ alive Ġexpected , Ġ$ alive On Map Ġgot ):\ n $ it \ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġgeneration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gener ations . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ create Dynamic Feedback Test Ġfail (" Your Ġprogram Ġdoesn 't Ġoutput Ġgener ations Ġfor Ġsize Ġ$ universe Size ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gener ations . first (). id Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ create Dynamic Feedback Test Ġfail (" First Ġgeneration Ġhas Ġnumber Ġ${ gener ations . first (). id }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiffs Ġ= Ġgener ations . window ed ( 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiffs . forEach Ġ{ Ġ( prev , Ġnext ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev . id Ġ+ Ġ 1 Ġ!= Ġnext . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ create Dynamic Feedback Test Ġfail (" ID Ġof Ġthe Ġgeneration Ġ# ${ prev . id Ġ+ Ġ 1 } Ġis Ġwrong Ġ(${ next . id }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! prev . e vol ves To ( next , Ġuniverse Size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ create Dynamic Feedback Test Ġfail (" Wrong Ġevolution Ġfrom Ġ# ${ prev . id } Ġto Ġ# ${ prev . id Ġ+ Ġ 1 }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ create Dynamic Feedback Test ĠCheck Result . TRUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ val Ġint Regex Ġ= Ġ""" (\ d )+ """. to Regex () Ċ Ċ fun ĠList < String >. can Be Map ( universe Size : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this . size Ġ< Ġuniverse Size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġthis . take ( universe Size ). all Ġ{ Ġit . length Ġ>= Ġuniverse Size Ġ} Ċ } Ċ Ċ data Ġclass ĠGeneration ( val Ġid : ĠInt , Ġval Ġalive : ĠInt , Ġval Ġmap : ĠList < String >) Ġ{ ĊĠĠĠ Ġfun Ġalive On Map ( universe Size : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( 0 Ġuntil Ġuniverse Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġy Ġ-> Ġ( 0 Ġuntil Ġuniverse Size ). map Ġ{ Ġx Ġ-> Ġx Ġto Ġy Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( x , Ġy ) Ġ-> Ġmap [ x ][ y ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. count Ġ{ Ġit . is Alive () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġe vol ves To ( other : ĠGeneration , Ġuniverse Size : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( 0 Ġuntil Ġuniverse Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġy Ġ-> Ġ( 0 Ġuntil Ġuniverse Size ). map Ġ{ Ġx Ġ-> Ġx Ġto Ġy Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( x , Ġy ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( map [ x ][ y ]. is Alive ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alive Ne ighbours ( x , Ġy , Ġuniverse Size ) Ġin Ġset Of ( 2 , Ġ 3 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother . map [ x ][ y ]. is Alive () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! other . map [ x ][ y ]. is Alive () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alive Ne ighbours ( x , Ġy , Ġuniverse Size ) Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother . map [ x ][ y ]. is Alive () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! other . map [ x ][ y ]. is Alive () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. all Ġ{ Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġalive Ne ighbours ( x : ĠInt , Ġy : ĠInt , Ġuniverse Size : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnorth Ġ= Ġx Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( north Ġ< Ġ 0 ) Ġnorth Ġ= Ġuniverse Size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġsouth Ġ= Ġx Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( south Ġ> Ġuniverse Size Ġ- Ġ 1 ) Ġsouth Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġwest Ġ= Ġy Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( west Ġ< Ġ 0 ) Ġwest Ġ= Ġuniverse Size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġeast Ġ= Ġy Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( east Ġ> Ġuniverse Size Ġ- Ġ 1 ) Ġeast Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġalive Ne ighbours Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( map [ north ][ west ]. is Alive ()) Ġ++ alive Ne ighbours ĊĠĠĠĠĠĠĠ Ġif Ġ( map [ north ][ y ]. is Alive ()) Ġ++ alive Ne ighbours ĊĠĠĠĠĠĠĠ Ġif Ġ( map [ north ][ east ]. is Alive ()) Ġ++ alive Ne ighbours ĊĠĠĠĠĠĠĠ Ġif Ġ( map [ x ][ west ]. is Alive ()) Ġ++ alive Ne ighbours ĊĠĠĠĠĠĠĠ Ġif Ġ( map [ x ][ east ]. is Alive ()) Ġ++ alive Ne ighbours ĊĠĠĠĠĠĠĠ Ġif Ġ( map [ south ][ west ]. is Alive ()) Ġ++ alive Ne ighbours ĊĠĠĠĠĠĠĠ Ġif Ġ( map [ south ][ y ]. is Alive ()) Ġ++ alive Ne ighbours ĊĠĠĠĠĠĠĠ Ġif Ġ( map [ south ][ east ]. is Alive ()) Ġ++ alive Ne ighbours ĊĊĠĠĠĠĠĠĠ Ġreturn Ġalive Ne ighbours ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠChar . is Alive (): ĠBoolean Ġ= Ġthis Ġ!= Ġ' Ġ' Ċ } Ċ