<snapdata remixID="8668694"><project name='ML Pong (SnAIp)' app='Snap! 5.1, http://snap.berkeley.edu' version='1'>
  <notes>Reinforcement Learning in Snap! to make your Pong-Paddle learn how to play :) 
</notes>
  <thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAADrElEQVR4nO3cu0+TARSG8S5qVbRYQaNWUJRoEGMCOFSNxkRjvJvaxgsYF4gsoCTe4qSJumgCcVVXZdC443/iZWAlbKzAcarRpAw9Hnj9vj5NfmPTt+QZThsg8+XzJwNUMuoBaGwECKlMdvUqA1QIEFIEGODJo4f25NFDu14py7ckDQEGqN4zjx/cl29JGgIMQIB+BAgpAoQUAUKKAANwA/oRYAAC9CPAAAToR4CQIkBIEWCAvt4e6+vtsa79++RbkoYAA3AD+hFgAAL0I8AAhe3brLB9m21tbZVvSRoChBQBQooAA3AD+hFgAAL0I8AABOhHgJAiQEgRIKQIMAA3oB8BBiBAPwIMcHug324P9NuZ06fkW5KGACFFgJAiwADcgH4EGIAA/QgwAAH6ESCkCBBSBAgpAgzADehHgAEI0I8AAxCgHwFCigAhRYABhocGbXho0C6eOyvfkjQEGIAb0I8AAxCgHwFCigAhRYCQIsAA3IB+BBiAAP0IMAAB+hEgpAgQUgQYoHNPh3Xu6bC2wg75lqQhwADcgH4EGIAA/QgwQPeBLus+0GV7O3bLtyQNAUKq7gA3Nq233IYmy21oko9H8tUd4Pz8vFUf+eac/A38D7gB/QgwAAH6EWAAAvQjQEgRIKQIEFIEGIAb0I8AAxCgHwEGGBsdsbHREStdviTfkjQECKnUBbi7vc3ev3trX6em7O7oiK3LrpFvwtJSFeCxI0VbWFiwPx+zs7PLHuHkxw82+fGD3R+7J/8ZJE2qApybm7Naj9evXi3r6/IhxC81AW5p2VwzPjOzmZmZZX1tAvRLTYCtm/NLBjg9PS3fh9pSE2B29Sr7/u1bzQAr5avybagtVQG25DfZzx8/fu9bXFy0ly9eyHdhaakKsGpX20473Ne7Yr+1zQ3ol8oAVxoB+hFgAAL0qzvA0pUrVi6VrFwq2fq1WfkbQLLxZ5mQIsAA1yplu1Yp28kTx+VbFC5eOP/X1171PJcAAzT6DUiAYgRIgBAiQEgRIKQIUIwbkAClCJAApQiQACFEgJAiQLF8c87yzbmG/a+xBCjGDUiAUgRIgFJHi0U7WizaoYPd8i0KBAgpAoQUAYpxAxKgFAESoBQBEiCE2ncW7OaN67/V81wChBQBQooAAzT6DfgvCDAAAfoRYIDnz57a82dP7Vb/TfmWpCFASBEgpAgwwJuJcXszMW53hgblW5KGAAPwIcSPAAMQoB8BQooAIUWAkMpU7xdAgQAhRYCQ+gVPnqmr476kiQAAAABJRU5ErkJggg==</thumbnail>
  <stage inheritance='true' id='1' volume='100' height='360' tempo='60' lines='round' width='480' name='Stage' sublistIDs='false' threadsafe='false' codify='false' color='255,255,255,1' scheduled='false' pan='0' ternary='true' costume='1'>
    <pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAACtUlEQVR4nO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Bo3+AAF/RMkcAAAAAElFTkSuQmCC</pentrails>
    <costumes>
      <list id='2'>
        <item>
          <costume center-x='240' image='data:image/png;base64,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' center-y='180' name='Hintergrund' id='3'/>
        </item>
      </list>
    </costumes>
    <sounds>
      <list struct='atomic' id='4'/>
    </sounds>
    <variables/>
    <blocks/>
    <scripts/>
    <sprites>
      <sprite x='-77.16538673152377' pen='tip' id='9' y='-44.465013149860965' name='Ball' idx='3' volume='100' rotation='1' scale='0.7' heading='196' draggable='true' color='80,80,80,1' pan='0' costume='1'>
        <costumes>
          <list id='10'>
            <item>
              <costume center-x='15' image='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHNuYXA9Imh0dHA6Ly9zbmFwLmJlcmtlbGV5LmVkdS9ydW4iIHZlcnNpb249IjEuMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaW4gbWVldCIgdmlld0JveD0iMTE4OSA1ODQgMzAgMzAiIHdpZHRoPSIzMCIgaGVpZ2h0PSIzMCI+PGVsbGlwc2Ugc3Ryb2tlPSJub25lIiBmaWxsPSJyZ2IoMjU1LDI1NSwyNTUpIiBwcm90b3R5cGU9IlZlY3RvckVsbGlwc2UiIGN4PSIxMjA0IiBjeT0iNTk5IiByeD0iMTUiIHJ5PSIxNSIvPjwvc3ZnPg==' center-y='15' name='ball' id='11'/>
            </item>
          </list>
        </costumes>
        <sounds>
          <list struct='atomic' id='12'/>
        </sounds>
        <blocks/>
        <variables/>
        <scripts>
          <script x='20' y='20'>
            <block s='receiveGo'/>
            <block s='doSetVar'>
              <l>scoreLeft</l>
              <l>0</l>
            </block>
            <block s='doSetVar'>
              <l>scoreRight</l>
              <l>0</l>
            </block>
            <block s='setScale'>
              <l>70</l>
            </block>
            <block s='doFaceTowards'>
              <l>playerLeft</l>
            </block>
            <block s='doForever'>
              <script>
                <block s='forward'>
                  <l>4</l>
                </block>
                <block s='bounceOffEdge'/>
                <block s='doIf'>
                  <block s='reportLessThan'>
                    <block s='xPosition'/>
                    <l>-220</l>
                  </block>
                  <script>
                    <block s='doChangeVar'>
                      <l>scoreRight</l>
                      <l>1</l>
                    </block>
                    <block s='gotoXY'>
                      <l>0</l>
                      <l>0</l>
                    </block>
                    <block s='doFaceTowards'>
                      <l>playerLeft</l>
                    </block>
                    <block s='doTellTo'>
                      <l>playerRight</l>
                      <block s='reifyScript'>
                        <script>
                          <block s='setYPosition'>
                            <l>0</l>
                          </block>
                        </script>
                        <list/>
                      </block>
                      <list/>
                    </block>
                    <block s='doWait'>
                      <l>1</l>
                    </block>
                  </script>
                </block>
                <block s='doIf'>
                  <block s='reportGreaterThan'>
                    <block s='xPosition'/>
                    <l>220</l>
                  </block>
                  <script>
                    <block s='doChangeVar'>
                      <l>scoreLeft</l>
                      <l>1</l>
                    </block>
                    <block s='gotoXY'>
                      <l>0</l>
                      <l>0</l>
                    </block>
                    <block s='setHeading'>
                      <block s='reportRandom'>
                        <l>45</l>
                        <l>125</l>
                      </block>
                    </block>
                    <block s='doTellTo'>
                      <l>playerRight</l>
                      <block s='reifyScript'>
                        <script>
                          <block s='setYPosition'>
                            <l>0</l>
                          </block>
                        </script>
                        <list/>
                      </block>
                      <list/>
                    </block>
                    <block s='doWait'>
                      <l>1</l>
                    </block>
                  </script>
                </block>
                <block s='doIf'>
                  <block s='reportTouchingObject'>
                    <l>playerLeft</l>
                  </block>
                  <script>
                    <block s='doFaceTowards'>
                      <l>playerLeft</l>
                    </block>
                    <block s='turn'>
                      <l>180</l>
                    </block>
                  </script>
                </block>
                <block s='doIf'>
                  <block s='reportTouchingObject'>
                    <l>playerRight</l>
                  </block>
                  <script>
                    <block s='doFaceTowards'>
                      <l>playerRight</l>
                    </block>
                    <block s='turn'>
                      <l>180</l>
                    </block>
                  </script>
                </block>
              </script>
            </block>
          </script>
        </scripts>
      </sprite>
      <sprite x='195.16483174809673' pen='tip' id='116' y='-120' name='playerRight' idx='1' volume='100' rotation='1' scale='1' heading='90' draggable='true' color='0,252.45,237.303,1' pan='0' costume='1'>
        <costumes>
          <list id='117'>
            <item>
              <costume center-x='-2' image='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHNuYXA9Imh0dHA6Ly9zbmFwLmJlcmtlbGV5LmVkdS9ydW4iIHZlcnNpb249IjEuMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaW4gbWVldCIgdmlld0JveD0iMTE4NiA1MzIgMTEgNjEiIHdpZHRoPSIxMSIgaGVpZ2h0PSI2MSI+PHJlY3Qgc3Ryb2tlPSJub25lIiBmaWxsPSJyZ2IoMjU1LDI1NSwyNTUpIiBwcm90b3R5cGU9IlZlY3RvclJlY3RhbmdsZSIgd2lkdGg9IjExIiBoZWlnaHQ9IjYxIiB4PSIxMTg2IiB5PSI1MzIiLz48L3N2Zz4=' center-y='51' name='costume2' id='118'/>
            </item>
          </list>
        </costumes>
        <sounds>
          <list struct='atomic' id='119'/>
        </sounds>
        <blocks/>
        <variables/>
        <scripts>
          <script x='20' y='20.000000000000025'>
            <block s='receiveGo'/>
            <block s='doSetVar'>
              <l>model</l>
              <custom-block s='create model learning rate: %s discount factor: %s randomize: %s list of available actions: %l'>
                <l>0.75</l>
                <l>0.5</l>
                <l>0.05</l>
                <block s='reportNewList'>
                  <list>
                    <block s='reifyScript'>
                      <script>
                        <custom-block s='moveUp'/>
                      </script>
                      <list/>
                    </block>
                    <block s='reifyScript'>
                      <script>
                        <custom-block s='moveDown'/>
                      </script>
                      <list/>
                    </block>
                    <block s='reifyScript'>
                      <script>
                        <custom-block s='doNothing'/>
                      </script>
                      <list/>
                    </block>
                  </list>
                </block>
              </custom-block>
              <comment collapsed='false' w='422'>Initialize the model.</comment>
            </block>
            <block s='doDeclareVariables'>
              <list>
                <l>best move</l>
                <l>reward</l>
                <l>oldState</l>
              </list>
            </block>
            <block s='doForever'>
              <script>
                <block s='doSetVar'>
                  <l>oldState</l>
                  <block s='reportRound'>
                    <block s='reportQuotient'>
                      <block s='reportDifference'>
                        <block s='yPosition'/>
                        <block s='reportAttributeOf'>
                          <l>
                            <option>y position</option>
                          </l>
                          <l>Ball</l>
                        </block>
                      </block>
                      <l>10</l>
                    </block>
                  </block>
                  <comment collapsed='false' w='495.9999999999999'>Store the current state depending on the difference between my y position and the y position of the ball</comment>
                </block>
                <block s='doSetVar'>
                  <l>best move</l>
                  <custom-block s='best action state: %s model: %s'>
                    <block var='oldState'/>
                    <block var='model'/>
                  </custom-block>
                  <comment collapsed='false' w='364.99999999999966'>Get the best move for the current state. If we haven&apos;t encountered the current state before, we initialize it with zeroes and behave randomly. </comment>
                </block>
                <block s='doRun'>
                  <block var='best move'/>
                  <list/>
                </block>
                <block s='doSetVar'>
                  <l>reward</l>
                  <custom-block s='if %b then %anyUE else %anyUE'>
                    <block s='reportTouchingObject'>
                      <l>Ball</l>
                    </block>
                    <l>2</l>
                    <custom-block s='if %b then %anyUE else %anyUE'>
                      <block s='reportLessThan'>
                        <l>219</l>
                        <block s='reportAttributeOf'>
                          <l>
                            <option>x position</option>
                          </l>
                          <l>Ball</l>
                        </block>
                      </block>
                      <block s='reportProduct'>
                        <l>-5</l>
                        <block s='reportRelationTo'>
                          <l>
                            <option>distance</option>
                          </l>
                          <l>Ball</l>
                        </block>
                      </block>
                      <l>0</l>
                    </custom-block>
                  </custom-block>
                  <comment collapsed='false' w='437.99999999999983'>Calculate reward based on whether we managed to touch the ball or not. If we didn&apos;t manage to touch the ball, we get punished depending on the distance to the ball.</comment>
                </block>
                <custom-block s='update model %l old state: %s new state: %s reward: %s action performed: %s'>
                  <block var='model'/>
                  <block var='oldState'/>
                  <block s='reportRound'>
                    <block s='reportQuotient'>
                      <block s='reportDifference'>
                        <block s='yPosition'/>
                        <block s='reportAttributeOf'>
                          <l>
                            <option>y position</option>
                          </l>
                          <l>Ball</l>
                        </block>
                      </block>
                      <l>10</l>
                    </block>
                  </block>
                  <block var='reward'/>
                  <block var='best move'/>
                  <comment collapsed='false' w='449.99999999999994'>Update the table that stores states and chances for behavior based on the reward we got from performing the "best move" in the current state.</comment>
                </custom-block>
              </script>
            </block>
          </script>
        </scripts>
      </sprite>
      <sprite x='-205.95077518832045' pen='tip' id='233' y='-53.914086238817845' name='playerLeft' idx='2' volume='100' rotation='1' scale='1' heading='90' draggable='true' color='137.70000000000002,24.78599999999999,0,1' pan='0' costume='1'>
        <costumes>
          <list id='234'>
            <item>
              <costume center-x='-2' image='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHNuYXA9Imh0dHA6Ly9zbmFwLmJlcmtlbGV5LmVkdS9ydW4iIHZlcnNpb249IjEuMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaW4gbWVldCIgdmlld0JveD0iMTE4NiA1MzIgMTEgNjEiIHdpZHRoPSIxMSIgaGVpZ2h0PSI2MSI+PHJlY3Qgc3Ryb2tlPSJub25lIiBmaWxsPSJyZ2IoMjU1LDI1NSwyNTUpIiBwcm90b3R5cGU9IlZlY3RvclJlY3RhbmdsZSIgd2lkdGg9IjExIiBoZWlnaHQ9IjYxIiB4PSIxMTg2IiB5PSI1MzIiLz48L3N2Zz4=' center-y='51' name='costume2' id='235'/>
            </item>
          </list>
        </costumes>
        <sounds>
          <list struct='atomic' id='236'/>
        </sounds>
        <blocks/>
        <variables/>
        <scripts>
          <script x='20' y='20'>
            <block s='receiveGo'/>
            <block s='doForever'>
              <script>
                <block s='doIf'>
                  <block s='reportLessThan'>
                    <block s='yPosition'/>
                    <block s='reportAskFor'>
                      <l>Ball</l>
                      <block s='reifyReporter'>
                        <autolambda>
                          <block s='yPosition'/>
                        </autolambda>
                        <list/>
                      </block>
                      <list/>
                    </block>
                  </block>
                  <script>
                    <block s='changeYPosition'>
                      <l>10</l>
                    </block>
                  </script>
                </block>
                <block s='doIf'>
                  <block s='reportGreaterThan'>
                    <block s='yPosition'/>
                    <block s='reportAskFor'>
                      <l>Ball</l>
                      <block s='reifyReporter'>
                        <autolambda>
                          <block s='yPosition'/>
                        </autolambda>
                        <list/>
                      </block>
                      <list/>
                    </block>
                  </block>
                  <script>
                    <block s='changeYPosition'>
                      <l>-10</l>
                    </block>
                  </script>
                </block>
              </script>
            </block>
          </script>
        </scripts>
      </sprite>
      <watcher scope='Stage' x='288.92441666666764' s='getTimer' style='normal' y='24.863231473' color='4,148,220' hidden='true'/>
      <watcher x='303.53338541666653' color='243,118,29' style='normal' var='model' y='44.075447753437444' hidden='true'/>
      <watcher x='194.27499999999964' color='243,118,29' style='normal' var='scoreLeft' y='413.2604166666667'/>
      <watcher x='311.0104166666665' color='243,118,29' style='normal' var='scoreRight' y='413.26041837083346'/>
    </sprites>
  </stage>
  <hidden/>
  <headers/>
  <code/>
  <blocks>
    <block-definition s='pong belohnung neuer versuch' category='control' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs/>
      <script>
        <block s='doIf'>
          <block s='reportLessThan'>
            <block s='reportAskFor'>
              <l>Ball</l>
              <block s='reifyReporter'>
                <autolambda>
                  <block s='xPosition'/>
                </autolambda>
                <list/>
              </block>
              <list/>
            </block>
            <l>-200</l>
          </block>
          <script>
            <block s='doReport'>
              <l>1</l>
            </block>
          </script>
        </block>
        <block s='doIf'>
          <block s='reportGreaterThan'>
            <block s='reportAskFor'>
              <l>Ball</l>
              <block s='reifyReporter'>
                <autolambda>
                  <block s='xPosition'/>
                </autolambda>
                <list/>
              </block>
              <list/>
            </block>
            <l>200</l>
          </block>
          <script>
            <block s='doReport'>
              <l>-5</l>
            </block>
          </script>
        </block>
        <block s='doReport'>
          <l>0</l>
        </block>
      </script>
    </block-definition>
    <block-definition s='doNothing' category='motion' type='command'>
      <header/>
      <code/>
      <translations/>
      <inputs/>
    </block-definition>
    <block-definition s='reward' category='control' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs/>
      <script>
        <block s='doIfElse'>
          <block s='reportTouchingObject'>
            <l>obstacle</l>
          </block>
          <script>
            <block s='doReport'>
              <l>-1000</l>
            </block>
          </script>
          <script>
            <block s='doReport'>
              <l>1</l>
            </block>
          </script>
        </block>
        <block s='doReport'>
          <l>0</l>
        </block>
      </script>
      <scripts>
        <script x='222' y='170.99999999999994'>
          <block s='doReport'>
            <l>0</l>
          </block>
        </script>
      </scripts>
    </block-definition>
    <block-definition s='label %&apos;text&apos; of size %&apos;size&apos;' category='pen' type='command'>
      <comment x='0' w='90' collapsed='false' y='0'>LABEL will stamp text on the stage at the given font size. The direction of the text is the direction the sprite is facing, and color will match the pen color.</comment>
      <header/>
      <code/>
      <translations>de:drucke _ in Gr&amp;#246;&amp;#223;e _ca:etiqueta _ de mida _es:etiqueta _ de tama&amp;#241;o _fr:&amp;#233;tiquette _ d&apos;une taille de _</translations>
      <inputs>
        <input type='%txt'>Hello!</input>
        <input type='%n'>12</input>
      </inputs>
      <script>
        <block s='doRun'>
          <block s='reportJSFunction'>
            <list>
              <l>text</l>
              <l>size</l>
              <l>process</l>
            </list>
            <l>var stage = this.parentThatIsA(StageMorph);if (this == stage) {    throw new Error(     &apos;LABEL cannot be used from the stage because the stage does not have a postion.\n&apos;     + &apos;Use LABEL from a sprite to draw text.&apos;);}if (typeof text !== &apos;string&apos; &amp;&amp; typeof text !== &apos;number&apos;) {    throw new Error(&apos;LABEL can only draw text or numbers, not a &apos; + process.reportTypeOf(text)); }var context = stage.penTrails().getContext(&apos;2d&apos;),    rotation = radians(this.direction() - 90),    trans = new Point(      this.center().x - stage.left(),      this.center().y - stage.top()    ),    isWarped = this.Warped,    len,    pos;if (isWarped) {endWarp(); }context.save();context.font = size + &apos;px monospace&apos;;context.textAlign = &apos;left&apos;;context.textBaseline = &apos;alphabetic&apos;;context.fillStyle = this.color.toString();len = context.measureText(text).width;trans = trans.multiplyBy(1 / stage.scale);context.translate(trans.x, trans.y);context.rotate(rotation);context.fillText(text, 0, 0);context.translate(-trans.x, -trans.y);context.restore();pos = new Point(  len * Math.sin(radians(this.direction())),  len * Math.cos(radians(this.direction())));pos = pos.add(new Point(this.xPosition(), this.yPosition()));this.gotoXY(pos.x, pos.y, false);this.changed();if (isWarped) {this.startWarp(); }stage.changed();</l>
          </block>
          <list>
            <block var='text'/>
            <block var='size'/>
          </list>
        </block>
      </script>
    </block-definition>
    <block-definition s='empty? %&apos;data&apos;' category='lists' type='predicate'>
      <header/>
      <code/>
      <translations>de:ist _ leer?ca:_ buida?es:_ vac&amp;#237;a?fr:_ vide?</translations>
      <inputs>
        <input type='%l'/>
      </inputs>
      <script>
        <block s='doReport'>
          <block s='reportEquals'>
            <block var='data'/>
            <block s='reportNewList'>
              <list/>
            </block>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='keep items such that %&apos;pred&apos; from %&apos;data&apos;' category='lists' type='reporter'>
      <header/>
      <code/>
      <translations>de:behalte Elemente, die _ aus _ca:mant&amp;#233; els elements on _ de _es:mantener los elementos donde _ de _fr:garder les items tels que _ de _</translations>
      <inputs>
        <input type='%predRing'/>
        <input type='%l'/>
      </inputs>
      <script>
        <block s='doIf'>
          <custom-block s='empty? %l'>
            <block var='data'/>
          </custom-block>
          <script>
            <block s='doReport'>
              <block s='reportNewList'>
                <list/>
              </block>
            </block>
          </script>
        </block>
        <block s='doIfElse'>
          <block s='evaluate'>
            <block var='pred'/>
            <list>
              <block s='reportListItem'>
                <l>1</l>
                <block var='data'/>
              </block>
            </list>
          </block>
          <script>
            <block s='doReport'>
              <block s='reportCONS'>
                <block s='reportListItem'>
                  <l>1</l>
                  <block var='data'/>
                </block>
                <custom-block s='keep items such that %predRing from %l'>
                  <block var='pred'/>
                  <block s='reportCDR'>
                    <block var='data'/>
                  </block>
                </custom-block>
              </block>
            </block>
          </script>
          <script>
            <block s='doReport'>
              <custom-block s='keep items such that %predRing from %l'>
                <block var='pred'/>
                <block s='reportCDR'>
                  <block var='data'/>
                </block>
              </custom-block>
            </block>
          </script>
        </block>
      </script>
    </block-definition>
    <block-definition s='combine with %&apos;function&apos; items of %&apos;data&apos;' category='lists' type='reporter'>
      <header/>
      <code/>
      <translations>de:kombiniere mit _ die Elemente von _ca:combina amb _ els elements de _es:combinar con _ los elementos de _fr:combine avec _ les items de _</translations>
      <inputs>
        <input type='%repRing'/>
        <input type='%l'/>
      </inputs>
      <script>
        <block s='doIf'>
          <custom-block s='empty? %l'>
            <block s='reportCDR'>
              <block var='data'/>
            </block>
          </custom-block>
          <script>
            <block s='doReport'>
              <block s='reportListItem'>
                <l>1</l>
                <block var='data'/>
              </block>
            </block>
          </script>
        </block>
        <block s='doReport'>
          <block s='evaluate'>
            <block var='function'/>
            <list>
              <block s='reportListItem'>
                <l>1</l>
                <block var='data'/>
              </block>
              <custom-block s='combine with %repRing items of %l'>
                <block var='function'/>
                <block s='reportCDR'>
                  <block var='data'/>
                </block>
              </custom-block>
            </list>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='if %&apos;test&apos; then %&apos;true&apos; else %&apos;false&apos;' category='control' type='reporter'>
      <header/>
      <code/>
      <translations>de:wenn _ dann _ sonst _ca:si _ llavors _ si no _es:si _ entonces _ sino _fr:si _ alors _ sinon _</translations>
      <inputs>
        <input type='%b'/>
        <input type='%anyUE'/>
        <input type='%anyUE'/>
      </inputs>
      <script>
        <block s='doIfElse'>
          <block var='test'/>
          <script>
            <block s='doReport'>
              <block s='evaluate'>
                <block var='true'/>
                <list/>
              </block>
            </block>
          </script>
          <script>
            <block s='doReport'>
              <block s='evaluate'>
                <block var='false'/>
                <list/>
              </block>
            </block>
          </script>
        </block>
      </script>
    </block-definition>
    <block-definition s='for %&apos;i&apos; = %&apos;start&apos; to %&apos;end&apos; %&apos;action&apos;' category='control' type='command'>
      <header/>
      <code/>
      <translations>de:f&amp;#252;r _ = _ bis _ _ca:per _ = _ fins _ _es:para _ = _ hasta _ _fr:pour _ allant de _ &amp;#224; _ _</translations>
      <inputs>
        <input type='%upvar'/>
        <input type='%n'>1</input>
        <input type='%n'>10</input>
        <input type='%cs'/>
      </inputs>
      <script>
        <block s='doDeclareVariables'>
          <list>
            <l>step</l>
            <l>tester</l>
          </list>
        </block>
        <block s='doIfElse'>
          <block s='reportGreaterThan'>
            <block var='start'/>
            <block var='end'/>
          </block>
          <script>
            <block s='doSetVar'>
              <l>step</l>
              <l>-1</l>
            </block>
            <block s='doSetVar'>
              <l>tester</l>
              <block s='reifyReporter'>
                <autolambda>
                  <block s='reportLessThan'>
                    <block var='i'/>
                    <block var='end'/>
                  </block>
                </autolambda>
                <list/>
              </block>
            </block>
          </script>
          <script>
            <block s='doSetVar'>
              <l>step</l>
              <l>1</l>
            </block>
            <block s='doSetVar'>
              <l>tester</l>
              <block s='reifyReporter'>
                <autolambda>
                  <block s='reportGreaterThan'>
                    <block var='i'/>
                    <block var='end'/>
                  </block>
                </autolambda>
                <list/>
              </block>
            </block>
          </script>
        </block>
        <block s='doSetVar'>
          <l>i</l>
          <block var='start'/>
        </block>
        <block s='doUntil'>
          <block s='evaluate'>
            <block var='tester'/>
            <list/>
          </block>
          <script>
            <block s='doRun'>
              <block var='action'/>
              <list/>
            </block>
            <block s='doChangeVar'>
              <l>i</l>
              <block var='step'/>
            </block>
          </script>
        </block>
      </script>
    </block-definition>
    <block-definition s='join words %&apos;words&apos;' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations>de:f&amp;#252;ge W&amp;#246;rter zusammen _ca:uneix les paraules _es:unir las palabras _fr:fusionne les mots _</translations>
      <inputs>
        <input type='%mult%txt'/>
      </inputs>
      <script>
        <block s='doIf'>
          <custom-block s='empty? %l'>
            <block s='reportCDR'>
              <block var='words'/>
            </block>
          </custom-block>
          <script>
            <block s='doReport'>
              <block s='reportListItem'>
                <l>1</l>
                <block var='words'/>
              </block>
            </block>
          </script>
        </block>
        <block s='doIf'>
          <block s='reportEquals'>
            <l/>
            <block s='reportListItem'>
              <l>1</l>
              <block var='words'/>
            </block>
          </block>
          <script>
            <block s='doReport'>
              <custom-block s='join words %mult%txt'>
                <block s='reportCDR'>
                  <block var='words'/>
                </block>
              </custom-block>
            </block>
          </script>
        </block>
        <block s='doIf'>
          <block s='reportEquals'>
            <l/>
            <block s='reportListItem'>
              <l>2</l>
              <block var='words'/>
            </block>
          </block>
          <script>
            <block s='doReport'>
              <custom-block s='join words %mult%txt'>
                <block s='reportCONS'>
                  <block s='reportListItem'>
                    <l>1</l>
                    <block var='words'/>
                  </block>
                  <block s='reportCDR'>
                    <block s='reportCDR'>
                      <block var='words'/>
                    </block>
                  </block>
                </block>
              </custom-block>
            </block>
          </script>
        </block>
        <block s='doReport'>
          <block s='reportJoinWords'>
            <list>
              <block s='reportListItem'>
                <l>1</l>
                <block var='words'/>
              </block>
              <l/>
              <custom-block s='join words %mult%txt'>
                <block s='reportCDR'>
                  <block var='words'/>
                </block>
              </custom-block>
            </list>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='list $arrowRight sentence %&apos;data&apos;' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations>de:Liste $arrowRight Satz _ca:llista $arrowRight frase _es:lista $arrowRight frase _fr:liste $arrowRight phrase _</translations>
      <inputs>
        <input type='%l'/>
      </inputs>
      <script>
        <block s='doReport'>
          <custom-block s='join words %mult%txt'>
            <block var='data'/>
          </custom-block>
        </block>
      </script>
    </block-definition>
    <block-definition s='sentence $arrowRight list %&apos;text&apos;' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations>de:Satz $arrowRight Liste _ca:frase $arrowRight llista _es:frase $arrowRight lista _fr:phrase $arrowRight liste _</translations>
      <inputs>
        <input type='%txt'/>
      </inputs>
      <script>
        <block s='doReport'>
          <block s='reportTextSplit'>
            <block var='text'/>
            <l>
              <option>whitespace</option>
            </l>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='catch %&apos;tag&apos; %&apos;action&apos;' category='control' type='command'>
      <header/>
      <code/>
      <translations>de:fange _ _ca:agafa _ _es:atrapar _ _fr:attrape _ _</translations>
      <inputs>
        <input type='%upvar'/>
        <input type='%cs'/>
      </inputs>
      <script>
        <block s='doCallCC'>
          <block s='reifyScript'>
            <script>
              <block s='doSetVar'>
                <l>tag</l>
                <block var='cont'/>
              </block>
              <block s='doRun'>
                <block var='action'/>
                <list/>
              </block>
            </script>
            <list>
              <l>cont</l>
            </list>
          </block>
        </block>
        <custom-block s='ignore %s'>
          <l>3</l>
        </custom-block>
      </script>
    </block-definition>
    <block-definition s='throw %&apos;cont&apos;' category='control' type='command'>
      <header/>
      <code/>
      <translations>de:wirf _ca:llan&amp;#231;a _es:lanzar _fr:lance _</translations>
      <inputs>
        <input type='%s'>catchtag</input>
      </inputs>
      <script>
        <block s='doRun'>
          <block var='cont'/>
          <list/>
        </block>
      </script>
    </block-definition>
    <block-definition s='catch %&apos;tag&apos; %&apos;value&apos;' category='control' type='reporter'>
      <header/>
      <code/>
      <translations>de:fange _ _ca:agafa _ _es:atrapar _ _fr:attrape _ _</translations>
      <inputs>
        <input type='%upvar'/>
        <input type='%anyUE'/>
      </inputs>
      <script>
        <block s='doCallCC'>
          <block s='reifyScript'>
            <script>
              <block s='doSetVar'>
                <l>tag</l>
                <block var='cont'/>
              </block>
              <block s='doReport'>
                <block s='evaluate'>
                  <block var='value'/>
                  <list/>
                </block>
              </block>
            </script>
            <list>
              <l>cont</l>
            </list>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='throw %&apos;tag&apos; %&apos;value&apos;' category='control' type='command'>
      <header/>
      <code/>
      <translations>de:wirf _ _ca:llan&amp;#231;a _ _es:lanzar _ _fr:lance _ _</translations>
      <inputs>
        <input type='%s'>catchtag</input>
        <input type='%s'/>
      </inputs>
      <script>
        <block s='doRun'>
          <block var='tag'/>
          <list>
            <block var='value'/>
          </list>
        </block>
      </script>
    </block-definition>
    <block-definition s='for each %&apos;item&apos; of %&apos;data&apos; %&apos;action&apos;' category='lists' type='command'>
      <header/>
      <code/>
      <translations>de:f&amp;#252;r jedes _ von _ _ca:per cada _ de _ _es:para cada _ de _ _fr:pour chaque _ de _ _</translations>
      <inputs>
        <input type='%upvar'/>
        <input type='%l'/>
        <input type='%cs'/>
      </inputs>
      <script>
        <block s='doUntil'>
          <custom-block s='empty? %l'>
            <block var='data'/>
          </custom-block>
          <script>
            <block s='doSetVar'>
              <l>item</l>
              <block s='reportListItem'>
                <l>1</l>
                <block var='data'/>
              </block>
            </block>
            <block s='doRun'>
              <block var='action'/>
              <list>
                <block s='reportListItem'>
                  <l>1</l>
                  <block var='data'/>
                </block>
              </list>
            </block>
            <block s='doSetVar'>
              <l>data</l>
              <block s='reportCDR'>
                <block var='data'/>
              </block>
            </block>
          </script>
        </block>
      </script>
    </block-definition>
    <block-definition s='if %&apos;test&apos; do %&apos;action&apos; and pause all $pause-1-255-220-0' category='control' type='command'>
      <header/>
      <code/>
      <translations>de:falls _ dann _ und pause $pause-1-255-220-0ca:si _ fes _ i atura-ho tot $pause-1-255-220-0es:si _ haz _ y p&amp;#225;ralo todo $pause-1-255-220-0fr:si _ faire _ et mettre tout en pause $pause-1-255-220-0</translations>
      <inputs>
        <input type='%boolUE'/>
        <input type='%cs'/>
      </inputs>
      <script>
        <block s='doDeclareVariables'>
          <list>
            <l>breakpoint</l>
          </list>
        </block>
        <block s='doIf'>
          <block s='evaluate'>
            <block var='test'/>
            <list/>
          </block>
          <script>
            <block s='doSetVar'>
              <l>breakpoint</l>
              <block var='test'/>
            </block>
            <block s='doShowVar'>
              <l>breakpoint</l>
            </block>
            <block s='doRun'>
              <block var='action'/>
              <list/>
            </block>
            <block s='doPauseAll'/>
            <block s='doHideVar'>
              <l/>
            </block>
          </script>
        </block>
      </script>
    </block-definition>
    <block-definition s='word $arrowRight list %&apos;word&apos;' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations>de:Wort $arrowRight Liste _ca:paraula $arrowRight llista _es:palabra $arrowRight lista _fr:mot $arrowRight liste _</translations>
      <inputs>
        <input type='%txt'/>
      </inputs>
      <script>
        <block s='doReport'>
          <block s='reportTextSplit'>
            <block var='word'/>
            <l>
              <option>letter</option>
            </l>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='ignore %&apos;x&apos;' category='control' type='command'>
      <header/>
      <code/>
      <translations>de:ignoriere _ca:ignora _es:ignorar _fr:ignore _</translations>
      <inputs>
        <input type='%s'/>
      </inputs>
    </block-definition>
    <block-definition s='list $arrowRight word %&apos;list&apos;' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations>de:Liste $arrowRight Wort _ca:llista $arrowRight paraula _es:lista $arrowRight palabra _fr:liste $arrowRight mot _</translations>
      <inputs>
        <input type='%l'/>
      </inputs>
      <script>
        <block s='doReport'>
          <block s='reportJoinWords'>
            <block var='list'/>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='%&apos;x&apos;' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%s'/>
      </inputs>
      <script>
        <block s='doReport'>
          <block var='x'/>
        </block>
      </script>
    </block-definition>
    <block-definition s='numbers from %&apos;from&apos; to %&apos;to&apos;' category='lists' type='reporter'>
      <header/>
      <code/>
      <translations>de:Zahlen von _ bis _ca:nombres des de _ a _es:n&amp;#250;meros de _ a _fr:nombres de _ &amp;#224; _</translations>
      <inputs>
        <input type='%n'>1</input>
        <input type='%n'>10</input>
      </inputs>
      <script>
        <block s='doIf'>
          <block s='reportGreaterThan'>
            <block var='from'/>
            <block var='to'/>
          </block>
          <script>
            <block s='doReport'>
              <block s='reportNewList'>
                <list/>
              </block>
            </block>
          </script>
        </block>
        <block s='doReport'>
          <block s='reportCONS'>
            <block var='from'/>
            <custom-block s='numbers from %n to %n'>
              <block s='reportSum'>
                <block var='from'/>
                <l>1</l>
              </block>
              <block var='to'/>
            </custom-block>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='map %&apos;func&apos; over %&apos;data&apos;' category='lists' type='reporter'>
      <header/>
      <code/>
      <translations>de:wende _ an auf _ca:mapeja _ sobre _es:mapear _ sobre _fr:appliquer _ &amp;#224; _</translations>
      <inputs>
        <input type='%repRing'/>
        <input type='%l'/>
      </inputs>
      <script>
        <block s='doIf'>
          <custom-block s='empty? %l'>
            <block var='data'/>
          </custom-block>
          <script>
            <block s='doReport'>
              <block var='data'/>
            </block>
          </script>
        </block>
        <block s='doReport'>
          <block s='reportCONS'>
            <block s='evaluate'>
              <block var='func'/>
              <list>
                <block s='reportListItem'>
                  <l>1</l>
                  <block var='data'/>
                </block>
              </list>
            </block>
            <custom-block s='map %repRing over %l'>
              <block var='func'/>
              <block s='reportCDR'>
                <block var='data'/>
              </block>
            </custom-block>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='create model learning rate: %&apos;learningRate&apos; discount factor: %&apos;discountFactor&apos; randomize: %&apos;randomize&apos; list of available actions: %&apos;availableActions&apos;' category='sensing' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%s'>0.75</input>
        <input type='%s'>0.9</input>
        <input type='%s'>0.05</input>
        <input type='%l'/>
      </inputs>
      <script>
        <block s='doReport'>
          <block s='reportNewList'>
            <list>
              <block s='reportNewList'>
                <list/>
              </block>
              <block var='learningRate'/>
              <block var='discountFactor'/>
              <block var='randomize'/>
              <block var='availableActions'/>
            </list>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='best action state: %&apos;s&apos; model: %&apos;model&apos;' category='sensing' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%s'/>
        <input type='%s'/>
      </inputs>
      <script>
        <block s='doWarp'>
          <script>
            <block s='doDeclareVariables'>
              <list>
                <l>q</l>
              </list>
            </block>
            <block s='doSetVar'>
              <l>q</l>
              <custom-block s='get q values for state: %s model: %l'>
                <block var='s'/>
                <block var='model'/>
              </custom-block>
            </block>
            <block s='doIf'>
              <block s='reportLessThan'>
                <block s='reportRandom'>
                  <l>0.01</l>
                  <l>1</l>
                </block>
                <block s='reportListItem'>
                  <l>4</l>
                  <block var='model'/>
                </block>
              </block>
              <script>
                <block s='doDeclareVariables'>
                  <list>
                    <l>random</l>
                  </list>
                </block>
                <block s='doSetVar'>
                  <l>random</l>
                  <block s='reportRandom'>
                    <l>1</l>
                    <block s='reportListLength'>
                      <block s='reportListItem'>
                        <l>
                          <option>last</option>
                        </l>
                        <block var='model'/>
                      </block>
                    </block>
                  </block>
                </block>
                <block s='doReport'>
                  <block s='reportListItem'>
                    <block var='random'/>
                    <block s='reportListItem'>
                      <l>
                        <option>last</option>
                      </l>
                      <block var='model'/>
                    </block>
                  </block>
                </block>
              </script>
            </block>
            <block s='doDeclareVariables'>
              <list>
                <l>maxValue</l>
                <l>chosenAction</l>
                <l>actionsZero</l>
              </list>
            </block>
            <block s='doSetVar'>
              <l>maxValue</l>
              <block s='reportListItem'>
                <l>2</l>
                <block var='q'/>
              </block>
            </block>
            <block s='doSetVar'>
              <l>chosenAction</l>
              <l>2</l>
            </block>
            <block s='doSetVar'>
              <l>actionsZero</l>
              <block s='reportNewList'>
                <list/>
              </block>
            </block>
            <custom-block s='for %upvar = %n to %n %cs'>
              <l>i</l>
              <l>2</l>
              <block s='reportListLength'>
                <block var='q'/>
              </block>
              <script>
                <block s='doIf'>
                  <block s='reportEquals'>
                    <block s='reportListItem'>
                      <block var='i'/>
                      <block var='q'/>
                    </block>
                    <l>0</l>
                  </block>
                  <script>
                    <block s='doAddToList'>
                      <block var='i'/>
                      <block var='actionsZero'/>
                    </block>
                  </script>
                </block>
                <block s='doIf'>
                  <block s='reportGreaterThan'>
                    <block s='reportListItem'>
                      <block var='i'/>
                      <block var='q'/>
                    </block>
                    <block var='maxValue'/>
                  </block>
                  <script>
                    <block s='doSetVar'>
                      <l>maxValue</l>
                      <block s='reportListItem'>
                        <block var='i'/>
                        <block var='q'/>
                      </block>
                    </block>
                    <block s='doSetVar'>
                      <l>chosenAction</l>
                      <block var='i'/>
                    </block>
                  </script>
                </block>
              </script>
            </custom-block>
            <block s='doIf'>
              <block s='reportEquals'>
                <block var='maxValue'/>
                <l>0</l>
              </block>
              <script>
                <block s='doDeclareVariables'>
                  <list>
                    <l>random</l>
                  </list>
                </block>
                <block s='doSetVar'>
                  <l>random</l>
                  <block s='reportRandom'>
                    <l>1</l>
                    <block s='reportListLength'>
                      <block var='actionsZero'/>
                    </block>
                  </block>
                </block>
                <block s='doSetVar'>
                  <l>chosenAction</l>
                  <block s='reportListItem'>
                    <block var='random'/>
                    <block var='actionsZero'/>
                  </block>
                </block>
              </script>
            </block>
            <block s='doReport'>
              <block s='reportListItem'>
                <block s='reportDifference'>
                  <block var='chosenAction'/>
                  <l>1</l>
                </block>
                <block s='reportListItem'>
                  <l>
                    <option>last</option>
                  </l>
                  <block var='model'/>
                </block>
              </block>
            </block>
          </script>
        </block>
      </script>
    </block-definition>
    <block-definition s='get q values for state: %&apos;s&apos; model: %&apos;model&apos;' category='sensing' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%s'/>
        <input type='%l'/>
      </inputs>
      <script>
        <block s='doDeclareVariables'>
          <list>
            <l>q</l>
          </list>
        </block>
        <custom-block s='for each %upvar of %l %cs'>
          <l>item</l>
          <block s='reportListItem'>
            <l>1</l>
            <block var='model'/>
          </block>
          <script>
            <block s='doIf'>
              <block s='reportEquals'>
                <block s='reportListItem'>
                  <l>1</l>
                  <block var='item'/>
                </block>
                <block var='s'/>
              </block>
              <script>
                <block s='doReport'>
                  <block var='item'/>
                </block>
              </script>
            </block>
          </script>
        </custom-block>
        <block s='doSetVar'>
          <l>q</l>
          <block s='reportNewList'>
            <list>
              <block var='s'/>
            </list>
          </block>
        </block>
        <custom-block s='for each %upvar of %l %cs'>
          <l>item</l>
          <block s='reportListItem'>
            <l>
              <option>last</option>
            </l>
            <block var='model'/>
          </block>
          <script>
            <block s='doAddToList'>
              <l>0</l>
              <block var='q'/>
            </block>
          </script>
        </custom-block>
        <block s='doAddToList'>
          <block var='q'/>
          <block s='reportListItem'>
            <l>1</l>
            <block var='model'/>
          </block>
        </block>
        <block s='doReport'>
          <block var='q'/>
        </block>
      </script>
    </block-definition>
    <block-definition s='max of %&apos;x&apos; and %&apos;y&apos;' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%s'/>
        <input type='%s'/>
      </inputs>
      <script>
        <block s='doReport'>
          <custom-block s='if %b then %anyUE else %anyUE'>
            <block s='reportLessThan'>
              <block var='x'/>
              <block var='y'/>
            </block>
            <block var='y'/>
            <block var='x'/>
          </custom-block>
        </block>
      </script>
    </block-definition>
    <block-definition s='max of list %&apos;list&apos;' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%l'/>
      </inputs>
      <script>
        <block s='doDeclareVariables'>
          <list>
            <l>max</l>
          </list>
        </block>
        <custom-block s='for each %upvar of %l %cs'>
          <l>item</l>
          <block var='list'/>
          <script>
            <block s='doIf'>
              <block s='reportGreaterThan'>
                <block var='item'/>
                <block var='max'/>
              </block>
              <script>
                <block s='doSetVar'>
                  <l>max</l>
                  <block var='item'/>
                </block>
              </script>
            </block>
          </script>
        </custom-block>
        <block s='doReport'>
          <block var='max'/>
        </block>
      </script>
    </block-definition>
    <block-definition s='get index of %&apos;element&apos; in %&apos;list&apos;' category='lists' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%s'/>
        <input type='%l'/>
      </inputs>
      <script>
        <block s='doDeclareVariables'>
          <list>
            <l>index</l>
          </list>
        </block>
        <custom-block s='for each %upvar of %l %cs'>
          <l>item</l>
          <block var='list'/>
          <script>
            <block s='doChangeVar'>
              <l>index</l>
              <l>1</l>
            </block>
            <block s='doIf'>
              <block s='reportEquals'>
                <block var='item'/>
                <block var='element'/>
              </block>
              <script>
                <block s='doReport'>
                  <block var='index'/>
                </block>
              </script>
            </block>
          </script>
        </custom-block>
        <block s='doReport'>
          <l>-1</l>
        </block>
      </script>
    </block-definition>
    <block-definition s='moveUp' category='motion' type='command'>
      <header/>
      <code/>
      <translations/>
      <inputs/>
      <script>
        <block s='doIf'>
          <block s='reportLessThan'>
            <block s='yPosition'/>
            <l>145</l>
          </block>
          <script>
            <block s='changeYPosition'>
              <l>10</l>
            </block>
          </script>
        </block>
      </script>
    </block-definition>
    <block-definition s='moveDown' category='motion' type='command'>
      <header/>
      <code/>
      <translations/>
      <inputs/>
      <script>
        <block s='doIf'>
          <block s='reportGreaterThan'>
            <block s='yPosition'/>
            <l>-145</l>
          </block>
          <script>
            <block s='changeYPosition'>
              <l>-10</l>
            </block>
          </script>
        </block>
      </script>
    </block-definition>
    <block-definition s='update model %&apos;model&apos; old state: %&apos;stateOld&apos; new state: %&apos;stateNew&apos; reward: %&apos;reward&apos; action performed: %&apos;act&apos;' category='sensing' type='command'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%l'/>
        <input type='%s'/>
        <input type='%s'/>
        <input type='%s'/>
        <input type='%s'/>
      </inputs>
      <script>
        <block s='doWarp'>
          <script>
            <block s='doDeclareVariables'>
              <list>
                <l>q0</l>
                <l>q1</l>
                <l>newValue</l>
              </list>
            </block>
            <block s='doSetVar'>
              <l>q0</l>
              <custom-block s='get q values for state: %s model: %l'>
                <block var='stateOld'/>
                <block var='model'/>
              </custom-block>
            </block>
            <block s='doSetVar'>
              <l>q1</l>
              <custom-block s='get q values for state: %s model: %l'>
                <block var='stateNew'/>
                <block var='model'/>
              </custom-block>
            </block>
            <block s='doSetVar'>
              <l>newValue</l>
              <block s='reportSum'>
                <block var='reward'/>
                <block s='reportProduct'>
                  <block s='reportListItem'>
                    <l>3</l>
                    <block var='model'/>
                  </block>
                  <custom-block s='max of list %l'>
                    <block s='reportCDR'>
                      <block var='q1'/>
                    </block>
                  </custom-block>
                </block>
              </block>
            </block>
            <block s='doReplaceInList'>
              <block s='reportSum'>
                <l>1</l>
                <custom-block s='get index of %s in %l'>
                  <block var='act'/>
                  <block s='reportListItem'>
                    <l>
                      <option>last</option>
                    </l>
                    <block var='model'/>
                  </block>
                </custom-block>
              </block>
              <block var='q0'/>
              <block s='reportSum'>
                <block s='reportProduct'>
                  <block s='reportListItem'>
                    <block s='reportSum'>
                      <l>1</l>
                      <custom-block s='get index of %s in %l'>
                        <block var='act'/>
                        <block s='reportListItem'>
                          <l>
                            <option>last</option>
                          </l>
                          <block var='model'/>
                        </block>
                      </custom-block>
                    </block>
                    <block var='q0'/>
                  </block>
                  <block s='reportDifference'>
                    <l>1</l>
                    <block s='reportListItem'>
                      <l>2</l>
                      <block var='model'/>
                    </block>
                  </block>
                </block>
                <block s='reportProduct'>
                  <block s='reportListItem'>
                    <l>2</l>
                    <block var='model'/>
                  </block>
                  <block var='newValue'/>
                </block>
              </block>
            </block>
          </script>
        </block>
      </script>
      <scripts>
        <script x='587.398435230778' y='148.412474023981'>
          <block var='model'/>
        </script>
        <script x='401.7869244394111' y='445.65707834052773'>
          <block var='model'/>
        </script>
      </scripts>
    </block-definition>
    <block-definition s='Post to smerge...' category='other' type='command'>
      <header/>
      <code/>
      <translations/>
      <inputs/>
      <script>
        <block s='doRun'>
          <block s='reportJSFunction'>
            <list/>
            <l>var ide = window.world.root().children[0];new DialogBoxMorph(	this, function(message){   var url = "https://smerge.org/sync/5153f626-e5c1-4eb6-bfa8-7c036b738da0?ancestor=214";   if (window.newUrl){      var url = window.newUrl;   }   url += "&amp;message="+message;   var data = ide.serializer.serialize(ide.stage);   var r =  new XMLHttpRequest();   r.open("POST", url, true);   r.setRequestHeader("Content-Type", "application/xml");		 r.onreadystatechange = function () {  	  if(r.readyState === 4 &amp;&amp; r.status === 200) {				   ide.showMessage("exported");    			window.newUrl = JSON.parse(r.response)["url"];      }   }   r.send(data);   },       this    ).prompt(      "What changes have you made?",      "",      window.world,      null);</l>
          </block>
          <list/>
        </block>
      </script>
    </block-definition>
  </blocks>
  <variables>
    <variable name='model'>
      <list id='1193'>
        <item>
          <list id='1194'>
            <item>
              <list struct='atomic' id='1195'>12,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1196'>11,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1197'>10,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1198'>9,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1199'>8,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1200'>7,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1201'>6,-68.04496479851667,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1202'>5,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1203'>4,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1204'>3,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1205'>2,0,3.634180040348519e-7,0</list>
            </item>
            <item>
              <list struct='atomic' id='1206'>1,0,5.879254278998475e-7,4.3601644537983396e-7</list>
            </item>
            <item>
              <list struct='atomic' id='1207'>0,8.189203975682516e-7,0.0000011946657343590767,0</list>
            </item>
            <item>
              <list struct='atomic' id='1208'>-1,0.0000028542938098714442,0.000002205439382900114,0.000002211414588852664</list>
            </item>
            <item>
              <list struct='atomic' id='1209'>-2,0.0000030823385553352187,0.000002605218485380887,0.0000031735185912483945</list>
            </item>
            <item>
              <list struct='atomic' id='1210'>-3,0.000002755817175931183,0.0000030010921918944347,0.000001125409571960415</list>
            </item>
            <item>
              <list struct='atomic' id='1211'>-4,0.0000016681319433204399,3.7961045600075774e-21,0.0000012192794153231523</list>
            </item>
            <item>
              <list struct='atomic' id='1212'>-5,0.0000014753177330162774,0,0.000001319622687771559</list>
            </item>
            <item>
              <list struct='atomic' id='1213'>-6,0.0000010977385359715777,4.561678085099402e-22,1.5338298802424123e-21</list>
            </item>
            <item>
              <list struct='atomic' id='1214'>-7,1.2164474893598406e-21,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1215'>-8,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1216'>-9,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1217'>-10,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1218'>13,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1219'>14,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1220'>15,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1221'>16,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1222'>17,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1223'>-11,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1224'>18,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1225'>19,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1226'>20,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1227'>21,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1228'>22,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1229'>23,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1230'>24,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1231'>25,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1232'>26,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1233'>27,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1234'>-12,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1235'>-13,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1236'>-14,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1237'>-15,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1238'>-16,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1239'>-17,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1240'>-18,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1241'>-19,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1242'>-20,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1243'>-21,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1244'>-22,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1245'>-23,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1246'>-24,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1247'>28,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1248'>29,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1249'>30,0,0,0</list>
            </item>
            <item>
              <list struct='atomic' id='1250'>31,0,0,0</list>
            </item>
          </list>
        </item>
        <item>
          <l>0.75</l>
        </item>
        <item>
          <l>0.5</l>
        </item>
        <item>
          <l>0.05</l>
        </item>
        <item>
          <list id='1251'>
            <item>
              <context id='1252'>
                <inputs/>
                <variables/>
                <script>
                  <custom-block s='moveUp'/>
                </script>
                <receiver>
                  <ref id='116'/>
                </receiver>
                <origin>
                  <ref id='116'/>
                </origin>
                <context id='1256'>
                  <inputs/>
                  <variables>
                    <variable name='best move'>
                      <context id='1258'>
                        <inputs/>
                        <variables/>
                        <script>
                          <custom-block s='doNothing'/>
                        </script>
                        <receiver>
                          <ref id='116'/>
                        </receiver>
                        <origin>
                          <ref id='116'/>
                        </origin>
                      </context>
                    </variable>
                    <variable name='reward'>
                      <l>0</l>
                    </variable>
                    <variable name='oldState'>
                      <l>-8</l>
                    </variable>
                  </variables>
                  <receiver>
                    <ref id='116'/>
                  </receiver>
                  <origin>
                    <ref id='116'/>
                  </origin>
                </context>
              </context>
            </item>
            <item>
              <context id='1262'>
                <inputs/>
                <variables/>
                <script>
                  <custom-block s='moveDown'/>
                </script>
                <receiver>
                  <ref id='116'/>
                </receiver>
                <origin>
                  <ref id='116'/>
                </origin>
              </context>
            </item>
            <item>
              <ref id='1258'/>
            </item>
          </list>
        </item>
      </list>
    </variable>
    <variable name='scoreLeft'>
      <l>3</l>
    </variable>
    <variable name='scoreRight'>
      <l>0</l>
    </variable>
  </variables>
</project><media name="ML Pong (SnAIp)" app="Snap! 5.1, http://snap.berkeley.edu" version="1"></media></snapdata>