package Ġcom . blo id onia . ad vent . day 2 2 Ċ Ċ import Ġcom . blo id onia . ad vent . read List Ċ Ċ data Ġclass ĠCube ( val Ġon : ĠBoolean , Ġval Ġx : ĠInt Range , Ġval Ġy : ĠInt Range , Ġval Ġz : ĠInt Range ) Ċ Ċ fun ĠString . to Cube () Ġ= Ġthis . split (" Ġ", Ġlimit Ġ= Ġ 2 ). let Ġ{ Ġ( type , Ġranges ) Ġ-> ĊĠĠĠ Ġranges . split (",", Ġlimit Ġ= Ġ 3 ). let Ġ{ Ġ( x , Ġy , Ġz ) Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġxs Ġ= Ġx . split (" =", Ġlimit Ġ= Ġ 2 ). last (). split ("\\ . \\. ". to Pattern (), Ġlimit Ġ= Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġys Ġ= Ġy . split (" =", Ġlimit Ġ= Ġ 2 ). last (). split ("\\ . \\. ". to Pattern (), Ġlimit Ġ= Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġz s Ġ= Ġz . split (" =", Ġlimit Ġ= Ġ 2 ). last (). split ("\\ . \\. ". to Pattern (), Ġlimit Ġ= Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠCube ( type Ġ== Ġ" on ", Ġxs [ 0 ]. toInt () .. xs [ 1 ]. toInt (), Ġys [ 0 ]. toInt () .. ys [ 1 ]. toInt (), Ġz s [ 0 ]. toInt () .. zs [ 1 ]. toInt ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSpace ( private Ġval Ġc ubes : ĠList < Cube >) Ġ{ ĊĠĠĠ Ġfun Ġis On ( x : ĠInt , Ġy : ĠInt , Ġz : ĠInt ): ĠBoolean Ġ= Ġc ubes . fold ( false ) Ġ{ Ġis On , Ġcube Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( cube . x . contains ( x ) Ġ&& Ġcube . y . contains ( y ) Ġ&& Ġcube . z . contains ( z )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcube . on ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis On ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġc ubes Ġ= ĠSpace ( read List ("/ day 2 2 input . txt ") Ġ{ Ġit . to Cube () Ġ}) ĊĠĠĠ Ġval Ġpart 1 Ġ= ĊĠĠĠĠĠĠĠ Ġ(- 5 0 .. 5 0 ). flatMap Ġ{ Ġx Ġ-> Ġ(- 5 0 .. 5 0 ). flatMap Ġ{ Ġy Ġ-> Ġ(- 5 0 .. 5 0 ). map Ġ{ Ġz Ġ-> Ġc ubes . is On ( x , Ġy , Ġz ) Ġ} Ġ} Ġ}. count Ġ{ Ġit Ġ} ĊĠĠĠ Ġprintln ( part 1 ) Ċ }