Compare commits

...

2 Commits

Author SHA1 Message Date
Lephe 32fbcf143a
more atomic committing
* Proper coordinate rounding, as in Arond()
* Forgotten EOL now consumed if found (still optional)
* Convert unit tests images to 1-bit before comparing
* Much better unit testing script
* Add 17 test scripts from the 2019 TI-Planet and Planète Casio contest
  which consisted in reproducing an image with minimum code
2019-10-26 13:51:54 +02:00
Lephe ff6013b603
parser: allow semicolons to finish arguments early
Similarly to how parentheses are omitted at the end of commands, this
change allows them to be omitted at the end of function arguments.
Notice however than this omission is *ambiguous* when the parser does
not know in advance the number of arguments.

  GCD(Ent(x;y -> GCD(Ent(x;y))
              -> GCD(Ent(x);y)

The fx-92 SC+ parser knows the number of arguments for each function,
and will use the second interpretation, because Ent() has one argument
and GCD() has two. This interpreter, however, uses a generic extensible
construction for function calls and cannot decide on this ground. The
current interpretation is the first.
2019-10-26 09:55:59 +02:00
39 changed files with 127 additions and 28 deletions

View File

@ -34,6 +34,8 @@ echo -n "F908313200333500" | ./fx92.py -u -
* `--save <bmp>` will save a screenshot of the output to the designated file.
* `--quiet` will "hide" the window while executing. _(At the moment the window
is still shown, but closed immediately, due to SDL subtleties.)_
* `--stream <dir>` will stream window frames as a series of bitmap images to
the specified directory. Use your favorite tool to make a GIF.
## Tests

View File

@ -1,6 +1,8 @@
# fx-92 Scientifique Collège+ language interpreter: On-screen drawing
from sdl2 import *
from fx92.util import rndcoord
import math
import os
@ -88,8 +90,8 @@ class Window:
x = self.width // 2 + x - 1
y = self.height // 2 - y
x = int(round(x))
y = int(round(y))
x = rndcoord(x)
y = rndcoord(y)
SDL_RenderDrawPoint(self.r, x, y)
@ -140,8 +142,8 @@ class Window:
self._point(x, y)
def line(self, x1, y1, x2, y2, color):
x1, y1, x2, y2 = round(x1), round(y1), round(x2), round(y2)
x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)
x1, y1 = rndcoord(x1), rndcoord(y1)
x2, y2 = rndcoord(x2), rndcoord(y2)
self._line(x1, y1, x2, y2, color)
def linef(self, x, y, angle, dist, color):
@ -155,8 +157,8 @@ class Window:
x2 = x + dist * cos
y2 = y + dist * sin
x1, y1, x2, y2 = round(x), round(y), round(x2), round(y2)
x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)
x1, y1 = rndcoord(x), rndcoord(y)
x2, y2 = rndcoord(x2), rndcoord(y2)
self._line(x1, y1, x2, y2, color)
def wait(self, allow_any=False):
@ -199,7 +201,7 @@ class Window:
"""Push window contents on-screen."""
if self.stream:
name = "{:04d}.png".format(self.streamid)
name = "{:04d}.bmp".format(self.streamid)
self.save(os.path.join(self.stream, name))
self.streamid += 1

View File

@ -152,6 +152,7 @@ class Parser:
self.expect(T.EOL, optional=True)
prg = self.program()
self.expect(T.REPEAT_END)
self.expect(T.EOL, optional=True)
return Node(N.REPEAT, arg, prg)
if op.type == T.WHILE:
@ -160,6 +161,7 @@ class Parser:
self.expect(T.EOL, optional=True)
prg = self.program()
self.expect(T.WHILE_END)
self.expect(T.EOL, optional=True)
return Node(N.WHILE, cond, prg)
if op.type == T.IF:
@ -168,6 +170,7 @@ class Parser:
self.expect(T.EOL, optional=True)
prg = self.program()
self.expect(T.IF_END)
self.expect(T.EOL, optional=True)
return Node(N.IF, cond, prg, None)
if op.type == T.IFELSE:
@ -176,8 +179,10 @@ class Parser:
self.expect(T.EOL, optional=True)
p1 = self.program()
self.expect(T.ELSE)
self.expect(T.EOL, optional=True)
p2 = self.program()
self.expect(T.IFELSE_END)
self.expect(T.EOL, optional=True)
return Node(N.IF, cond, p1, p2)
# arg -> expr PARAM
@ -249,7 +254,7 @@ class Parser:
e = self.expr()
# Allow a parenthesis to be removed at the end of a parameter
optional = (self.la.type == T.PARAM)
optional = (self.la.type in [T.PARAM, T.SEMI])
self.expect(T.RPAR, optional=optional)
return Node(N.EXP, a, e)
@ -270,7 +275,7 @@ class Parser:
e = self.expr()
# Allow a parenthesis to be removed at the end of a parameter
optional = (self.la.type == T.PARAM)
optional = (self.la.type in [T.PARAM, T.SEMI])
self.expect(T.RPAR, optional=optional)
return e
@ -279,7 +284,7 @@ class Parser:
a = self.funargs()
# Allow a parenthesis to be removed at the end of a parameter
optional = (self.la.type == T.PARAM)
optional = (self.la.type in [T.PARAM, T.SEMI])
self.expect(T.RPAR, optional=optional)
return Node(N.FUN, name, a)

View File

@ -63,3 +63,8 @@ def decimal_repr(x):
dg = str(i)
dg = dg[0] + "." + dg[1:] + "e" + str(true_exp)
return sign + dg
def rndcoord(x):
halfint = (int(x) != x) and (int(2*x) == 2*x)
sign = -1 if x < 0 else 1
return int(round(x)) + int(halfint) * sign

View File

