package Ġstacks Queues Ċ Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Parameterized Ċ import Ġsolutions For Book Cr ack ing The Coding Inter view . stacks And Queues . Array Stack Ċ import Ġsolutions For Book Cr ack ing The Coding Inter view . stacks And Queues . Tow ers Of H ano i Ċ import Ġjava . util .* Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Ignore ĊĊ Ċ /** Ċ Ġ* Ġ@ author ĠK ost ian ty n ĠP ry sia zh ny i Ċ Ġ* Ġ@ created Ġon Ġ 4 / 1 9 / 2 0 1 8 Ċ Ġ*/ Ċ @ RunWith ( Parameterized :: class ) Ċ class ĠT ow ers Of H ano i Test ( private Ġval Ġro d 1 : ĠArray Stack < Int >, Ġprivate Ġval Ġro d 2 : ĠArray Stack < Int >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġro d 3 : ĠArray Stack < Int >) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġto wers Of H ano i : ĠT ow ers Of H ano i Ġ= ĠT ow ers Of H ano i ( rod 1 , Ġro d 2 , Ġro d 3 ) ĊĠĠĠ Ġprivate Ġvar Ġdisk To Move : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġprint (" initial Ġdata Ġ: Ġ") ĊĠĠĠĠĠĠĠ Ġto wers Of H ano i . print All R ods () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Move All Dis ks To Last Rod () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġto wers Of H ano i . expected Rod . to IntArray () ĊĠĠĠĠĠĠĠ Ġto wers Of H ano i . move All Dis ks To Last Rod () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠInt Array ( expected . size , Ġ{ Ġ 0 Ġ}) ĊĠĠĠĠĠĠĠ Ġro d 3 . array Buffer . forEach Indexed Ġ{ Ġindex , Ġelem Ġ-> Ġresult [ index ] Ġ= Ġelem Ġ?: Ġ- 1 Ġ} ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals (" all Ġdisks Ġwasn 't Ġmoved Ġto Ġlast Ġro d ", Ġresult , Ġexpected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Ignore ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Move Disk From Rod 2 To Rod 3 () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" test Move Disk From Rod 2 To Rod 3 () ") ĊĠĠĠĠĠĠĠ Ġif Ġ( rod 2 . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" wrong ĠTest DataSet Ġcan 't Ġperform Ġthe Ġmoving , ĠStack Ġro d 2 Ġis Ġempty ") ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdisk To Move Ġ= Ġro d 2 . peek () ĊĠĠĠĠĠĠĠ Ġto wers Of H ano i . Moving Tools (). move Disk From Rod To Rod ( rod 2 , Ġro d 3 ) ĊĠĠĠĠĠĠĠ Ġto wers Of H ano i . print All R ods () ĊĠĠĠĠĠĠĠ ĠassertEquals (" Error Ġ: Ġ$ disk To Move Ġdisk Ġwasn 't Ġmoved Ġto Ġro d 3 ", Ġdisk To Move , Ġro d 3 . peek ()) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Ignore ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Move Disk From Rod 2 To Rod 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" test Move Disk From Rod 2 To Rod 1 () ") ĊĠĠĠĠĠĠĠ Ġif Ġ( rod 2 . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" wrong ĠTest DataSet Ġcan 't Ġperform Ġthe Ġmoving , ĠStack Ġro d 2 Ġis Ġempty ") ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdisk To Move Ġ= Ġro d 2 . peek () ĊĠĠĠĠĠĠĠ Ġto wers Of H ano i . Moving Tools (). move Disk From Rod To Rod ( rod 2 , Ġro d 1 ) ĊĠĠĠĠĠĠĠ Ġto wers Of H ano i . print All R ods () ĊĠĠĠĠĠĠĠ ĠassertEquals (" Error Ġ: Ġ$ disk To Move Ġdisk Ġwasn 't Ġmoved Ġto Ġro d 1 ", Ġdisk To Move , Ġro d 1 . peek ()) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// static Ġmethod Ġwith ĠtestData ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters ĊĠĠĠĠĠĠĠ Ġfun Ġget Test DataSet (): ĠList < Array < Array Stack < Int >>> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtestData Ġ= ĠArrayList < Array < Array Stack < Int >> >() ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtestData . add ( get TestData Item ( array Of ( 3 , Ġ 2 , Ġ 1 , Ġ 0 ), ĠarrayOf (), ĠarrayOf (), Ġ 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtestData . add ( get TestData Item ( array Of ( 1 , Ġ 0 ), ĠarrayOf (), ĠarrayOf (), Ġ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtestData . add ( get TestData Item ( array Of ( 5 , Ġ 4 , Ġ 3 , Ġ 2 , Ġ 1 , Ġ 0 ), ĠarrayOf (), ĠarrayOf (), Ġ 6 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠtestData ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget TestData Item ( rod 1 Dis ks : ĠArray < Int >, Ġro d 2 Dis ks : ĠArray < Int >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġro d 3 Dis ks : ĠArray < Int >, Ġmax Rod Size : ĠInt ): ĠArray < Array Stack < Int >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rod 1 Dis ks . size Ġ+ Ġro d 2 Dis ks . size Ġ+ Ġro d 3 Dis ks . size Ġ! in Ġ 1 0 Ġdown To Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" get TestData Item Ġ: Ġmax Ġamount Ġof Ġdisks Ġis Ġ 4 Ġ( temporary )") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġro d 1 Ġ= ĠArray Stack < Int >( max Rod Size , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġro d 2 Ġ= ĠArray Stack < Int >( max Rod Size , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġro d 3 Ġ= ĠArray Stack < Int >( max Rod Size , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġro d 1 Dis ks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġro d 1 . push ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġro d 2 Dis ks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġro d 2 . push ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġro d 3 Dis ks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġro d 3 . push ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf ( rod 1 , Ġro d 2 , Ġro d 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