<snapdata remixID="11307891"><project name="(2020) U5L2p2-Simulation" app="Snap! 8.2, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAAAiVJREFUeF7t0sEJACAAAzHdf+gKLnGfdIHCkbttxxSIClwAo/JufwEAQUgLAJjmdw4gA2kBANP8zgFkIC0AYJrfOYAMpAUATPM7B5CBtACAaX7nADKQFgAwze8cQAbSAgCm+Z0DyEBaAMA0v3MAGUgLAJjmdw4gA2kBANP8zgFkIC0AYJrfOYAMpAUATPM7B5CBtACAaX7nADKQFgAwze8cQAbSAgCm+Z0DyEBaAMA0v3MAGUgLAJjmdw4gA2kBANP8zgFkIC0AYJrfOYAMpAUATPM7B5CBtACAaX7nADKQFgAwze8cQAbSAgCm+Z0DyEBaAMA0v3MAGUgLAJjmdw4gA2kBANP8zgFkIC0AYJrfOYAMpAUATPM7B5CBtACAaX7nADKQFgAwze8cQAbSAgCm+Z0DyEBaAMA0v3MAGUgLAJjmdw4gA2kBANP8zgFkIC0AYJrfOYAMpAUATPM7B5CBtACAaX7nADKQFgAwze8cQAbSAgCm+Z0DyEBaAMA0v3MAGUgLAJjmdw4gA2kBANP8zgFkIC0AYJrfOYAMpAUATPM7B5CBtACAaX7nADKQFgAwze8cQAbSAgCm+Z0DyEBaAMA0v3MAGUgLAJjmdw4gA2kBANP8zgFkIC0AYJrfOYAMpAUATPM7B5CBtACAaX7nADKQFgAwze8cQAbSAgCm+Z0DyEBaAMA0v3MAGUgLAJjmdw4gA2kBANP8zgFkIC0AYJrf+QOC496obByqTwAAAABJRU5ErkJggg==</thumbnail><scenes select="1"><scene name="(2020) U5L2p2-Simulation"><notes></notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="simulate disease, population: %&apos;population input&apos; percent infected: %&apos;percent initially infected input&apos; speed: %&apos;speed input&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>elapsed time</l><l>start time</l></list></block><block s="doSetVar"><l>clones ready?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><custom-block s="initialize simulation %n %n %n"><block var="population input"/><block var="percent initially infected input"/><block var="speed input"/></custom-block><block s="show"></block><block s="doRepeat"><block var="population input"/><script><block s="createClone"><l><option>myself</option></l></block></script></block><block s="hide"></block><block s="doSetVar"><l>start time</l><block s="reportDate"><l><option>time in milliseconds</option></l></block></block><block s="doSetVar"><l>clones ready?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doWaitUntil"><block s="reportVariadicEquals"><list><block var="number infected"/><block var="population input"/></list></block></block><block s="doSetVar"><l>elapsed time</l><block s="reportQuotient"><block s="reportDifference"><block s="reportDate"><l><option>time in milliseconds</option></l></block><block var="start time"/></block><l>1000</l></block></block><block s="doBroadcast"><l>vanish</l><list></list></block><block s="doReport"><block var="elapsed time"/></block></script></block-definition><block-definition s="average time for disease spread with population size: %&apos;size&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="bubble"><l></l></block><block s="doReport"><block s="reportQuotient"><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="simulate disease, population: %n percent infected: %n speed: %n"><block var="size"/><l>10</l><l>2</l></custom-block></autolambda><list></list></block><block s="reportNumbers"><l>1</l><l>10</l></block></block><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><l></l><l></l></list></block></autolambda><list></list></block></block><l>10</l></block></block></script></block-definition><block-definition s="initialize clone" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><block s="reportVariadicLessThan"><list><block var="number infected"/><block s="reportVariadicProduct"><list><block var="population"/><block s="reportQuotient"><block var="percent initially infected"/><l>100</l></block></list></block></list></block><script><block s="doChangeVar"><l>number infected</l><l>1</l></block><block s="doSetVar"><l>infected?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doSwitchToCostume"><l>sick</l></block></script></block><block s="doGotoObject"><l><option>random position</option></l></block><block s="doFaceTowards"><l><option>random position</option></l></block></script></block-definition><block-definition s="touching infected person?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doForEach"><l>neighbor</l><block s="reportGet"><l><option>neighbors</option></l></block><script><block s="doIf"><block s="reportVariadicAnd"><list><block s="reportNot"><block var="infected?"/></block><block s="reportVariadicAnd"><list><block s="reportTouchingObject"><block var="neighbor"/></block><block s="reportAskFor"><block var="neighbor"/><block s="reifyReporter"><autolambda><block var="infected?"/></autolambda><list></list></block><list></list></block></list><comment w="90" collapsed="false">You must ringify infected here. </comment></block></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><scripts><comment x="259.6491228070176" y="186.140350877193" w="338.24561403508767" collapsed="false">Why ringify? &#xD;&#xD;If you ASK (neighbor) FOR infected?, Snap! will first find the value of infected? in the current sprite and then pass that value to ASK.&#xD;&#xD;The reason ASK has that ring in its input slot is that you normally give ASK an expression that you want the other sprite to evaluate. So you have to prevent Snap! from evaluating it before calling ASK.</comment></scripts></block-definition><block-definition s="initialize simulation %&apos;pop&apos; %&apos;inf&apos; %&apos;sp&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doSetVar"><l>population</l><block var="pop"/><comment w="216.66666666666663" collapsed="true">Make global so &quot;when I start&quot; can use it.</comment></block><block s="doSetVar"><l>percent initially infected</l><block var="inf"/></block><block s="doSetVar"><l>speed</l><block var="sp"/></block><block s="doSetVar"><l>clones ready?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>number infected</l><l>0</l></block><block s="doSetVar"><l>infected?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSwitchToCostume"><l>well</l></block><block s="setScale"><l>50</l></block></script></block-definition></blocks><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="206"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="207"></list></costumes><sounds><list struct="atomic" id="208"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="-0.5276073619615829" y="-2.500173631207254" heading="90" scale="0.5" volume="100" pan="0" rotation="0" draggable="true" hidden="true" costume="1" color="80,80,80,1" pen="tip" id="213"><costumes><list id="214"><item><ref mediaID="Sprite_cst_well"></ref></item><item><ref mediaID="Sprite_cst_sick"></ref></item></list></costumes><sounds><list struct="atomic" id="215"></list></sounds><blocks></blocks><variables><variable name="infected?"><bool>false</bool></variable></variables><scripts><comment x="19.68944099378881" y="8.771929824561404" w="392.6666666666667" collapsed="false">5.2.2.1:  The most obvious hypothesis is that a larger population takes longer for everyone to get sick, supposing the rate of infection doesn&apos;t change.  But in fact the rate of infection /does/ change for a larger population in the same area, which is why low-density businesses such as hairdressers could reopen sooner than high-density ones such as churches.&#xD;&#xD;5.2.2.2.  If the space gets bigger without increasing the population, the infection rate will probably go down.</comment><script x="19.68944099378881" y="1189.7719298245606"><custom-block s="average time for disease spread with population size: %n"><l>100</l><comment w="53.333333333333336" collapsed="true">5.2.2.6</comment></custom-block></script><comment x="19.68944099378881" y="1220.105263157894" w="395.3333333333333" collapsed="false">Note the technique of mapping over the numbers from 1 to 10, without actually using the selected number, to call the simulator ten times.  It&apos;ll make us very happy if your students can write this HOF-based solution readily by this point in the course, although it&apos;s also fine if they remember that they have an AVERAGE block in their math block library.</comment><script x="19.68944099378881" y="146.77192982456097"><custom-block s="simulate disease, population: %n percent infected: %n speed: %n"><l>100</l><l>5</l><l>7</l><comment w="53.333333333333336" collapsed="true">5.2.2.3</comment></custom-block></script><comment x="22.356107660455496" y="689.1052631578941" w="395.3333333333333" collapsed="false">There are many ways to program this, of course, and our solution isn&apos;t necessarily the most elegant possible.  Bugs in our first version:&#xD;&#xD;The clones don&apos;t automatically disappear when the block reports the elapsed time.  If this were a command instead of a reporter, it could just end with a STOP ALL, which would delete all the clones at once.  Instead a WARP is required to avoid seeing them disappear one by one.&#xD;&#xD;The first version of this block got faster as more clones were infected, because only healthy clones have to detect having touched an infected one.  To fix that, this version redundantly checks neighbors for infection even for clones that are already infected.&#xD;&#xD;It took a while to figure out that in this visual simulation, the effective population density (which is what determines the speed at which the entire population becomes infected) depends on the size of the sprite&apos;s costume!  This version sets the sprite size to 50%, which gives a much more reasonable spread of times than full-size sprites.&#xD;&#xD;This isn&apos;t a bug, but note the use of MY NEIGHBORS, so that only nearby clones are tested for touching.&#xD;&#xD;Also note that INFECTED? is an instance (for this sprite only) variable, so that each clone has its own version. &#xD; </comment><script x="21.356107660455482" y="179.32748538011703"><block s="receiveGo"><comment w="53.333333333333336" collapsed="true">5.2.2.4</comment></block><block s="bubble"><l></l></block><block s="bubble"><custom-block s="simulate disease, population: %n percent infected: %n speed: %n"><l>100</l><l>5</l><l>2</l></custom-block></block><block s="show"></block></script><script x="19.02277432712215" y="290.7719298245614"><block s="receiveOnClone"><comment w="53.333333333333336" collapsed="true">5.2.2.4</comment></block><custom-block s="initialize clone"></custom-block><block s="doWaitUntil"><block var="clones ready?"/></block><block s="doUntil"><block s="reportVariadicEquals"><list><block var="number infected"/><block var="population"/></list></block><script><block s="forward"><block var="speed"/></block><block s="bounceOffEdge"></block><block s="doWarp"><script><block s="doIf"><custom-block s="touching infected person?"></custom-block><script><block s="doIf"><block s="reportNot"><block var="infected?"/></block><script><block s="doChangeVar"><l>number infected</l><l>1</l></block></script></block><block s="doSetVar"><l>infected?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doSwitchToCostume"><l>sick</l></block></script></block></script></block></script></block></script><script x="17.35610766045548" y="619.7719298245612"><block s="receiveMessage"><l>vanish</l><list></list><comment w="53.333333333333336" collapsed="true">5.2.2.4</comment></block><block s="removeClone"></block></script><comment x="20.356107660455493" y="1013.1052631578939" w="394.6666666666667" collapsed="false">5.2.2.5:  The most obviously unrealistic assumption is that an infected person remains infected forever, neither dying nor getting well.  This makes our simulation useless in a real situation; one of the big unanswered questions as we write this is the death rate among people who get infected.  Most likely there are many people who get infected but have no symptoms or easily managed (mild) symptoms and so don&apos;t show up at the hospital for treatment.  As a result, we know only the rate at which people with serious symptoms die.  Another very important simplifying assumption is that everyone who comes in contact with an infected person is infected.  In reality, not only is there a less-than-100% rate, but the rate differs in different populations; old people, for example, are more at risk.  More answers are possible.</comment><comment x="19.68944099378881" y="1305.4385964912274" w="390.6666666666667" collapsed="false">5.2.2.7:  Students will get different numbers depending on the speed of their computers. We get 10.76, 4.78, 2.94, and 1.60 seconds.  The effect of population density on the rate of infection turns out to be more important than the fact that more people means more infections needed to include everyone.  It&apos;s tempting to say that time ≈ 450/size, but if you multiply it out, the speedup for larger populations is a bit greater than that formula would imply.&#xD;&#xD;5.2.2.8:  The best way to investigate such questions is to reprogram the simulation and see how varying various parameters affects the result.  If only some encounters lead to infection, does everyone still eventually get sick?  What if people recover after five cycles?  What if some fraction of the population is naturally immune?  And so on.</comment><comment x="539.4736842105264" y="19.29824561403509" w="90" collapsed="false">What is ringify? Look at the example below:</comment><script x="560.2631578947369" y="94.08187134502924"><block s="reportVariadicSum"><list><l>5</l><l>3</l></list></block></script><script x="550.6842105263158" y="122.5906432748538"><block s="reifyPredicate"><autolambda><block s="reportVariadicSum"><list><l>5</l><l>3</l></list></block></autolambda><list></list></block></script><comment x="547.3684210526317" y="158.77192982456143" w="171.57894736842118" collapsed="false">What a ring means is that the desired value is the block/script itself, rather than the result of calling the block/script.</comment></scripts></sprite><watcher var="number infected" style="normal" x="3.395833333332567" y="13.583334012500027" color="243,118,29" hidden="true"/><watcher scope="Sprite" var="infected?" style="normal" x="3.395833333332567" y="12.452437106918213" color="243,118,29" hidden="true"/></sprites></stage><variables><variable name="number infected"><l>91</l></variable><variable name="population"><l>100</l></variable><variable name="percent initially infected"><l>5</l></variable><variable name="speed"><l>2</l></variable><variable name="clones ready?"><bool>true</bool></variable></variables></scene></scenes></project><media name="(2020) U5L2p2-Simulation" app="Snap! 8.2, https://snap.berkeley.edu" version="2"><costume name="well" center-x="12" center-y="26" image="data:image/png;base64,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" mediaID="Sprite_cst_well"/><costume name="sick" center-x="12" center-y="26" image="data:image/png;base64,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" mediaID="Sprite_cst_sick"/></media></snapdata>