@ -1,5 +1,6 @@
#! /usr/bin/python3
import re
import sys
import glob
import os.path
@ -9,60 +10,121 @@ from PIL import Image
from PIL import ImageChops
def imgequal(ref, out):
ref = Image.open(ref)
out = Image.open(out)
ref = Image.open(ref).convert("1")
out = Image.open(out).convert("1")
diff = ImageChops.difference(ref, out)
return diff.getbbox() is None
def runtest(program, refout=None, refimg=None):
st = subprocess.run("./fx92.py --quiet --save=/tmp/fx92-test.bmp".split()
+ [program], stdout=subprocess.PIPE)
def readable_cmd(cmd):
result = ""
for arg in cmd:
if " " not in arg and "'" not in arg and '"' not in arg:
a = arg
elif "'" not in arg:
a = "'" + arg + "'"
else:
a = a.replace(" ", "\\ ").replace("'", "\\'").replace('"', '\\"')
result += " " + arg
return result.strip()
def indent(str, n):
return re.subn(r"^", " " * n, str, flags=re.MULTILINE)[0]
def runtest(program, refout=None, refimg=None, kind="script"):
kind = "-u" if kind == "url" else "-s"
cmd = "./fx92.py --quiet --save=/tmp/fx92-test.bmp".split() \
+ [kind, program]
st = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Retrieve standard error
stderr = ""
if st.stderr:
stderr = st.stderr.decode().strip("\n")
stderr = indent(stderr, 4)
if st.returncode != 0:
print(" -> Execution FAILED!")
return 0
print("\x1b[41;1mFAILED\x1b[0m", program)
print(" " + readable_cmd(cmd))
if stderr:
print(" Standard error:")
print(stderr)
else:
print(" Nothing on standard error")
print("")
return False
print(" Execution completed.")
success = True
status = { "out": None, "img": None }
if refout is not None:
with open(refout, "rb") as fp:
refout = fp.read()
if st.stdout == refout:
print(" Output is correct.")
status["out"] = True
else:
print(" -> Output is incorrect!")
print(" ref:", repr(refout))
print(" out:", repr(st.stdout))
status["out"] = (st.stdout, refout)
success = False
if refimg is not None:
if imgequal(refimg, "/tmp/fx92-test.bmp"):
print(" Image is correct.")
status["img"] = True
else:
print(" -> Image is incorrect!")
status["img"] = False
success = False
if status["out"] is None and status["img"] is None:
print("PASSED", program)
elif success:
print("\x1b[43;1mPASSED\x1b[0m", program)
else:
print("\x1b[41;1mFAILED\x1b[0m", program)
if status["out"] is None:
print(" (No reference output)")
elif status["out"] == True:
print(" Output is correct.")
else:
print(" Incorrect output, got:")
print(indent(status["out"][0], 4))
print(" Expected:")
print(indent(status["out"][1], 4))
if status["img"] is None:
print(" (No reference image)")
elif status["img"] == True:
print(" Image is correct.")
else:
print(" Image is incorrect!")
if stderr:
print(" Standard error:")
print(stderr)
print("")
return success
def main():
paths = glob.glob("tests/*.txt")
p1 = glob.glob("tests/*.txt")
p2 = glob.glob("tests/contest2019/*.txt")
paths = sorted(p1) + sorted(p2)
print("Found {} tests.".format(len(paths)))
total = 0
passed = 0
for t in paths:
print("\n{}:".format(t))
refout = t[:-4] + ".out"
refout = refout if os.path.isfile(refout) else None
refimg = t[:-4] + ".png"
refimg = refimg if os.path.isfile(refimg) else None
passed += runtest(t, refout=refout, refimg=refimg)
kind = "url" if t.startswith("tests/contest2019/") else "script"
passed += runtest(t, refout=refout, refimg=refimg, kind=kind)
total += 1
if passed < total:

View File

@ -2,3 +2,4 @@
0
90
160
150

View File

@ -7,3 +7,6 @@ print theta
rotate 70
print theta
rotate 350
print theta

2
tests/contest2019/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
# Ignore folder with streams
*/

BIN
tests/contest2019/0326.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110000100E0010B300D365+E-F909F901F9113500F901F90631382E343300F901F905332E3200F901F9063332332E313400F901F9053400F901F9063238382E343300F901F912F901F90AF901F908323400A73300F901F909F901F90B37004200F901F9113500F901F90731383000F901F9054200F901F90632323500F901F90542A8312E313500F901F90B42A731004200F901F912F901F90AF901F908393900393900F901F903F901F902

BIN
tests/contest2019/1344.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110000100E0010B300D365+E-F90B30004000F901F90B3435004400F901F90BA744004500F901F90B3245004200F901F90BA742004300F901F90B34004700F901F91547A53400F901F9083500323200F901F909F901F9113200F901F9053800F901F9064200F901F9053400F901F9064200F901F912F901F90AF901F908313000323000F901F909F901F9113200F901F9053500F901F9064200F901F9053700F901F9064200F901F912F901F90AF901F908313300313600F901F909F901F9113200F901F9053500F901F9064200F901F9053600F901F9064200F901F912F901F90AF901F9083130003700F901F9113400F901F90B40A631004000F901F909F901F9053300F901F9064500F901F9053100F901F9064400F901F9053100F901F9064500F901F9053300F901F9064500F901F9053100F901F90AF901F9053100F901F91540A53100F901F90848A631004900F901F916F901F91540A53200F901F908480049A73100F901F916F901F91540A53300F901F90848A731004900F901F916F901F912F901F90AF901F908480049A73100F901F909F901F9113400F901F9053300F901F9064500F901F9053400F901F9064500F901F912F901F916F901F91547A53400F901F90B313335004600F901F90AF901F908323700323200F901F909F901F9053100F901F906A74600F901F9053100F901F9064600F901F9053200F901F906A74600F901F9053300F901F9064600F901F9053300F901F906A74600F901F9053400F901F9064600F901F9053400F901F906A74600F901F9053600F901F9064600F901F9053500F901F906A74600F901F9053700F901F9064600F901F9113200F901F9053600F901F906A74600F901F9053800F901F9064600F901F912F901F906A74600F901F9053100F901F9064600F901F9053600F901F916F901F91547A53400F901F90AF901F9083836003100F901F909F901F9113500F901F9053200F901F9064200F901F912F901F9053400F901F9064200F901F9113300F901F9053200F901F90AF901F9053200F901F909F901F912F901F9053200F901F9064200F901F9053200F901F9064200F901F9053200F901F9064300F901F9053200F901F9064300F901F9053200F901F90AF901F90848A636004900F901F909F901F9113200F901F9053200F901F9064300F901F9053400F901F9064300F901F912F901F916F901F90AF901F90848004200F901F903F901F902

