package Ġio . github . oc ir ne . ray . challenge . canvas Ċ Ċ import Ġio . github . oc ir ne . ray . challenge . tuples . BLACK Ċ import Ġio . github . oc ir ne . ray . challenge . tuples . Color Ċ import Ġjava . io . PrintWriter Ċ Ċ class ĠCanvas ( val Ġwidth : ĠInt , Ġval Ġheight : ĠInt , Ġinitial Color : ĠColor = BLACK ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġscale Ġ= Ġ 2 5 6 ĊĊĠĠĠ Ġprivate Ġval Ġpixels Ġ= ĠArray ( width ) Ġ{ ĠArray ( height ) Ġ{ Ġinitial Color Ġ} Ġ} ĊĊĠĠĠ Ġfun Ġpixel At ( x : ĠInt , Ġy : ĠInt ): ĠColor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpixels [ x ][ y ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite Pixel ( x : ĠInt , Ġy : ĠInt , Ġcolor : ĠColor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpixels [ x ][ y ] Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto PP M ( out : ĠPrintWriter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout . println (" P 3 ") ĊĠĠĠĠĠĠĠ Ġout . println ("$ width Ġ$ height ") ĊĠĠĠĠĠĠĠ Ġout . println (" 2 5 5 ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( pixel AsString ( pixels [ x ][ y ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpixel AsString ( pixel : ĠColor ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġscale And Clamp ( pixel . red ) ĊĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġscale And Clamp ( pixel . green ) ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġscale And Clamp ( pixel . blue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ r Ġ$ g Ġ$ b " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠNote : ĠIn Ġ" week end " Ġthere Ġis Ġan Ġaddition ally Ġsqrt ĊĠĠĠ Ġprivate Ġfun Ġscale And Clamp ( channel : ĠDouble ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclamp (( channel Ġ* Ġscale ). toInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclamp ( value : ĠInt , Ġmin : ĠInt = 0 , Ġmax : ĠInt = 2 5 5 ): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ< Ġmin ) Ġmin Ġelse Ġif Ġ( value Ġ> Ġmax ) Ġmax Ġelse Ġvalue Ċ } Ċ