package Ġcom . cur tis lb . ad vent of code . year 2 0 2 0 . day 1 9 . rule Ċ Ċ /** Ċ Ġ* ĠTODO Ċ Ġ*/ Ċ private Ġval ĠL ITERAL _ RULE _ REGEX Ġ= ĠRegex (""" ". * """ ") Ċ Ċ /** Ċ Ġ* ĠTODO Ċ Ġ*/ Ċ fun Ġparse Rule ( ĊĠĠĠ Ġrule : ĠString , ĊĠĠĠ Ġrule Strings : ĠMap < Int , ĠString >, ĊĠĠĠ Ġparsed Rules : ĠMutable Map < Int , ĠString > Ġ= Ġmutable Map Of () Ċ ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ ĠL ITERAL _ RULE _ REGEX . matches ( rule ) Ġ-> Ġrule . trim ('" ') ĊĊĠĠĠĠĠĠĠ Ġ' |' Ġin Ġrule Ġ-> Ġrule . split ('| '). join ToString ( separator Ġ= Ġ"| ") Ġ{ Ġsub Rule Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"( ?: ${ parse Rule ( sub Rule . trim (), Ġrule Strings , Ġparsed Rules )}) " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġrule . split (' Ġ'). map Ġ{ Ġit . toInt () Ġ}. join ToString ( separator Ġ= Ġ"") Ġ{ Ġrule Key Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parsed Rules [ rule Key ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Rules [ rule Key ] Ġ= Ġparse Rule ( rule Strings [ rule Key ] !! , Ġrule Strings , Ġparsed Rules ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"( ?: ${ parsed Rules [ rule Key ]}) " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