BIN
tests/contest2019/1367.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 548 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110000100E0010B300D365+E-F90B30004400F901F9083733A7393700313700F901F909F901F90B31004200F901F9113500F901F90848A642004900F901F90848A7420049A74200F901F90B42A631004200F901F912F901F9113200F901F90848A642004900F901F90848A7420049A74200F901F912F901F90848A642004900F901F90AF901F90848A732320049A6313000F901F909F901F9113400F901F9053200F901F90AF901F9053100F901F906A7393000F901F9053100F901F906393000F901F909F901F9053100F901F906A7393000F901F9053100F901F90AF901F906393000F901F9053100F901F906A7393000F901F9053100F901F909F901F9053100F901F912F901F90AF901F908480049A63200F901F909F901F9113400F901F9053200F901F90AF901F9053100F901F906A7393000F901F9053100F901F906393000F901F909F901F9053100F901F90AF901F9053100F901F906A7393000F901F9053100F901F909F901F90848004900F901F90AF901F906393000F901F9053100F901F906A7393000F901F9053100F901F909F901F9053100F901F90AF901F906393000F901F9053100F901F906A7393000F901F9053100F901F909F901F9053100F901F912F901F90AF901F90848A7360049A6313500F901F909F901F9113200F901F9053800F901F906A7393000F901F9053400F901F906A7393000F901F912F901F90AF901F90848A631300049A73800F901F906A7393000F901F909F901F90B37004200F901F9113200F901F9053100F901F906A7393000F901F9053500F901F906A7393000F901F9054200F901F906A7393000F901F9053500F901F906A7393000F901F9053300F901F90B42A731004200F901F90AF901F90631383000F901F90848A7320049A73200F901F909F901F912F901F90AF901F90848A636330049A7313000F901F909F901F906393000F901F9053200F901F9113200F901F906A7393000F901F9053200F901F912F901F9113200F901F906393000F901F9053200F901F912F901F90AF901F9083200313500F901F9113200F901F909F901F9053444A63200F901F90848A63244A63100A731A64900F901F908480049A73300F901F908A731A73244A64800A731A64900F901F9084800A731A64900F901F90848A732A7344400A732A64900F901F905A73444A732A644A8A73100F901F90BA731004400F901F90AF901F908A733A6480038A64900F901F912F901F90532303000F901F903F901F902

