package Ġle et code . apr il Challenge 2 0 2 0 . week one Ċ Ċ import Ġutils . print With Space Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġdriver ( int ArrayOf ( 0 , Ġ 0 , Ġ 3 )) ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġans : Ġ 3 , Ġ 0 , Ġ 0 ĊĠĠĠ Ġdriver ( int ArrayOf ( 3 , Ġ 1 , Ġ 0 )) ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġans : Ġ 3 , Ġ 1 , Ġ 0 ĊĠĠĠ Ġdriver ( int ArrayOf ( 0 , Ġ 1 , Ġ 0 , Ġ 3 , Ġ 1 2 )) ĠĠĠĠĠ Ġ// Ġans : Ġ 1 , Ġ 3 , Ġ 1 2 , Ġ 0 , Ġ 0 ĊĊĠĠĠ Ġprintln (" ============= Ġnow Ġwith Ġsw aps Ġ============ =") ĊĊĠĠĠ Ġdriver With Swap ( int ArrayOf ( 0 , Ġ 0 , Ġ 3 )) ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġans : Ġ 3 , Ġ 0 , Ġ 0 ĊĠĠĠ Ġdriver With Swap ( int ArrayOf ( 3 , Ġ 1 , Ġ 0 )) ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġans : Ġ 3 , Ġ 1 , Ġ 0 ĊĠĠĠ Ġdriver With Swap ( int ArrayOf ( 0 , Ġ 1 , Ġ 0 , Ġ 3 , Ġ 1 2 )) ĠĠĠĠĠ Ġ// Ġans : Ġ 1 , Ġ 3 , Ġ 1 2 , Ġ 0 , Ġ 0 Ċ } Ċ Ċ fun Ġdriver ( nums : ĠInt Array ) Ġ{ ĊĠĠĠ Ġmove Zero es ( nums ) ĊĠĠĠ Ġnums . print With Space () Ċ } Ċ Ċ fun Ġdriver With Swap ( nums : ĠInt Array ) Ġ{ ĊĠĠĠ Ġmove Zero es With Swap ( nums ) ĊĠĠĠ Ġnums . print With Space () Ċ } Ċ Ċ fun Ġmove Zero es ( nums : ĠInt Array ) Ġ{ ĊĠĠĠ Ġvar Ġptr Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( value Ġin Ġnums ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnums [ ptr ++] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( itr Ġin Ġptr Ġuntil Ġnums . size ) ĊĠĠĠĠĠĠĠ Ġnums [ itr ] Ġ= Ġ 0 Ċ } Ċ Ċ /* Ċ Ġ* Ġ= ============= Ċ Ġ* ĠJ UST ĠFOR ĠFUN Ċ Ġ* Ġ= ============= Ċ Ġ* Ċ Ġ* ĠBasic ally Ġif Ġthis Ġproblem Ġwas Ġneeded Ġto Ġbe Ġsolved Ġwith Ġswap Ċ Ġ* ĠFor Ġexample Ġinstead Ġof Ġbeing Ġa Ġsimple Ġvalues Ġit Ġwas Ġobjects . Ċ Ġ* Ċ Ġ*/ Ċ Ċ fun Ġmove Zero es With Swap ( nums : ĠInt Array ) Ġ{ ĊĠĠĠ Ġvar Ġzero Ptr Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġnon Zero Ptr Ġ= Ġ 0 ĊĊĠĠĠ Ġwhile Ġ( non Zero Ptr Ġ< Ġnums . size Ġ&& Ġzero Ptr Ġ< Ġnums . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnon Zero Ptr Ġ= Ġfind Ptr ( nums , Ġnon Zero Ptr ) Ġ{ Ġit Ġ!= Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġzero Ptr Ġ= Ġfind Ptr ( nums , Ġzero Ptr ) Ġ{ Ġit Ġ== Ġ 0 Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( zero Ptr Ġ>= Ġnums . size Ġ|| Ġnon Zero Ptr Ġ>= Ġnums . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĊĠĠĠĠĠĠĠ Ġif Ġ( zero Ptr Ġ< Ġnon Zero Ptr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnums [ zero Ptr ] Ġ= Ġnums [ zero Ptr ] Ġxor Ġnums [ non Zero Ptr ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnums [ non Zero Ptr ] Ġ= Ġnums [ zero Ptr ] Ġxor Ġnums [ non Zero Ptr ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnums [ zero Ptr ] Ġ= Ġnums [ zero Ptr ] Ġxor Ġnums [ non Zero Ptr ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġzero Ptr ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnon Zero Ptr ++ ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( zero Ptr Ġ> Ġnon Zero Ptr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnon Zero Ptr ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġfind Ptr ( nums : ĠInt Array , Ġptr : ĠInt , Ġpredicate : Ġ( value : ĠInt ) Ġ-> ĠBoolean ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġm Ptr Ġ= Ġptr ĊĠĠĠ Ġwhile Ġ( m Ptr Ġ< Ġnums . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( predicate ( nums [ m Ptr ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Ptr ++ ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġm Ptr Ċ }