/* Ċ Ġ* Ġkotlin - pe - solutions Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 Ġsh un su ke . t sum ori Ċ Ġ* Ċ Ġ* ĠReleased Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ġsee Ġhttps :// opensource . org / licenses / MIT Ċ Ġ*/ ĊĊ Ċ package Ġcom . example . kotlin pes olution s . solver . p 0 0 1 _ 1 0 0 Ċ Ċ import Ġcom . example . kotlin pes olution s . library . Num erical Calculator Ċ import Ġcom . example . kotlin pes olution s . solver . Project Euler Solver Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġkotlin . math . floor Ċ import Ġkotlin . math . sqrt Ċ Ċ @ Component Ċ class ĠP 0 8 6 Solver ( ĊĠĠĠ Ġprivate Ġval Ġnumerical Calculator : ĠNum erical Calculator Ċ ) Ġ: ĠProject Euler Solver Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrun (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbound Ġ= Ġ 1 _ 0 0 0 _ 0 0 0 ĊĠĠĠĠĠĠĠ Ġvar Ġm Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġcount Patterns ( m ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġbound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġlike Ġp 7 5 ĊĠĠĠ Ġprivate Ġfun Ġcount Patterns ( max Side L : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Max Ġ= Ġfloor ( sqrt ( max Side L Ġ* Ġ 2 . 0 )). toInt () ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( m Ġin Ġ 1 .. m Max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġ 1 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( m Ġ+ Ġn ) Ġ% Ġ 2 Ġ== Ġ 1 Ġ&& Ġnumerical Calculator . gcd ( m , Ġn ) Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġab Or C 1 Ġ= Ġm Ġ* Ġm Ġ- Ġn Ġ* Ġn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġab Or C 2 Ġ= Ġ 2 Ġ* Ġm Ġ* Ġn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. max Side L Ġ/ Ġab Or C 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ+= Ġcount Patterns ( ab Or C 2 Ġ* Ġi , Ġab Or C 1 Ġ* Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. max Side L Ġ/ Ġab Or C 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ+= Ġcount Patterns ( ab Or C 1 Ġ* Ġi , Ġab Or C 2 Ġ* Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcount ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcount Patterns ( ab : ĠInt , Ġc : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( ab Ġ> Ġ 2 Ġ* Ġc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( c Ġ>= Ġab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġab Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ab Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ+ Ġc Ġ- Ġab Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ- Ġab Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