BIN
tests/contest2019/1418.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110000100E0010B000AC88+E-F90B32004000F901F90B3130004700F901F90840004700F901F909F901F90732373000F901F9113200F901F9053400F901F906A7393000F901F9053800F901F906A7393000F901F912F901F90AF901F90834003800F901F909F901F9113200F901F9053700F901F906A7393000F901F9053500F901F906A7393000F901F912F901F90AF901F90837003400F901F909F901F9113200F901F9053600F901F906A7393000F901F9053500F901F906A7393000F901F912F901F90AF901F90B3136004000F901F90840004700F901F909F901F90B32004200F901F9113600F901F90B47A76042A731D0004700F901F90840004700F901F9073000F901F9054200F901F91542FB013700F901F90B42A631004200F901F916F901F912F901F905A73100F901F908313600A7313700F901F9053600F901F90AF901F908343200A7313900F901F909F901F9113200F901F9053300F901F906393000F901F9053900F901F906393000F901F912F901F90AF901F908343000A73500F901F909F901F9083332003300F901F90AF901F908363700A7313500F901F909F901F9113200F901F9053200F901F906393000F901F9053400F901F906393000F901F912F901F90AF901F908343100A73500F901F909F901F9113400F901F9053300F901F906393000F901F912F901F90AF901F908363300A7313300F901F909F901F9113300F901F9053200F901F906393000F901F912F901F90AF901F908363300A7313300F901F909F901F9113200F901F9053200F901F906393000F901F912F901F90AF901F908373100A7313500F901F909F901F9073000F901F9053200F901F905A73100F901F906393000F901F9053400F901F90AF901F908373500A7313500F901F9073000F901F909F901F9053200F901F906393000F901F9053400F901F906393000F901F9113300F901F9053200F901F906393000F901F912F901F90AF901F9083338003300F901F909F901F9073000F901F9113200F901F9053300F901F906393000F901F9053100F901F906393000F901F912F901F90AF901F9083335003000F901F909F901F9053900F901F906A7393000F901F9053600F901F90AF901F905393900F901F903F901F902

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110001100E0010B30025E0+E-F9083237003700F901F9053100F901F909F901F90B31004000F901F91340FB053700F901F9054000F901F90832380037A740A86040A631D0A93200F901F90B40A631004000F901F914F901F9053600F901F908323800A7323000F901F9053600F901F90AF901F908313400A73100F901F909F901F9083134003100F901F9053500F901F908313900A73500F901F905A73500F901F908313400A73200F901F90AF901F9083136003000F901F909F901F908313600A73200F901F905A73500F901F9083131003500F901F9053300F901F9083134003700F901F905A73800F901F90836003300F901F9053800F901F9083134003500F901F9053200F901F9083136003100F901F90AF901F908373400A7313400F901F9053100F901F909F901F9053200F901F908373700A7313600F901F905A73200F901F908373500A7313800F901F9053200F901F90AF901F9053200F901F9113200F901F9053100F901F909F901F9053100F901F906393000F901F9053400F901F906393000F901F912F901F90AF901F9053400F901F909F901F9053200F901F905A73100F901F906393000F901F9053400F901F908383300A7313500F901F90AF901F908383600A7313800F901F909F901F906A7393000F901F9053300F901F906393000F901F9053200F901F9113400F901F9053200F901F906393000F901F912F901F90AF901F908383200A7313000F901F9053100F901F909F901F9053300F901F908383400A73400F901F908383500A73400F901F905A73200F901F908383200A73900F901F908373900A73600F901F9053200F901F908383000A73400F901F908383200A73600F901F90AF901F9083800A7313200F901F9073000F901F90B31004700F901F91347FB053900F901F91547A53500F901F9083600A7313200F901F916F901F9053100F901F909F901F906393000F901F9053100F901F906A7393000F901F91547FB023400F901F90AF901F9053100F901F906393000F901F9053100F901F909F901F90AF901F9053100F901F906A7393000F901F9053100F901F909F901F916F901F9053100F901F90AF901F906393000F901F9053100F901F906A7393000F901F9053100F901F909F901F9053300F901F90AF901F9053100F901F906A7393000F901F90B47A631004700F901F914F901F907393000F901F908353400A73400F901F909F901F908353700A73700F901F908353300A7313100F901F905A73200F901F908353700A7313300F901F905A73800F901F908353600A7323200F901F908353500A7323200F901F908353400A7323100F901F9053800F901F908353800A7313300F901F9053200F901F908353700A7313000F901F9053100F901F908353400A73900F901F908353600A73700F901F9053400F901F908353500A73200F901F908353600A73100F901F9053100F901F9083537003100F901F9053300F901F9083534003700F901F9083530003700F901F9083438003500F901F9083437003500F901F9083436003400F901F905A73300F901F9083435003100F901F9083434003000F901F908353200A73800F901F908353400A73800F901F908353100A73800F901F908343900A73600F901F908343700A73600F901F908343600A73500F901F9053100F901F908343700A73400F901F9053300F901F908343900A73300F901F908353400A73300F901F908353300A73400F901F905A73400F901F908353200A73700F901F908353400A73500F901F90AF901F9083438003500F901F905A73100F901F909F901F905A73100F901F906A7393000F901F9053200F901F90AF901F9053200F901F909F901F9053300F901F906393000F901F9053200F901F906393000F901F9053100F901F9083536003300F901F909F901F9083533003000F901F9053300F901F9083438003200F901F90AF901F908353000A73200F901F909F901F9083530003100F901F905A73300F901F908353300A73100F901F90AF901F9083435003200F901F909F901F9083437003000F901F90AF901F9083734003200F901F9073000F901F90B30004700F901F91347FB053200F901F9053100F901F909F901F90AF901F9053600F901F9053100F901F91546A53000F901F909F901F916F901F90AF901F9053700F901F909F901F90AF901F908393000A73300F901F90631383000F901F90B47A631004700F901F914F901F9083739003100F901F9113200F901F9113200F901F9053100F901F909F901F9053100F901F90AF901F9053100F901F912F901F908383500A73100F901F90631383000F901F912F901F9083736003000F901F9113200F901F9053100F901F909F901F9053200F901F90AF901F9053500F901F912F901F908373400A73100F901F9113200F901F9053100F901F909F901F9053100F901F90AF901F905313100F901F912F901F908373400A73300F901F9113200F901F907393000F901F9053100F901F909F901F9053300F901F90AF901F908393000A73300F901F912F901F908383200A73300F901F9053100F901F909F901F90AF901F90B3432004200F901F90BA73135004300F901F90B30004400F901F91344FB053300F901F90842A632004300F901F909F901F908420043A63200F901F90AF901F90842A634004300F901F909F901F90842A6360043A63200F901F90AF901F90842A6330043A63200F901F909F901F9053200F901F90AF901F91544A53000F901F90B3631004200F901F90B31004300F901F916F901F91544A53100F901F90B3633004200F901F90BA73232004300F901F916F901F90B44A631004400F901F914F901F903F901F902

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110001100E0010B30025E0+E-F909F901F9083000A73700F901F9053500F901F905A73200F901F9083300A7313000F901F9053500F901F9083800A73400F901F905A73500F901F9053200F901F90835003000F901F905A73500F901F9083000A73200F901F9053300F901F90833003200F901F905A73800F901F908A73500A73200F901F9053400F901F90AF901F9053100F901F9083137003200F901F909F901F90B31004200F901F90B7432004300F901F9053100F901F9113500F901F90B42A631004200F901F90732323500F901F90543A86042A731D000F901F9073000F901F9054200F901F912F901F908313700A7313900F901F9053600F901F908313700A7323500F901F9053500F901F90AF901F9053100F901F9083000A7323600F901F9113400F901F909F901F9053300F901F906343500F901F9054300F901F906A7343500F901F9053100F901F906343500F901F90543A83200F901F906343500F901F9053100F901F906A7343500F901F90543A743A9684300F901F90AF901F90543A9684300F901F906343500F901F912F901F9083000A7323400F901F9113400F901F909F901F9053300F901F906343500F901F90543A833A743A9684300F901F90AF901F90543A9684300F901F906343500F901F912F901F908343300A7323600F901F909F901F908343300A7313300F901F9053200F901F905A73400F901F908333300A73500F901F9083430003200F901F9053400F901F908343400A73400F901F905A73700F901F908333700A73200F901F9053500F901F90AF901F9053100F901F908343600A7323600F901F909F901F908343600A7313200F901F90AF901F908363400A7313900F901F909F901F9053200F901F908363600A7323100F901F905A73200F901F908363400A7323300F901F9053600F901F908373000A7313900F901F905A73200F901F908363800A7323300F901F9053500F901F908373300A7313900F901F908373300A7323300F901F9053500F901F908373800A7313900F901F905A73200F901F908373600A7323100F901F9053100F901F90AF901F9053100F901F908373100A7313400F901F909F901F908373100A7313100F901F908373300A73900F901F9053100F901F908373400A7313100F901F908373100A7313400F901F908363800A7313100F901F908363800A73900F901F9053100F901F908373100A7313100F901F903F901F902

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110000100E0010B300D365+E-F90AF901F9083134003900F901F909F901F908313400313000F901F908313900313000F901F9083139003400F901F9083134003400F901F9083134003600F901F9083136003800F901F9083136003700F901F9083131003700F901F908313100313400F901F908313400313400F901F908313400313200F901F9083600313200F901F9083600313600F901F908313400313600F901F908313400313400F901F908313600313400F901F908313600313000F901F90AF901F908313400A73100F901F909F901F90731383000F901F9113400F901F9053300F901F906343500F901F9053400F901F906343500F901F912F901F90AF901F9083132003100F901F909F901F9113400F901F9113300F901F90632322E3500F901F9053300F901F912F901F90632322E3500F901F9053100F901F912F901F90AF901F90AF901F908323800313600F901F909F901F90B3238004300F901F90B3136004400F901F90B31004200F901F91342A53700F901F90B43A631004300F901F90843004400F901F90B44A742004400F901F9083238004400F901F90B42A631004200F901F914F901F908333400A73500F901F908323800A7313100F901F908333400A7313100F901F90AF901F908353000313200F901F909F901F908343900313200F901F908343800313300F901F908353100313600F901F908353400313600F901F908353000313600F901F908343800313400F901F908343800313100F901F9083530003900F901F9083530003800F901F908353200313000F901F908353000313000F901F9083533003900F901F9083533003800F901F908353300313000F901F908353400313000F901F908353500313100F901F908353500313200F901F908353200313200F901F908353500313200F901F908353500313500F901F908353400313400F901F908353600313400F901F908353700313300F901F908353700313000F901F9083535003700F901F9083536003600F901F9083536003200F901F9083537003200F901F908353300A73200F901F908353300A73400F901F908353700A73400F901F908353700A7313200F901F908353600A7313300F901F908353500A7313300F901F908353400A7313200F901F908353400A73400F901F908353800A73400F901F908353800A73200F901F908353700A73100F901F9083537003000F901F9083534003000F901F9083535003100F901F9083531003100F901F903F901F902

