package Ġsh mp . visual izer . text Ċ Ċ import Ġsh mp . simulation . C ult ures World Ċ import Ġsh mp . simulation . culture . aspect . Aspect Ċ import Ġsh mp . simulation . culture . group . Group Con glo mer ate Ċ import Ġsh mp . simulation . culture . group . centers . Group Ċ import Ġsh mp . simulation . culture . group . centers . Trait Ċ import Ġsh mp . simulation . space . resource . Resource Ċ import Ġsh mp . utils . ch omp To Size Ċ import Ġsh mp . visual izer . print info . Con glo mer ate Print Info ĊĊ Ċ fun Ġprint Pro duced ( group : ĠGroup Con glo mer ate ) Ġ= Ġgroup . sub groups ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . culture Center . aspect Center . aspect Pool . con verse Wrappers Ġ} ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . pro duced Resources Ġ} ĊĠĠĠĠĠĠĠ Ġ. distinct By Ġ{ Ġit . fullName Ġ} ĊĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . fullName Ġ} ĊĠĠĠĠĠĠĠ Ġ. join ToString Ġ{ Ġit . fullName Ġ} Ċ Ċ fun Ġprint Applicable Resources ( aspect : ĠAs pect , Ġresources : ĠCollection < Resource >) Ġ= Ġresources ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . genome . conversion Core . action Conversion . containsKey ( aspect . core . resource Action ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. join ToString Ġ{ Ġit . fullName Ġ} Ċ Ċ fun Ġoutput Group ( group : ĠGroup ) Ġ= Ġ"$ group " Ċ Ċ fun Ġprinted Con glo mer ates ( con glo mer ates : ĠList < Group Con glo mer ate >, Ġinfo : ĠC ong lo mer ate Print Info ): ĠString Ġ{ ĊĠĠĠ Ġval Ġcon glo mer ates To Print Ġ= Ġ 5 ĊĠĠĠ Ġval Ġmain Ġ= ĠStringBuilder () ĊĠĠĠ Ġfor Ġ( group Ġin Ġcon glo mer ates . take Last ( con glo mer ates To Print )) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġif Ġ( group . state Ġ=== ĠGroup Con glo mer ate . State . Dead ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( info . get Con glo mer ate Symbol ( group )). append (" Ġ"). append ( group . name ). append (" Ġ\ u 0 0 1 b [ 3 1 m ") ĊĠĠĠĠĠĠĠ Ġval Ġaspects Ġ= Ġgroup . aspect s . sorted By Descending Ġ{ Ġit . useful ness Ġ}. take ( 1 0 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( aspect Ġin Ġaspects ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( aspect . useful ness Ġ<= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append (" (" ). append ( aspect . name ). append (" Ġ"). append ( aspect . useful ness ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" ) Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ\ u 0 0 1 b [ 3 2 m \ n ") ĊĊĠĠĠĠĠĠĠ Ġgroup . culture Aspect s . take ( 1 0 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append (" ($ it )") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ\ u 0 0 1 b [ 3 3 m \ n ") ĊĠĠĠĠĠĠĠ Ġgroup . me mes . sorted By Descending Ġ{ Ġit . import ance Ġ}. take ( 1 0 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append (" ($ it Ġ${ it . import ance }) ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstringBuilder . append (" Ġ\ u 0 0 1 b [ 3 9 m \ n ") ĊĊĠĠĠĠĠĠĠ Ġval Ġhas G rown Ġ= Ġgroup . population Ġ> Ġinfo . pop ulations [ group ] Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( if Ġ( has G rown ) Ġ"\ u 0 0 1 b [ 3 2 m " Ġelse Ġ"\ u 0 0 1 b [ 3 1 m ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" population =${ group . population }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( if Ġ( has G rown ) Ġ" âĨ ĳ " Ġelse Ġ" âĨ ĵ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ u 0 0 1 b [ 3 9 m \ n \ n ") ĊĠĠĠĠĠĠĠ Ġinfo . pop ulations [ group ] Ġ= Ġgroup . population ĊĠĠĠĠĠĠĠ Ġmain . append ( ch omp To Size ( string Builder . toString (), Ġ 2 2 0 )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġmain . toString () Ċ } Ċ Ċ fun Ġprint Con glo mer ate Relations ( con glo mer ate 1 : ĠGroup Con glo mer ate , Ġcon glo mer ate 2 : ĠGroup Con glo mer ate ) Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġ| ${ print Con glo mer ate Relation ( con glo mer ate 1 , Ġcon glo mer ate 2 )} ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ| ${ print Con glo mer ate Relation ( con glo mer ate 2 , Ġcon glo mer ate 1 )} ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () Ċ Ċ fun Ġprint Con glo mer ate Relation ( con glo mer ate 1 : ĠGroup Con glo mer ate , Ġcon glo mer ate 2 : ĠGroup Con glo mer ate ) Ġ= ĊĠĠĠĠĠĠĠ Ġcon glo mer ate 1 . sub groups . join ToString ("\ n \ n ") Ġ{ Ġg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ${ g . name } Ġ- Ġ${ g . process Center . type }: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| average Ġ- Ġ${ g . relation Center . get Avg Con glo mer ate Relation ( con glo mer ate 2 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| min Ġ- ĠĠĠĠ Ġ${ g . relation Center . getMin Con glo mer ate Relation ( con glo mer ate 2 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| max Ġ- ĠĠĠĠ Ġ${ g . relation Center . getMax Con glo mer ate Relation ( con glo mer ate 2 )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| In Ġparticular : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ g . relation Center . get Con glo mer ate Groups ( con glo mer ate 2 ). join ToString ("\ n ")} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ fun Ġprint Group Statistics ( world : ĠC ult ures World ): ĠString Ġ{ ĊĠĠĠ Ġval Ġcon glo mer ates Ġ= Ġworld . groups . filter Ġ{ Ġit . state Ġ== ĠGroup Con glo mer ate . State . Live Ġ} ĊĊĠĠĠ Ġreturn Ġ""" CON G LO MER ATES : ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| L argest Ġpopulation : Ġ Ġ${ con glo mer ates . max By OrNull Ġ{ Ġit . population Ġ} ?. let Ġ{ Ġg Ġ-> Ġ"${ g . name } Ġ- Ġ${ g . population }" Ġ}} ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| L argest Ġt erritory : ĠĠ Ġ${ con glo mer ates . max By OrNull Ġ{ Ġit . ter rit ory . size Ġ} ?. let Ġ{ Ġg Ġ-> Ġ"${ g . name } Ġ- Ġ${ g . ter rit ory . size }" Ġ}} ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Most Ġgroups : ĠĠĠĠĠĠĠĠ Ġ${ con glo mer ates . max By OrNull Ġ{ Ġit . sub groups . size Ġ} ?. let Ġ{ Ġg Ġ-> Ġ"${ g . name } Ġ- Ġ${ g . sub groups . size }" Ġ}} ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Max Ġfree Ġpopulation : Ġ${ ĊĠĠĠĠĠĠĠ Ġcon glo mer ates . map Ġ{ Ġit Ġto Ġit . sub groups . sum By Ġ{ Ġg Ġ-> Ġg . population Center . free Population Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max By OrNull Ġ{ Ġit . second Ġ} ?. let Ġ{ Ġ( g , Ġn ) Ġ-> Ġ"${ g . name } Ġ- Ġ$ n " Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ print Group Character Statistics ( con glo mer ates )} ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| GROUP S : ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| R ic hest Ġcommon Ġsense : ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ ĊĠĠĠĠĠĠĠ Ġcon glo mer ates . flatMap Ġ{ Ġit . sub groups Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max By OrNull Ġ{ Ġit . culture Center . culture Aspect Center . reason Field . common Reason ings . reason ings . size Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġg Ġ-> Ġ"${ g . name } Ġ- Ġ${ g . culture Center . culture Aspect Center . reason Field . common Reason ings }" Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Most Ġadditional Ġconversions : ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ ĊĠĠĠĠĠĠĠ Ġcon glo mer ates . flatMap Ġ{ Ġit . sub groups Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max By OrNull Ġ{ Ġit . culture Center . culture Aspect Center . reason Field . special Conversions . size Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ g . name } Ġ- Ġ${ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . culture Center . culture Aspect Center . reason Field . special Conversions . join ToString ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () Ċ } Ċ Ċ fun Ġprint Group Character Statistics ( con glo mer ates : ĠList < Group Con glo mer ate >) Ġ= ĊĠĠĠĠĠĠĠ ĠTrait . values (). join ToString ("\ n \ n ") Ġ{ Ġtrait Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavg Traits Ġ= Ġcon glo mer ates ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . sub groups . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġc Ġ-> Ġc Ġto Ġc . sub groups . map Ġ{ Ġit . culture Center . trait Center . processed Value ( trait ) Ġ}. average () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Str Ġ= Ġavg Traits . max By OrNull Ġ{ Ġit . second Ġ} ?. let Ġ{ Ġ( g , Ġa ) Ġ-> Ġ" Max Ġ$ trait : ĠĠ Ġ${ g . name } Ġ- Ġ$ a " Ġ} Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Str Ġ= Ġavg Traits . min By OrNull Ġ{ Ġit . second Ġ} ?. let Ġ{ Ġ( g , Ġa ) Ġ-> Ġ" Min Ġ$ trait : ĠĠ Ġ${ g . name } Ġ- Ġ$ a " Ġ} Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Str Ġ+ Ġ"\ n " Ġ+ Ġmin Str ĊĠĠĠĠĠĠĠ Ġ} Ċ