TLDR: Направих симулация на избухване на епидемия, която може да се играе тук.

Преброяване на резултатите

Ето как преброих резултатите, които бяха въведени в диаграмите ми и актуализирани на екрана. Функцията за броене се изпълнява всеки път, след като съм актуализирал състоянието на всяко от моите зърна в света.

function count() {
  sCount = 0
  iCount = 0
  dCount = 0
  qCount = 0
  rCount = 0
  zCount = 0
  loopWorld( function( i ) {
   switch( world[ i ].color ) {
    case sColor:
     sCount++
     break
    case iColor:
     iCount++
     break
    case dColor:
     dCount++
     break
    case qColor:
     qCount++
     break
    case rColor:
     rCount++
     break
    case zColor:
     zCount++
     break
   }
  } )
  sText.textContent = `Susceptible: ${ sCount }`
  iText.textContent = `Infected: ${ iCount }`
  dText.textContent = `Detected: ${ dCount }`
  qText.textContent = `Quarantined: ${ qCount }`
  rText.textContent = `Recovered: ${ rCount }`
  zText.textContent = `Dead: ${ zCount }`
  tText.textContent = `Days: ${ time }`
 }

След като настроих цялото това нещо, разбрах, че преминавам през всяко зърно и отчитам състоянието по време на всеки кадър. Не съм много сигурен дали това е най-оптималния начин да го направя. Какво ще стане, ако актуализирам само броя, които се променят всеки път, когато статусът на всяко от моите зърна се променя?

Единственият проблем, който не промених това, е защото знам, че със сигурност ще има дупка от червеи от грешки, ако актуализирам броя си само за всяка отделна промяна, а не като цяло. Ще ми трябват допълнителни няколко часа, за да се опитам да пренапиша промяната на състоянието си, така че да управлява актуализацията на броя по точен начин. И не съм сигурен дали в края на всички тези проблеми ще бъде ли толкова по-ефективно или просто спестявам около 1ms.

Но ако пишете това от нулата, надявам се, че можете да обмислите да броите статуса един по един като промяна на статуса, вместо да броите всичко наведнъж, независимо от промените.