BIN
tests/contest2019/1958.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-0007002548EA+M-0E00000000+S-000410110001100E0010B300DC40+E-F908A7333100313200F901F909F901F908A7333600313200F901F908A7333600313600F901F908A7323800313600F901F908A7323800313200F901F908A7333100313200F901F908A73331003700F901F908A73236003700F901F908A73236003800F901F908A73238003600F901F908A73238003400F901F908A73233003400F901F908A7323300313000F901F908A7323800313000F901F908A73238003900F901F908A7323600313100F901F908A7323600313400F901F908A7333100313400F901F908A7333100313200F901F90AF901F908C03800C0313100F901F909F901F905C03600F901F908C03800C03500F901F905C03600F901F908C038003100F901F905C03600F901F908C039003600F901F905C03500F901F908C0313000313000F901F905C03400F901F908C0313100313300F901F905C03300F901F908C0313200313500F901F905C03200F901F908C0313300313600F901F905C03100F901F90AF901F90B31004200F901F9113200F901F908343000313100F901F909F901F9083430A66033A842D0003900F901F9083430A66038A842D0003800F901F90AF901F9083430003700F901F909F901F9083430A66031A842D0003800F901F90531A84200F901F90AF901F9083430003300F901F909F901F9083430003000F901F9083430A66033A842D0003300F901F9083430A66033A842D0003500F901F905C031A84200F901F9083430A66031A842D0003400F901F90AF901F90BC031004200F901F912F901F90AF901F908C03330003100F901F909F901F911333600F901F905312E313200F901F906C0392E3900F901F912F901F90AF901F9073000F901F908C0333000C03100F901F909F901F911323800F901F9053100F901F906C031322E373500F901F912F901F90AF901F90832003900F901F909F901F9083130003100F901F9083135003000F901F908313600C03300F901F908313500C03400F901F908313500C0313200F901F908313400C0313300F901F908313200C0313200F901F908313200C03400F901F908313100C03200F901F9083134003200F901F9083134003600F901F9083133003700F901F908313500313000F901F908313500313300F901F908313200313600F901F90AF901F9083000A73400F901F909F901F90AF901F9083100A73500F901F909F901F90AF901F9083300A73200F901F909F901F90AF901F908393000393000F901F903F901F902

