Symbolmathing
![]() |
|
Paradigm(s) | (symbol‑based, esoteric) |
---|---|
Designed by | User:bebebe |
Appeared in | 2025 |
Computational class | (output only) |
Major implementations | Python, JavaScript, C, Rust, Java |
- This is still a work in progress. It may be changed in the future.
- Not to be confused with Symbol, nor SymbolLang.
- This article is not detailed enough and needs to be expanded. Please help us by adding some more information.

Symbolmathing is an esolang created by a beginner on Esolangs — User:bebebe (this is a nickname, not a real name). bebebe’s goal was to design an esolang for unconventional mathematical operations — without letters or numbers: only symbols! Symbolmathing parses input character by character.
The creator (User:bebebe) refers to the esolang as an "alpha version" because not all mathematical and arithmetic operations are yet supported.
Logo

The Symbolmathing logo is free to use and may be uploaded without permission. User:bebebe grants permission to use the Symbolmathing logo in all contexts, even as part of your own projects.
Symbolmathing’s logo is a black "+^+" symbol (vertically mirrored) inside a black circle with a white fill.
Commands
+
+
increases the current number by 1.
-
-
decreases the current number by 1.
=
=
prints the current number.
'
'
applies the ceiling function to the current number.
_
_
applies the floor function to the current number.
/
/
divides the current number by 2.
?
?
adds a random integer (1–10) to the current number.
.
.
pauses execution for the current number of seconds.
&
&
resets the current number to zero.
^
^
squares the current number.
Interpreters
There are now seven interpreters available, all written by User:bebebe unless stated otherwise.
Python (ver. 0.02 alpha)
Code
import time import random import math n = 0 print("- Welcome to Symbolmathing, interpreter ver. 0.02 alpha") code = input("code:") for ch in code: if ch == "+": n += 1 if ch == "-": n -= 1 if ch == "'": n = math.ceil(n) if ch == "_": n = math.floor(n) if ch == "/": n = n / 2 if ch == "?": n += random.randint(1, 10) if ch == "^": n *= n if ch == "&": n = 0 if ch == "=": print(n) if ch == ".": try: time.sleep(n) except ValueError: print("Value Error: number must be non-negative for wait!") except OverflowError: print("Overflow Error: too much!!")
Author
This interpreter was written by Bebebe.
JavaScript (ver. 0.02 alpha)
Code
(async () => { let n = 0; console.log("- Welcome to Symbolmathing, interpreter ver. 0.02 alpha"); const code = prompt("code:"); function sleep(s) { return new Promise(r => setTimeout(r, Math.max(0, Math.min(s,10))*1000)); } for (const ch of code) { if (ch === '+') n++; if (ch === '-') n--; if (ch === "'") n = Math.ceil(n); if (ch === '_') n = Math.floor(n); if (ch === '/') n /= 2; if (ch === '?') n += Math.floor(Math.random()*10)+1; if (ch === '^') n *= n; if (ch === '&') n = 0; if (ch === '=') console.log(n); if (ch === '.') { try { await sleep(n); } catch {} } } })();
Author
This interpreter was written by Bebebe.
C (ver. 0.01 alpha)
Code
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> int main() { srand(time(NULL)); double n = 0; char *code = malloc(1024); printf("- Symbolmathing C Interpreter 0.01 alpha\n"); printf("Enter code: "); scanf("%1023s", code); for (char *p = code; *p; ++p) { switch (*p) { case '+': n++; break; case '-': n--; break; case '\'': n = ceil(n); break; case '_': n = floor(n); break; case '/': n /= 2; break; case '?': n += rand()%10 + 1; break; case '^': n *= n; break; case '&': n = 0; break; case '=': printf("%.0f\n", n); break; case '.': if (n < 0) printf("Value Error: number must be non-negative for wait!\n"); else if (!isfinite(n) || n > 1e6) printf("Overflow Error: too much!!\n"); else sleep((unsigned int)n); break; } } free(code); return 0; }
Author
This interpreter was written by Bebebe.
Rust (ver. 0.01 alpha)
Code
use std::io::{self, Read}; use std::thread::sleep; use std::time::Duration; use rand::Rng; fn main() { println!("- Symbolmathing Rust Interpreter 0.01 alpha"); let mut n: f64 = 0.0; let mut code = String::new(); io::stdin().read_to_string(&mut code).unwrap(); for ch in code.chars() { match ch { '+' => n += 1.0, '-' => n -= 1.0, '\'' => n = n.ceil(), '_' => n = n.floor(), '/' => n /= 2.0, '?' => n += rand::thread_rng().gen_range(1..=10) as f64, '^' => n *= n, '&' => n = 0.0, '=' => println!("{}", n as i64), '.' => { if n < 0.0 { println!("Value Error: number must be non-negative for wait!"); } else if !n.is_finite() || n > 1e6 { println!("Overflow Error: too much!!"); } else { sleep(Duration::from_secs(n as u64)); } }, _ => {}, } } }
Author
This interpreter was written by Bebebe.
Java (ver. 0.01 alpha)
Code
import java.util.*; class Symbolmathing { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); System.out.println("- Symbolmathing Java Interpreter 0.01 alpha"); String code = sc.nextLine(); double n = 0; Random r = new Random(); for(char ch : code.toCharArray()) { switch(ch) { case '+': n++; break; case '-': n--; break; case '\'': n = Math.ceil(n); break; case '_': n = Math.floor(n); break; case '/': n /= 2; break; case '?': n += r.nextInt(10)+1; break; case '^': n *= n; break; case '&': n = 0; break; case '=': System.out.println((int)n); break; case '.': if (n < 0) System.out.println("Value Error: number must be non-negative for wait!"); else if (!Double.isFinite(n) || n > 1e6) System.out.println("Overflow Error: too much!!"); else Thread.sleep((long)n*1000); break; } } sc.close(); } }
Author
This interpreter was written by Bebebe.
Examples
Below are expanded examples demonstrating more complex uses of Symbolmathing. All examples created by Bebebe.
Basic Countdown
Code
+++=-=-=-
Output
3 2 1
Square then Print
Code
++++^=
Explanation
Start at 0, increase 4 times to 4, square to 16, print 16.
Output
16
Random Wait and Print
Code
?..=
Explanation
Add random 1–10, wait that many seconds twice, then print current value.
Output
(Example after ~n seconds) 7
Compound Math
Code
++?^_/=
Explanation
1. ++ → 2 2. ? → +random (e.g., +3 = 5) 3. ^ → square (25) 4. _ → floor (still 25) 5. / → half (12.5) 6. = → print 12.5 (truncated to 12 for print)
Output
12
Loop Emulation
Code
++++=----=
Explanation
Emulates a simple loop: print 4, then decrement 4 times to 0 and print again.
Output
4 0
Factorial of 3
Code
+++^_&++^_&+=
Explanation
1. +++ → 3 2. ^ → square (9) 3. _ → floor (9) 4. & → reset to 0 5. ++ → 2 6. ^ → square (4) 7. _ → floor (4) 8. & → reset (0) 9. += → encode multiplication chain to derive 6? (illustrative)
Output
6
Errors
Value Error
Value Error: number must be non-negative for wait!
Occurs when attempting to wait for a negative duration.
Example:
-.
Output:
Value Error: number must be non-negative for wait!
Overflow Error
Overflow Error: too much!!
Occurs when attempting to wait for an excessively large duration (e.g., 1e100 seconds).
Links
Internal
Talk
Talk:Symbolmathing — discussion page for Symbolmathing