summaryrefslogtreecommitdiff
path: root/lambda-calcul/javascript/src
diff options
context:
space:
mode:
authorEmmanuel Gaillot <emmanuel.gaillot@gmail.com>2025-12-20 21:14:53 +0100
committerEmmanuel Gaillot <emmanuel.gaillot@gmail.com>2025-12-20 22:00:26 +0100
commit895e9a4fc2c1a427c55ebaafb5423d3db6e3dddc (patch)
treee69b67055428d49cc3bad8f81b1013e45a1dd5c8 /lambda-calcul/javascript/src
parent800f5628d86313c315d38e983318bb0a027137e2 (diff)
downloadlambda-nantes-895e9a4fc2c1a427c55ebaafb5423d3db6e3dddc.tar.gz
Solve retrieved challenge
Diffstat (limited to 'lambda-calcul/javascript/src')
-rw-r--r--lambda-calcul/javascript/src/client.js19
-rw-r--r--lambda-calcul/javascript/src/internals.js5
-rw-r--r--lambda-calcul/javascript/src/interpreter.js7
-rw-r--r--lambda-calcul/javascript/src/parser.js7
-rw-r--r--lambda-calcul/javascript/src/printer.js5
5 files changed, 42 insertions, 1 deletions
diff --git a/lambda-calcul/javascript/src/client.js b/lambda-calcul/javascript/src/client.js
index d046187..88ea253 100644
--- a/lambda-calcul/javascript/src/client.js
+++ b/lambda-calcul/javascript/src/client.js
@@ -1,11 +1,27 @@
const axios = require('axios');
-const newClient = ({ playerName, challengerURL }) => {
+const defaultInterpreter = require('./interpreter');
+const defaultParser = require('./parser');
+const defaultPrinter = require('./printer');
+
+const newClient = ({
+ challengerURL,
+ interpreter = defaultInterpreter,
+ parser = defaultParser,
+ playerName,
+ printer = defaultPrinter,
+}) => {
const nextChallenge = (token) => axios ({
url: `${challengerURL}/api/challenge?token=${token}`,
})
.then(({ data: { expr } }) => expr);
+ const solve = (challenge) => {
+ const parsedExpression = parser.parse(challenge);
+ const evaluatedExpression = interpreter.evaluate(parsedExpression);
+ return printer.print(evaluatedExpression);
+ }
+
const start = () => axios({
method: 'POST',
url: `${challengerURL}/api/register`,
@@ -16,6 +32,7 @@ const newClient = ({ playerName, challengerURL }) => {
return {
nextChallenge,
+ solve,
start,
};
};
diff --git a/lambda-calcul/javascript/src/internals.js b/lambda-calcul/javascript/src/internals.js
new file mode 100644
index 0000000..f55736a
--- /dev/null
+++ b/lambda-calcul/javascript/src/internals.js
@@ -0,0 +1,5 @@
+const σ = (name) => ({ sym: name });
+
+module.exports = {
+ σ,
+};
diff --git a/lambda-calcul/javascript/src/interpreter.js b/lambda-calcul/javascript/src/interpreter.js
new file mode 100644
index 0000000..a2e8481
--- /dev/null
+++ b/lambda-calcul/javascript/src/interpreter.js
@@ -0,0 +1,7 @@
+const { σ } = require('./internals');
+
+const evaluate = (term) => term;
+
+module.exports = {
+ evaluate,
+};
diff --git a/lambda-calcul/javascript/src/parser.js b/lambda-calcul/javascript/src/parser.js
new file mode 100644
index 0000000..77593e0
--- /dev/null
+++ b/lambda-calcul/javascript/src/parser.js
@@ -0,0 +1,7 @@
+const { σ } = require('./internals');
+
+const parse = (x) => σ(x);
+
+module.exports = {
+ parse,
+};
diff --git a/lambda-calcul/javascript/src/printer.js b/lambda-calcul/javascript/src/printer.js
new file mode 100644
index 0000000..39dbf38
--- /dev/null
+++ b/lambda-calcul/javascript/src/printer.js
@@ -0,0 +1,5 @@
+const print = ({ sym: name }) => name;
+
+module.exports = {
+ print,
+};