BIN
tests/contest2019/2070.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 645 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-0007002548EA+M-0E00000000+S-000410110001100E0010B300DC40+E-F908A7333100313200F901F909F901F908A7333600313200F901F908A7333600313600F901F908A7323800313600F901F908A7323800313200F901F908A7333100313200F901F908A73331003700F901F908A73236003700F901F908A73236003800F901F908A73238003600F901F908A73238003400F901F908A73233003400F901F908A7323300313000F901F908A7323800313000F901F908A73238003900F901F908A7323600313100F901F908A7323600313400F901F908A7333100313400F901F908A7333100313200F901F90AF901F908C03800C0313100F901F909F901F905C03600F901F908C03800C03500F901F905C03600F901F908C038003100F901F905C03600F901F908C039003600F901F905C03500F901F908C0313000313000F901F905C03400F901F908C0313100313300F901F905C03300F901F908C0313200313500F901F905C03200F901F908C0313300313600F901F905C03100F901F90AF901F90B31004200F901F9113200F901F908343000313100F901F909F901F9083430A66033A842D0003900F901F9083430A66035A842D0003900F901F9083430A66038A842D0003700F901F9083430A66038A842D000313000F901F9083430A66037A842D000313100F901F90AF901F9083430003700F901F909F901F9083430A66031A842D0003800F901F90531A84200F901F90AF901F9083430003300F901F909F901F9083430003000F901F9083430A66033A842D0003300F901F9083430A66033A842D0003500F901F905C031A84200F901F9083430A66031A842D0003400F901F90AF901F90BC031004200F901F912F901F90AF901F908C03330003100F901F909F901F911333600F901F905312E313200F901F906C0392E3900F901F912F901F90AF901F9073000F901F908C0333000C03100F901F909F901F911323800F901F9053100F901F906C031322E373500F901F912F901F90AF901F90832003900F901F909F901F9083130003100F901F9083135003000F901F908313600C03300F901F908313500C03400F901F908313500C0313200F901F908313400C0313300F901F908313200C0313200F901F908313200C03400F901F908313100C03200F901F9083134003200F901F9083134003400F901F9083131003400F901F9083131003600F901F90837003600F901F90835003800F901F9083400313000F901F9083400313300F901F90AF901F9083000343000F901F903F901F902

BIN
tests/contest2019/2227.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110000100E0010B300D365+E-F908A73430003000F901F909F901F9113400F901F9053300F901F906A7333400F901F905342E3500F901F906A7333100F901F9053300F901F906A7323600F901F912F901F9073000F901F90AF901F908480049A73200F901F909F901F9113400F901F9053100F901F906A7313400F901F9053400F901F906A7363000F901F905322E3500F901F906A7313600F901F912F901F90AF901F90848A631370049A6313700F901F909F901F90B31004200F901F9113500F901F90848A642004900F901F90848A7420049A74200F901F90B42A631004200F901F912F901F9113200F901F90848A642004900F901F90848A7420049A74200F901F912F901F90848A642004900F901F90AF901F90848A732380049A6323700F901F909F901F9113200F901F9053800F901F906A7393000F901F9053400F901F906A7393000F901F912F901F90AF901F90848A6350049A73900F901F909F901F90B37004200F901F9113200F901F9113200F901F9053500F901F906393000F901F9054200F901F906393000F901F912F901F90B42A731004200F901F90AF901F90848A6330049A73300F901F909F901F912F901F90AF901F90848A635380049A73600F901F909F901F9053200F901F908480049A73200F901F905A73200F901F908480049A73200F901F9053600F901F908480049A63400F901F905A73200F901F908480049A73400F901F9053500F901F908480049A63400F901F9053500F901F908480049A73400F901F905A73200F901F90AF901F90848A734330049A6313800F901F909F901F90848A6380049A73800F901F9053400F901F908480049A63500F901F90848A7310049A63100F901F90848A7320049A73200F901F908480049A73400F901F9053400F901F908480049A7313400F901F905A73300F901F908480049A6313300F901F90AF901F90848A7360049A6313100F901F909F901F908480049A63300F901F90848A6320049A63200F901F9053400F901F90848A6330049A73300F901F908480049A73300F901F90AF901F90848A733004900F901F909F901F905A73700F901F908480049A73400F901F9053600F901F90AF901F90848A7330049A63300F901F909F901F9053300F901F90848A6320049A63200F901F908480049A63300F901F90AF901F90848A632340049A7313100F901F909F901F90848A6330049A73300F901F90848A6330049A63300F901F90AF901F90531303000F901F903F901F902

BIN
tests/contest2019/2405.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000500151CCF+M-0E00000000+S-000410110011001E0010B300EA68+E-F909F901F90732373000F901F90B31004200F901F90B30004300F901F9113200F901F908A742003000F901F909F901F90B3242A643004400F901F9084400A73200F901F905A73200F901F90844A642003000F901F90844A63242003100F901F905A73300F901F90844A63442003300F901F9053300F901F90844A64200A73400F901F908A74200A73400F901F90AF901F90833A64400A73400F901F909F901F9053500F901F90833A644A64200A73800F901F90833A642A64300A73600F901F90AF901F90834A642A64300A7313000F901F909F901F90844A63400A7313000F901F90834A644A64200A7313300F901F9053100F901F90834A64400A7313500F901F9053700F901F90834A642A64300A7323300F901F90BA731004200F901F90B31004300F901F90AF901F912F901F9073000F901F9083100A73900F901F909F901F908A73700A73100F901F90AF901F908A7333700A73600F901F90B36004200F901F9113200F901F909F901F9113200F901F9053500F901F906393000F901F9054200F901F906393000F901F912F901F90B37004200F901F90AF901F908A7343000A73300F901F912F901F908A73435003200F901F909F901F9113200F901F9053800F901F906393000F901F9053400F901F906393000F901F912F901F90AF901F908A7333900A7323200F901F909F901F9113400F901F9053100F901F906323500F901F9053400F901F906323200F901F9053200F901F906323300F901F9053300F901F906323000F901F912F901F908A7333900A7323000F901F9113400F901F9053100F901F906323000F901F9053300F901F906353000F901F9053300F901F906323000F901F912F901F90AF901F908A73233003600F901F909F901F90B30004200F901F90B30004300F901F9113800F901F90632323500F901F90542A743A674324200F901F90631333500F901F90B31004300F901F91542FB033600F901F90B42A631004200F901F916F901F9054200F901F912F901F90AF901F908323400A7313900F901F9113400F901F909F901F9113200F901F9053200F901F906393000F901F91543A53300F901F90AF901F916F901F9053400F901F906393000F901F912F901F90AF901F90B43A631004300F901F9053400F901F912F901F9113200F901F9083331A6384400A73200F901F909F901F9083331A6334400A73100F901F90AF901F90B31004400F901F912F901F905383000F901F903F901F902

