package Ġdays Ċ Ċ import Ġorg . hamcrest . Core Matchers .` is ` Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ internal Ġclass ĠDay 1 0 Test Ġ{ ĊĠĠĠ Ġval Ġunder Test Ġ= ĠDay 1 0 () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġexample 1 () Ġ{ ĊĠĠĠĠĠĠ Ġval Ġscore Ġ= Ġunder Test . run Part One (""" ĊĠĠĠĠĠĠĠĠĠĠ Ġ[ ({ (< (()) [] >[ [{ []{ < () < >> ĊĠĠĠĠĠĠĠĠĠĠ Ġ[ (() [ <> ]) ]( { [< { << [] >>( ĊĠĠĠĠĠĠĠĠĠĠ Ġ{ ([ (< {} [ <> [] }>{ []{ [( <()> ĊĠĠĠĠĠĠĠĠĠĠ Ġ((( ({ <> } <{ <{ <> }{ []{ [] {} ĊĠĠĠĠĠĠĠĠĠĠ Ġ[[ <[ ([] )) < ([[ {} [[ () ]]] ĊĠĠĠĠĠĠĠĠĠĠ Ġ[{ [{ ({ } ]{ }} ([{ [{{ {}} ([] ĊĠĠĠĠĠĠĠĠĠĠ Ġ{ <[ [] ] >} <{ [{ [{ []{ ()[ [ [] ĊĠĠĠĠĠĠĠĠĠĠ Ġ[< (< (< (< {} )) >< ([ ]( [] () ĊĠĠĠĠĠĠĠĠĠĠ Ġ< { ([ ([ [( <> ()) {}] >( << {{ ĊĠĠĠĠĠĠĠĠĠĠ Ġ< { ([ {{ }} [< [[ [ <> {} ]] ]> [] ] ĊĠĠĠĠĠĠ Ġ""" . trim Indent (). lines ()) ĊĠĠĠĠĠĠĠ ĠassertThat ( score , Ġ` is `( 2 6 3 9 7 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsingle Line () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġunder Test . find Invalid Char ("{ ([ (< {} [ <> [] }>{ []{ [( <()> ". toCharArray (). toList ()) ĊĠĠĠĠĠĠĠ ĠassertThat ( c , Ġ` is ` (' }' Ġto Ġempty List ())) ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġsimple () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġunder Test . find Invalid Char ("{} ". toCharArray (). toList ()) Ċ // ĠĠĠĠĠĠĠ ĠassertThat ( c , Ġ` is `( null )) Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsimple Bad () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġunder Test . find Invalid Char ("{ ( }". toCharArray (). toList ()) ĊĠĠĠĠĠĠĠ ĠassertThat ( c , Ġ` is ` (' }' Ġto Ġempty List ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline Score 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscore Ġ= Ġunder Test . line Score ( inverted (" }} ]]) }) ] ")) ĊĠĠĠĠĠĠĠ ĠassertThat ( score , Ġ` is `( 2 8 8 9 5 7 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline Score 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscore Ġ= Ġunder Test . line Score ( inverted (" )} >] }) ")) ĊĠĠĠĠĠĠĠ ĠassertThat ( score , Ġ` is `( 5 5 6 6 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline Score 3 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscore Ġ= Ġunder Test . line Score ( inverted (" }}> }> )))) ")) ĊĠĠĠĠĠĠĠ ĠassertThat ( score , Ġ` is `( 1 4 8 0 7 8 1 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinverted ( s : ĠString ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġs . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' }' Ġ-> Ġ'{ ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' ]' Ġ-> Ġ'[' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ')' Ġ-> Ġ'(' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' >' Ġ-> Ġ'< ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unknown Ġchar Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. join ToString ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġexample 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscore Ġ= Ġunder Test . run Part Two (""" ĊĠĠĠĠĠĠĠĠĠĠ Ġ[ ({ (< (()) [] >[ [{ []{ < () < >> ĊĠĠĠĠĠĠĠĠĠĠ Ġ[ (() [ <> ]) ]( { [< { << [] >>( ĊĠĠĠĠĠĠĠĠĠĠ Ġ{ ([ (< {} [ <> [] }>{ []{ [( <()> ĊĠĠĠĠĠĠĠĠĠĠ Ġ((( ({ <> } <{ <{ <> }{ []{ [] {} ĊĠĠĠĠĠĠĠĠĠĠ Ġ[[ <[ ([] )) < ([[ {} [[ () ]]] ĊĠĠĠĠĠĠĠĠĠĠ Ġ[{ [{ ({ } ]{ }} ([{ [{{ {}} ([] ĊĠĠĠĠĠĠĠĠĠĠ Ġ{ <[ [] ] >} <{ [{ [{ []{ ()[ [ [] ĊĠĠĠĠĠĠĠĠĠĠ Ġ[< (< (< (< {} )) >< ([ ]( [] () ĊĠĠĠĠĠĠĠĠĠĠ Ġ< { ([ ([ [( <> ()) {}] >( << {{ ĊĠĠĠĠĠĠĠĠĠĠ Ġ< { ([ {{ }} [< [[ [ <> {} ]] ]> [] ] ĊĠĠĠĠĠĠ Ġ""" . trim Indent (). lines ()) ĊĠĠĠĠĠĠĠ ĠassertThat ( score , Ġ` is `( 2 8 8 9 5 7 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrun 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscore Ġ= Ġunder Test . part Two () ĊĠĠĠĠĠĠĠ ĠassertThat ( score , Ġ` is `( 0 )) ĊĠĠĠ Ġ} Ċ } Ċ