package Ġday 8 Ċ Ċ import Ġparse Input Ċ import Ġsplit To Lines Ċ Ċ /** Ċ --- ĠDay Ġ 8 : ĠMatch st icks Ġ--- Ċ Ċ Space Ġon Ġthe Ġsle igh Ġis Ġlimited Ġthis Ġyear , Ġand Ġso ĠS anta Ġwill Ġbe Ġbringing Ġhis Ġlist Ġas Ġa Ġdigital Ġcopy . ĠHe Ġneeds Ġto Ġknow Ġhow Ġmuch Ġspace Ġit Ġwill Ġtake Ġup Ġwhen Ġstored . Ċ Ċ It Ġis Ġcommon Ġin Ġmany Ġprogramming Ġlanguages Ġto Ġprovide Ġa Ġway Ġto Ġescape Ġspecial Ġcharacters Ġin Ġstrings . ĠFor Ġexample , ĠC , ĠJavaScript , ĠPerl , ĠPython , Ġand Ġeven ĠPHP Ġhandle Ġspecial Ġcharacters Ġin Ġvery Ġsimilar Ġways . Ċ Ċ However , Ġit Ġis Ġimportant Ġto Ġrealize Ġthe Ġdifference Ġbetween Ġthe Ġnumber Ġof Ġcharacters Ġin Ġthe Ġcode Ġrepresentation Ġof Ġthe Ġstring Ġliteral Ġand Ġthe Ġnumber Ġof Ġcharacters Ġin Ġthe Ġin - memory Ġstring Ġitself . Ċ Ċ For Ġexample : Ċ Ċ "" Ġis Ġ 2 Ġcharacters Ġof Ġcode Ġ( the Ġtwo Ġdouble Ġquotes ), Ġbut Ġthe Ġstring Ġcontains Ġzero Ġcharacters . Ċ " abc " Ġis Ġ 5 Ġcharacters Ġof Ġcode , Ġbut Ġ 3 Ġcharacters Ġin Ġthe Ġstring Ġdata . Ċ " aaa \" aaa " Ġis Ġ 1 0 Ġcharacters Ġof Ġcode , Ġbut Ġthe Ġstring Ġitself Ġcontains Ġsix Ġ" a " Ġcharacters Ġand Ġa Ġsingle , Ġescaped Ġquote Ġcharacter , Ġfor Ġa Ġtotal Ġof Ġ 7 Ġcharacters Ġin Ġthe Ġstring Ġdata . Ċ "\ x 2 7 " Ġis Ġ 6 Ġcharacters Ġof Ġcode , Ġbut Ġthe Ġstring Ġitself Ġcontains Ġjust Ġone Ġ- Ġan Ġa post rop he Ġ( '), Ġescaped Ġusing Ġhexadecimal Ġnotation . Ċ Santa 's Ġlist Ġis Ġa Ġfile Ġthat Ġcontains Ġmany Ġdouble - quoted Ġstring Ġliterals , Ġone Ġon Ġeach Ġline . ĠThe Ġonly Ġescape Ġsequences Ġused Ġare Ġ\\ Ġ( which Ġrepresents Ġa Ġsingle Ġback slash ), Ġ\" Ġ( which Ġrepresents Ġa Ġl one Ġdouble - quote Ġcharacter ), Ġand Ġ\ x Ġplus Ġtwo Ġhexadecimal Ġcharacters Ġ( which Ġrepresents Ġa Ġsingle Ġcharacter Ġwith Ġthat ĠASCII Ġcode ). Ċ Ċ Dis reg arding Ġthe Ġwhitespace Ġin Ġthe Ġfile , Ġwhat Ġis Ġthe Ġnumber Ġof Ġcharacters Ġof Ġcode Ġfor Ġstring Ġliterals Ġminus Ġthe Ġnumber Ġof Ġcharacters Ġin Ġmemory Ġfor Ġthe Ġvalues Ġof Ġthe Ġstrings Ġin Ġtotal Ġfor Ġthe Ġentire Ġfile ? Ċ Ċ For Ġexample , Ġgiven Ġthe Ġfour Ġstrings Ġabove , Ġthe Ġtotal Ġnumber Ġof Ġcharacters Ġof Ġstring Ġcode Ġ( 2 Ġ+ Ġ 5 Ġ+ Ġ 1 0 Ġ+ Ġ 6 Ġ= Ġ 2 3 ) Ġminus Ġthe Ġtotal Ġnumber Ġof Ġcharacters Ġin Ġmemory Ġfor Ġstring Ġvalues Ġ( 0 Ġ+ Ġ 3 Ġ+ Ġ 7 Ġ+ Ġ 1 Ġ= Ġ 1 1 ) Ġis Ġ 2 3 Ġ- Ġ 1 1 Ġ= Ġ 1 2 . Ċ Ċ --- ĠPart ĠTwo Ġ--- Ċ Ċ Now , Ġlet 's Ġgo Ġthe Ġother Ġway . ĠIn Ġaddition Ġto Ġfinding Ġthe Ġnumber Ġof Ġcharacters Ġof Ġcode , Ġyou Ġshould Ġnow Ġencode Ġeach Ġcode Ġrepresentation Ġas Ġa Ġnew Ġstring Ġand Ġfind Ġthe Ġnumber Ġof Ġcharacters Ġof Ġthe Ġnew Ġencoded Ġrepresentation , Ġincluding Ġthe Ġsurrounding Ġdouble Ġquotes . Ċ Ċ For Ġexample : Ċ Ċ "" Ġen codes Ġto Ġ"\" \"", Ġan Ġincrease Ġfrom Ġ 2 Ġcharacters Ġto Ġ 6 . Ċ " abc " Ġen codes Ġto Ġ"\" abc \"", Ġan Ġincrease Ġfrom Ġ 5 Ġcharacters Ġto Ġ 9 . Ċ " aaa \" aaa " Ġen codes Ġto Ġ"\" aaa \\\" aaa \"", Ġan Ġincrease Ġfrom Ġ 1 0 Ġcharacters Ġto Ġ 1 6 . Ċ "\ x 2 7 " Ġen codes Ġto Ġ"\" \\ x 2 7 \"", Ġan Ġincrease Ġfrom Ġ 6 Ġcharacters Ġto Ġ 1 1 . Ċ Your Ġtask Ġis Ġto Ġfind Ġthe Ġtotal Ġnumber Ġof Ġcharacters Ġto Ġrepresent Ġthe Ġnewly Ġencoded Ġstrings Ġminus Ġthe Ġnumber Ġof Ġcharacters Ġof Ġcode Ġin Ġeach Ġoriginal Ġstring Ġliteral . ĠFor Ġexample , Ġfor Ġthe Ġstrings Ġabove , Ġthe Ġtotal Ġencoded Ġlength Ġ( 6 Ġ+ Ġ 9 Ġ+ Ġ 1 6 Ġ+ Ġ 1 1 Ġ= Ġ 4 2 ) Ġminus Ġthe Ġcharacters Ġin Ġthe Ġoriginal Ġcode Ġrepresentation Ġ( 2 3 , Ġjust Ġlike Ġin Ġthe Ġfirst Ġpart Ġof Ġthis Ġpuzzle ) Ġis Ġ 4 2 Ġ- Ġ 2 3 Ġ= Ġ 1 9 . ĊĊ Ġ*/ Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġtest Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| "" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| " abc " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| " aaa \" aaa " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| "\ x 2 7 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĊĠĠĠ Ġprintln ( calc Size Diff ( test ) Ġ== Ġmap Of (" first " Ġto Ġ 1 2 , Ġ" second " Ġto Ġ 1 9 )) ĊĊĠĠĠ Ġval Ġinput Ġ= Ġparse Input (" day 8 - input . txt ") ĊĠĠĠ Ġprintln ( calc Size Diff ( input )) Ċ } Ċ Ċ fun Ġcalc Size Diff ( input : ĠString ): ĠMap < String , ĠInt > Ġ{ ĊĠĠĠ Ġfun ĠString . encoded Count () Ġ= Ġ 2 Ġ+ Ġsum By Ġ{ Ġif Ġ( it Ġ== Ġ'\\ ' Ġ|| Ġit Ġ== Ġ'\" ') Ġ 2 Ġelse Ġ 1 Ġ} ĊĠĠĠ Ġfun ĠString . decoded Count () Ġ= Ġtrim ('" '). replace ("\\ \"", Ġ" r ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" \\\\ ", Ġ" r ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( Regex (" \\\\ x [ a - f 0 - 9 ]{ 2 } "), Ġ" r "). length ĊĊĠĠĠ Ġval Ġlines Ġ= Ġinput . split To Lines () ĊĠĠĠ Ġval Ġlength Total Ġ= Ġlines . sum By Ġ{ Ġit . length Ġ} ĊĠĠĠ Ġval Ġdecoded Total Ġ= Ġlines . sum By ( String :: decoded Count ) ĊĠĠĠ Ġval Ġencoded Total Ġ= Ġlines . sum By ( String :: encoded Count ) ĊĊĠĠĠ Ġreturn Ġmap Of (" first " Ġto Ġlength Total Ġ- Ġdecoded Total , Ġ" second " Ġto Ġencoded Total Ġ- Ġlength Total ) Ċ } Ċ