BIN
tests/contest2019/2559.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-0007001B151D+M-0E00000000+S-090410110001100E0010B3006005+E-F908C03238003900F901F909F901F908C0323800313000F901F9053500F901F908C03233003400F901F905C03500F901F908C03238003700F901F9053200F901F908C0323600313400F901F905C03500F901F908C0333100313200F901F9053300F901F908C0323800313600F901F905C03800F901F908C0333600313200F901F9053500F901F908C03331003700F901F9053200F901F90AF901F908C03800C0313100F901F909F901F905C03600F901F908C03800C03500F901F905C03600F901F908C038003100F901F905C03600F901F908C039003600F901F905C03500F901F908C0313000313000F901F905C03400F901F908C0313100313300F901F905C03300F901F90AF901F908333300C03500F901F909F901F9053200F901F908333500C03700F901F905C03200F901F908333300C03900F901F9053600F901F908333900C03500F901F905C03200F901F908333700C03800F901F90AF901F908343200C03500F901F909F901F908343200C03900F901F9053500F901F908343700C03500F901F905C03200F901F908343500C03700F901F90AF901F908333200313000F901F909F901F9083332003800F901F9083337003900F901F908343000313100F901F9083433003900F901F9083438003800F901F908343800313000F901F90AF901F9083337003500F901F909F901F9083337003300F901F9083430003000F901F9083433003300F901F90AF901F9083400313000F901F909F901F90837003600F901F9053500F901F908313500313000F901F908313500313300F901F908313200313600F901F905C03400F901F9083600313400F901F9083600313200F901F9053700F901F908313200313000F901F905C03500F901F9083131003800F901F90AF901F90832003900F901F909F901F9083130003100F901F9083131003400F901F9053300F901F9083134003600F901F9083134003000F901F9053100F901F908313600C03200F901F908313500C03400F901F908313500C0313300F901F905C03300F901F908313200C03400F901F9053400F901F905C03500F901F9083131003500F901F90AF901F908C0333000C0313200F901F909F901F911333600F901F905312E313200F901F906392E3900F901F912F901F90AF901F908C0333000C0313000F901F909F901F9073000F901F911323800F901F9053100F901F90631322E373500F901F912F901F90AF901F9083000343000F901F903F901F902

BIN
tests/contest2019/2673.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 705 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110000100E0010B300D365+E-F90BA73930004600F901F90B362E33004500F901F90B35004400F901F9113200F901F90B30004200F901F911393900F901F908A7352E35A645784200A7352E35A645774200F901F90B42A644004200F901F909F901F912F901F90B342E35004500F901F90AF901F912F901F908A73700313400F901F909F901F9053500F901F90848003700F901F905A73500F901F9084800313400F901F90AF901F908A73400313000F901F909F901F9053500F901F90848003400F901F905A73500F901F9084800313000F901F90AF901F908A7313200313600F901F909F901F9053800F901F9084800313200F901F905A73800F901F9084800313600F901F90AF901F90B31004700F901F905323200F901F909F901F9113700F901F9054700F901F90848A7470049A74700F901F91547FB013600F901F90B47A631004700F901F916F901F912F901F9054700F901F90AF901F908353700A73500F901F909F901F9113300F901F9053200F901F9064600F901F912F901F905A73200F901F9064600F901F9113500F901F9054700F901F906393000F901F91747A53200F901F90B34004700F901F918F901F90B47A732004700F901F919F901F912F901F9083731004900F901F9113400F901F9054700F901F906393000F901F90B32004700F901F912F901F90B31004400F901F90B31004500F901F9113400F901F90AF901F90836340039A6324400F901F909F901F90848A73345003900F901F90848A73545003800F901F905A73100F901F9053300F901F90AF901F9082E35603735A7334500A7313200F901F909F901F9053800F901F90848A63445004900F901F9053200F901F90848A73245003100F901F90BA745004500F901F91545A53100F901F90BA744004400F901F916F901F912F901F9083338003100F901F9053900F901F9083331004900F901F9083332003900F901F9083335004900F901F908333700313100F901F9053400F901F908333900313300F901F905A73300F901F908333600313200F901F9083330004900F901F9083236003900F901F9083334003100F901F9083336003400F901F9083334003600F901F9083237003500F901F9083239003300F901F9083332004900F901F9083239003600F901F908323800313300F901F908333300313600F901F9083336004900F901F90AF901F9083338003100F901F909F901F9083333004900F901F9083332003200F901F90AF901F90830004600F901F903F901F902

BIN
tests/contest2019/2805.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 714 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110000100E0010B300D365+E-F90B3130004700F901F90AF901F9083500313100F901F909F901F90B36343630323036343230004200F901F90B31323435323534383433004000F901F9113200F901F911313100F901F90734356042A7478342A94700F901F90B8342A947004200F901F90540A7478340A94700F901F90B8340A947004000F901F912F901F90B32343632303234363032004200F901F90B34353131323335363531004000F901F912F901F90B342E35004200F901F9113200F901F90B30004000F901F90AF901F911333200F901F908362E35A642784000A7362E35A642774000F901F909F901F90B40A63930A938004000F901F912F901F90B362E34004200F901F912F901F90B31004600F901F9113200F901F90BA746004600F901F90AF901F9083736A73346003800F901F909F901F907393046A7363000F901F905332E3600F901F9073630A739304600F901F905332E3600F901F907383046A7393000F901F9053500F901F907393000F901F9053200F901F905A73300F901F912F901F90AF901F908323200313500F901F909F901F9113700F901F9073000F901F9054600F901F90732323500F901F90546743200F901F90B46A631A78346A936004600F901F912F901F9073000F901F9054600F901F90AF901F9083530003500F901F909F901F90B31333433323832343638363536004200F901F90B37383333323439333934323335004000F901F9113300F901F91546A53800F901F90B32343533323132313234313738004200F901F90B31383231333131333131333232004000F901F916F901F911313500F901F90734356042A7478342A94700F901F9056040A7478340A947D0D06031A62E34316032A788322C42A7478342A94700F901F90B8342A947004200F901F90B8340A947004000F901F912F901F90B37343633343638373435363738004200F901F90B32323332343333313531343133004000F901F90B31A646004600F901F912F901F90AF901F908363900A73600F901F909F901F90B3634323036343630004200F901F90B353432343632323232004000F901F9113200F901F911313000F901F90734356042A7478342A94700F901F90540A7478340A94700F901F90B8342A947004200F901F90B8340A947004000F901F912F901F90B363432303630343632004200F901F90B32323234353331313134004000F901F912F901F90AF901F905334700F901F903F901F902

