# Arithmetic

Arithmetic is an esolang invented by User:None1, which is based on arithmetic exams.

## Syntax

```==Begin Exam X==
```

begins an exam, X must be the number of the exam, for example, the first exam must starts with ==Begin Exam 1==.

```==End Exam X==
```

matches the ==Begin Exam X== command, the X must be the same as the X in its matching command.

```X. A+B=? (y points)
```

defines a problem in the exam. A and B must be positive decimal integers. X must be the number of the problem

```X. A
```

defines a choice of a problem. The first choice of a problem must be A. xxx, The second choice must be B. xxx, in which xxx is a positive decimal integer, etc. (Space between . and the number is MANDATORY). Each problem must have only one correct choice.

```Answer: X
```

defines the answer of a problem. If the answer is correct, the points of the problem will be earned.

## Execution

Each time one exam ends, Arithmetic prints the total points earned in that exam modulo 256 as an ASCII character. Arithmetic has no input.

## Example Programs

### Nope. interpreter

```==Begin Exam 1==
1. 1+1=? (78 points)
A. 2
==End Exam 1==
==Begin Exam 2==
1. 1+1=? (111 points)
A. 2
==End Exam 2==
==Begin Exam 3==
1. 1+1=? (112 points)
A. 2
==End Exam 3==
==Begin Exam 4==
1. 1+1=? (101 points)
A. 2
==End Exam 4==
==Begin Exam 5==
1. 1+1=? (46 points)
A. 2
==End Exam 5==
```

### Hello World

```==Begin Exam 1==
1. 1+1=? (72 points)
A. 2
==End Exam 1==
==Begin Exam 2==
1. 1+1=? (101 points)
A. 2
==End Exam 2==
==Begin Exam 3==
1. 1+1=? (108 points)
A. 2
==End Exam 3==
==Begin Exam 4==
1. 1+1=? (108 points)
A. 2
==End Exam 4==
==Begin Exam 5==
1. 1+1=? (111 points)
A. 2
==End Exam 5==
==Begin Exam 6==
1. 1+1=? (32 points)
A. 2
==End Exam 6==
==Begin Exam 7==
1. 1+1=? (87 points)
A. 2
==End Exam 7==
==Begin Exam 8==
1. 1+1=? (111 points)
A. 2
==End Exam 8==
==Begin Exam 9==
1. 1+1=? (114 points)
A. 2
==End Exam 9==
==Begin Exam 10==
1. 1+1=? (108 points)
A. 2
==End Exam 10==
==Begin Exam 11==
1. 1+1=? (100 points)
A. 2
==End Exam 11==
==Begin Exam 12==
1. 1+1=? (33 points)
A. 2
```function interpret(a){const e=a.split`\n`;let o="",st=x=p=c=P=C=+o,r,v;for(const n of e){if((!++C)||n==[])continue;if(st==0&&n=="==Begin Exam "+ ++x+"=="&&++st&&!(v={},p=c=P=+!v))continue;if(st==1&&(m=n.match(/^([0-9]+). ([0-9]+)\+([0-9]+)=\? \(([0-9]+) points\)\$/))&&+m&&+m&&++p==m&&++st&&!(v={},c=+!v)&&(r=m.slice(2,5)))continue;if(st==2&&c<26&&(m=n.match(new RegExp("^("+String.fromCharCode(++c+64)+")\. ([0-9]+)\$")))&&+m&&(!(Object.values(v).indexOf(m)>-1&&m==+r+ +r))&&(v[m]=m))continue;if(st==2&&(m=n.match(/^Answer: ([A-Z])\$/))&&m.charCodeAt(0)-64<c&&v[m]==+r+ +r&&(P+=(+r)%256)&&--st)continue;if(st==2&&(m=n.match(/^Answer: ([A-Z])\$/))&&m.charCodeAt(0)-64<c&&--st)continue;if(st==1&&n=="==End Exam "+x+"=="&&1+--st&&(o+=String.fromCharCode(P%256)))continue;throw new Error("Invalid syntax on line "+C);}if(st)throw new Error("Unexpected end of input");console.log(o);}