diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..b58b603
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,5 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/ctf10k-rpn.iml b/.idea/ctf10k-rpn.iml
new file mode 100644
index 0000000..0c8867d
--- /dev/null
+++ b/.idea/ctf10k-rpn.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml
new file mode 100644
index 0000000..d23208f
--- /dev/null
+++ b/.idea/jsLibraryMappings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..5b812b6
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..eff6c17
--- /dev/null
+++ b/main.js
@@ -0,0 +1,59 @@
+const Net = require('net');
+
+const port = 8002
+const host = "ctf10k.root-me.org"
+
+const client = new Net.Socket
+
+client.on('data', (data) => {
+ console.log("received data:\n", data.toString())
+
+ regex =/(?^\d+.*$)/m
+ let message = regex.exec(data.toString()).groups["equation"]
+ console.log("equation:", message)
+
+ let response = interpretRPN(message)
+ console.log("response:", response)
+ let buf = Buffer.from(response+"\n")
+ client.write(buf)
+})
+
+client.on('end', () => {
+ console.log("connection terminated by remote host")
+})
+
+client.connect({port: port, host: host}, () => {
+ console.log("connected")
+})
+
+function interpretRPN(message){
+ const operators = ['-', '+', 'x', '/']
+ let elements = message.split(' ')
+ for (let i = 0; i < elements.length; i++) {
+ if (operators.includes(elements[i])) {
+ let operation = elements.slice(i-2, i+1)
+ let result = computeOperation(operation)
+ elements.splice(i-2, 3, result)
+ i = 0
+ }
+ }
+
+ return elements.toString()
+}
+
+function computeOperation(operation) {
+ switch (operation[2]) {
+ case '-':
+ return BigInt(operation[0]) - BigInt(operation[1])
+ case 'x':
+ return BigInt(operation[0]) * BigInt(operation[1])
+ case '/':
+ return BigInt(operation[0]) / BigInt(operation[1])
+ case '+':
+ return BigInt(operation[0]) + BigInt(operation[1])
+ }
+}
+
+// const example = "994 611 + 357 733 + 82 543 - x x 740 + 136 x 996 +"
+// console.log("response:", interpretRPN(example))
+
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..8cc61fe
--- /dev/null
+++ b/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "ctf10k-rpn",
+ "version": "1.0.0",
+ "dependencies": {
+ }
+}