BIN
tests/contest2019/3217.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 763 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110000100E0010B300D365+E-F9083400313700F901F90B3434004500F901F90B3534383433323533004200F901F909F901F911323400F901F906393000F901F90B2E318342004200F901F90531306042A7834200F901F90B42A635306032303331837842D0D0A633313330363483782E31A742004200F901F912F901F90AF901F905333000F901F90B36353533363448004200F901F911323100F901F911313600F901F90B2E358342004200F901F90848003532A7324CA93435A77A42A7834200F901F909F901F9053000F901F90AF901F90632322E3500F901F912F901F9053100F901F90B42A63132837848A73532D0D0A633333031303038383531837848A73338D0D0A634323538333833303537837848A73430004200F901F90B42A632343533353734373431837848A73432D0D0A631303831363731303434837848A745004200F901F90B42A6373937313836363830837848A73334D0D0A6383738303632313430837848A73336004200F901F912F901F9084800323200F901F9113800F901F90831360049A64200F901F90B42A731A78331307742004200F901F909F901F905C04200F901F912F901F90AF901F90845003800F901F909F901F9083435003500F901F9083432003700F901F9083431003200F901F9053500F901F90848003400F901F9083435003100F901F90848004200F901F9084500C03700F901F9083432004200F901F90848003100F901F90AF901F90B342E35004200F901F9113200F901F911343500F901F9063800F901F9082E35A642784C002E35A642774C00F901F909F901F912F901F90AF901F90B362E3335004200F901F912F901F90B35363432343635363030004200F901F90848003200F901F9113500F901F9083230220049A73100F901F911313200F901F90B2E358342004200F901F91542A5834200F901F909F901F9053000F901F90AF901F916F901F90534A93300F901F912F901F90B42A63136373739303934837842004200F901F912F901F90B3831393233323031004200F901F911313200F901F9083730004900F901F9113900F901F90B2E358342004200F901F9113200F901F908313430A7480045A77C42A7834200F901F909F901F9053000F901F90AF901F912F901F9053100F901F912F901F90B45A731004500F901F90B42A63333363836343730837845A73431D0D0A632333634343238837845A73338D0D0A6323633363835837845A73335004200F901F912F901F903F901F902

BIN
tests/contest2019/3270.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110000100E0010B300D365+E-F90B342E35004300F901F9113200F901F911373200F901F908C036382E35A643784C00C031322E35A643774C00F901F909F901F9063500F901F912F901F90AF901F90B362E33004300F901F912F901F90848003300F901F909F901F905C03500F901F9084800C03300F901F9053500F901F90848003300F901F90AF901F908C03730003700F901F909F901F9053500F901F90848003000F901F905C03500F901F90848003700F901F90AF901F908C03735003900F901F909F901F9053800F901F90848003500F901F905C03800F901F90848003900F901F911373800F901F90B353336303536393137837848A63238D0D0A6353336303335343438837848A63235D0D0A631383939393835837848A63239004300F901F90B43A6353338303439393234837848A63236D0D0A63635303438383936837848A631D0D0A63635303330343634837848A732004300F901F90B43A6353338303232343632837848A63237D0D0A63635303236313736837848A633D0D0A63635303133303234837848A737004300F901F90B43A6323638343335343638837848A63138D0D0A632313039333136837848A63335D0D0A631303539333838837848A63334004300F901F90B43A6313030363633333238837848A63136D0D0A63630383138373230837848A637D0D0A63337373835393230837848A731004300F901F90B43A636373736837848A63336D0D0A63530333639837848A63331D0D0A63530333835837848A63330004300F901F90B43A6313233343234837848D0D0A6373836373532837848A63337D0D0A631383335303038837848A63234004300F901F90B43A63335363730333336837848A632D0D0A6343832333436323460837848A635D0D0A6837848A735004300F901F90B43A63333353638383936837848A733D0D0A6343430343034343860837848A636D0D0A6837848A736004300F901F90B43A63236303637837848A63332D0D0A63133333938837848A63333D0D0A639363060837848A638D0D0A6837848A738004300F901F90848A631003900F901F91548A5C0353300F901F909F901F9113800F901F90848A7430049A74300F901F90B43A631A78343A936004300F901F9054300F901F912F901F916F901F911333800F901F909F901F91531A5888343A932C939A749D0D02C3200F901F9053000F901F916F901F90AF901F908480049A73100F901F912F901F912F901F902

BIN
tests/contest2019/m0069.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

View File

@ -0,0 +1 @@
http://wes.casio.com/math/index.php?q=I-295A+U-000000000000+M-0E00000000+S-000410110001100E0010B30025E0+E-F908323000A7363000F901F909F901F9053800F901F906A7393000F901F9053400F901F906A7393000F901F9053900F901F906A7393000F901F9053400F901F903F901F902