Symbolmathing

From Esolang
Jump to navigation Jump to search
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.

Symbolmathing 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

Esolang

Symbolmathing

Categories