package Ġcom . cur tis lb . ad vent of code . year 2 0 1 9 . day 1 4 . che mistry Ċ Ċ import Ġcom . cur tis lb . ad vent of code . common . testing . assertContains Exactly Ċ import Ġcom . cur tis lb . ad vent of code . common . testing . create TempFile Ċ import Ġjava . nio . file . Path Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertNull Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . io . TempDir Ċ Ċ /** Ċ Ġ* ĠTests Ġ[ Nan of actory ]. Ċ Ġ*/ Ċ class ĠNan of actory Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Find Required Materials (@ TempDir Ġtemp Dir : ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġtemp Dir . create TempFile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 ĠV P VL , Ġ 7 ĠF WM GM , Ġ 2 ĠCX FT F , Ġ 1 1 ĠM N CF X Ġ=> Ġ 1 ĠST K FG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 7 ĠN VR VD , Ġ 3 ĠJ NW ZP Ġ=> Ġ 8 ĠV P VL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 3 ĠST K FG , Ġ 6 ĠM N CF X , Ġ 4 6 ĠV J HF , Ġ 8 1 ĠH VM C , Ġ 6 8 ĠCX FT F , Ġ 2 5 ĠGN MV Ġ=> Ġ 1 ĠF UE L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 2 ĠV J HF , Ġ 3 7 ĠM N CF X Ġ=> Ġ 5 ĠF WM GM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 3 9 ĠO RE Ġ=> Ġ 4 ĠN VR VD ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 4 4 ĠO RE Ġ=> Ġ 7 ĠJ NW ZP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 ĠM N CF X , Ġ 7 ĠR FS QX , Ġ 2 ĠF WM GM , Ġ 2 ĠV P VL , Ġ 1 9 ĠCX FT F Ġ=> Ġ 3 ĠH VM C ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 ĠV J HF , Ġ 7 ĠM N CF X , Ġ 9 ĠV P VL , Ġ 3 7 ĠCX FT F Ġ=> Ġ 6 ĠGN MV ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 4 5 ĠO RE Ġ=> Ġ 6 ĠM N CF X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĠN VR VD Ġ=> Ġ 8 ĠCX FT F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĠV J HF , Ġ 6 ĠM N CF X Ġ=> Ġ 4 ĠR FS QX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 7 6 ĠO RE Ġ=> Ġ 6 ĠV J HF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnan of actory Ġ= ĠNan of actory ( file ) ĊĠĠĠĠĠĠĠ Ġvar Ġrequired Materials Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnan of actory . find Required Materials ( set Of (" ORE "), ĠlistOf ( Material Amount (" NV R VD ", Ġ 4 L ))) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( required Materials ) ĊĠĠĠĠĠĠĠ Ġassert Contains Exactly ( listOf ( Material Amount (" ORE ", Ġ 1 3 9 L )), Ġrequired Materials ) ĊĊĠĠĠĠĠĠĠ Ġrequired Materials Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnan of actory . find Required Materials ( set Of (" J NW ZP "), ĠlistOf ( Material Amount (" VP VL ", Ġ 1 L ))) ĊĠĠĠĠĠĠĠ ĠassertNull ( required Materials ) ĊĊĠĠĠĠĠĠĠ Ġrequired Materials Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnan of actory . find Required Materials ( set Of (" FA KE "), ĠlistOf ( Material Amount (" VP VL ", Ġ 1 L ))) ĊĠĠĠĠĠĠĠ ĠassertNull ( required Materials ) ĊĊĠĠĠĠĠĠĠ Ġrequired Materials Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnan of actory . find Required Materials ( empty Set (), ĠlistOf ( Material Amount (" VP VL ", Ġ 1 L ))) ĊĠĠĠĠĠĠĠ ĠassertNull ( required Materials ) ĊĊĠĠĠĠĠĠĠ Ġrequired Materials Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnan of actory . find Required Materials ( set Of (" ORE "), ĠlistOf ( Material Amount (" VP VL ", Ġ- 1 L ))) ĊĠĠĠĠĠĠĠ ĠassertNull ( required Materials ) ĊĊĠĠĠĠĠĠĠ Ġrequired Materials Ġ= Ġnan of actory . find Required Materials ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of (" ORE ", Ġ" J NW ZP "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Material Amount (" VP VL ", Ġ 8 L )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( required Materials ) ĊĠĠĠĠĠĠĠ Ġassert Contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Material Amount (" ORE ", Ġ 6 9 5 L ), ĠMaterial Amount (" J NW ZP ", Ġ 3 L )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Materials ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrequired Materials Ġ= Ġnan of actory . find Required Materials ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of (" ORE "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Material Amount (" J NW ZP ", Ġ 8 L ), ĠMaterial Amount (" CX FT F ", Ġ 2 0 L )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( required Materials ) ĊĠĠĠĠĠĠĠ Ġassert Contains Exactly ( listOf ( Material Amount (" ORE ", Ġ 4 2 7 L )), Ġrequired Materials ) ĊĊĠĠĠĠĠĠĠ Ġrequired Materials Ġ= Ġnan of actory . find Required Materials ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of (" NV R VD ", Ġ" J NW ZP ", Ġ" MN CF X ", Ġ" VJ HF "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Material Amount (" H VM C ", Ġ 6 L ), ĠMaterial Amount (" F UE L ", Ġ 1 L )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( required Materials ) ĊĠĠĠĠĠĠĠ Ġassert Contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Amount (" NV R VD ", Ġ 5 7 3 L ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Amount (" J NW ZP ", Ġ 8 1 L ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Amount (" MN CF X ", Ġ 4 2 5 7 L ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Amount (" VJ HF ", Ġ 2 0 1 4 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Materials ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrequired Materials Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnan of actory . find Required Materials ( set Of (" ORE "), ĠlistOf ( Material Amount (" F UE L ", Ġ 1 L ))) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( required Materials ) ĊĠĠĠĠĠĠĠ Ġassert Contains Exactly ( listOf ( Material Amount (" ORE ", Ġ 1 8 0 6 9 7 L )), Ġrequired Materials ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest ToString (@ TempDir Ġtemp Dir : ĠPath ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactory String Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 5 7 ĠO RE Ġ=> Ġ 5 ĠN Z VS ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 5 ĠO RE Ġ=> Ġ 6 ĠD CF Z ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 4 ĠX JW VT , Ġ 5 ĠK HK GT , Ġ 1 ĠQ DV J , Ġ 2 9 ĠN Z VS , Ġ 9 ĠG PV TF , Ġ 4 8 ĠH K GW Z Ġ=> Ġ 1 ĠF UE L ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 2 ĠH K GW Z , Ġ 1 ĠG PV TF , Ġ 8 ĠP SH F Ġ=> Ġ 9 ĠQ DV J ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 7 9 ĠO RE Ġ=> Ġ 7 ĠP SH F ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 7 7 ĠO RE Ġ=> Ġ 5 ĠH K GW Z ĊĠĠĠĠĠĠĠĠĠĠĠĠ 7 ĠD CF Z , Ġ 7 ĠP SH F Ġ=> Ġ 2 ĠX JW VT ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 5 ĠO RE Ġ=> Ġ 2 ĠG PV TF ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 ĠD CF Z , Ġ 7 ĠN Z VS , Ġ 5 ĠH K GW Z , Ġ 1 0 ĠP SH F Ġ=> Ġ 8 ĠK HK GT ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġtemp Dir . create TempFile ( text Ġ= Ġfactory String ) ĊĠĠĠĠĠĠĠ Ġval Ġnan of actory Ġ= ĠNan of actory ( file ) ĊĠĠĠĠĠĠĠ Ġassert Contains Exactly ( factory String . split ('\ n '), Ġnan of actory . toString (). split ('\ n ')) ĊĠĠĠ Ġ} Ċ } Ċ