BracketOnly

From Esolang
Jump to navigation Jump to search

BracketOnly is an esolang invented by User:None1, it is no longer a work in progress. It uses only two characters: Brackets! (()). Thus the name.

The official logo

Syntax

BracketOnly uses nested brackets, brackets must be matched, there must be even groups of brackets, and each group must be valid too.

For example:

(

is invalid because it is unmatched.

(())()(()())

is invalid because there are 3 groups, which is an odd number.

(())()

is invalid because the first group has one group, which is an odd number.

Groups are divided two by two: (F)(p1p2p3...), F is the ID of the function, and p1, p2, p3, ... are arguments. That calls the function with the ID F and arguments p1, p2, p3, ...

Memory model

BracketOnly uses an unbounded array of signed bignums.

Functions

BracketOnly uses built-in functions, they are as follows:

Function table
ID Name (not used in actual programming) arguments Description
0 one () Returns 1
1 add (a,b,c,d,...) Returns the sum of all arguments
2 mul (a,b,c,d,...) Returns the product of all arguments
3 sub (a,b) Returns a-b
4 div (a,b) Returns the quotient of a/b
5 mod (a,b) Returns the remainder of a/b
6 inp () Returns the input integer
7 inpc () Returns the value of the input Unicode character
8 out (x) Output x as number and return x
9 outc (x) Output the Unicode character with value x and return x
10 rnd (x,y) Returns random integer from x to y
11 if (a,b,c) If a is not zero, evaluate b, otherwise evaluate c
12 while (a,b) While a is not zero, evaluate b, return the sum of all evaluations
13 read (i) Return the i-th element (starting from 0) of the array
14 write (i,j) Set the i-th element (starting from 0) of the array to j
15 and (x,y) return x bitwise AND y
16 or (x,y) return x bitwise OR y
17 xor (x) return x bitwise XOR y
18 not (x) return 1 if x is 0, otherwise 0
19 lt (x,y) return 1 if x < y, otherwise 0
20 gt (x,y) return 1 if x > y, otherwise 0
21 eq (x,y) return 1 if x = y, otherwise 0
22 ne (x,y) return 1 if x != y, otherwise 0
23 le (x,y) return 1 if x <= y, otherwise 0
24 ge (x,y) return 1 if x >= y, otherwise 0

Note that if the function ID consists of multiple values, they are summed to get the ID, for example:

(()()()())(()())

Will return 1 by calling (one()+one())(one(),one())(mul(one(),one())).

Examples

Constants

The following Python program generates constants:

memo={0:'',1:'()()'}
def generate(x):
    if x in memo:
        return memo[x]
    l=[]
    for i in range(1,x):
        l.append(generate(i)+generate(x-i))
    for i in range(2,x):
        if x%i==0:
            l.append('(()()()())((()())('+generate(i)+')'+'(()())('+generate(x//i)+'))')
    res=l[0]
    for i in l[1:]:
        if len(i)<len(res):
            res=i
    memo[x]=res
    return res
for i in range(100):
    print(f'{i} - '+generate(i))

Which are:

0 - 
1 - ()()
2 - ()()()()
3 - ()()()()()()
4 - ()()()()()()()()
5 - ()()()()()()()()()()
6 - ()()()()()()()()()()()()
7 - ()()()()()()()()()()()()()()
8 - ()()()()()()()()()()()()()()()()
9 - ()()()()()()()()()()()()()()()()()()
10 - ()()()()()()()()()()()()()()()()()()()()
11 - ()()()()()()()()()()()()()()()()()()()()()()
12 - ()()()()()()()()()()()()()()()()()()()()()()()()
13 - ()()()()()()()()()()()()()()()()()()()()()()()()()()
14 - ()()()()()()()()()()()()()()()()()()()()()()()()()()()()
15 - ()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
16 - (()()()())((()())(()()()()()()()())(()())(()()()()()()()()))
17 - ()()(()()()())((()())(()()()()()()()())(()())(()()()()()()()()))
18 - (()()()())((()())(()()()()()())(()())(()()()()()()()()()()()()))
19 - ()()(()()()())((()())(()()()()()())(()())(()()()()()()()()()()()()))
20 - (()()()())((()())(()()()()()()()())(()())(()()()()()()()()()()))
21 - ()()(()()()())((()())(()()()()()()()())(()())(()()()()()()()()()()))
22 - ()()()()(()()()())((()())(()()()()()()()())(()())(()()()()()()()()()()))
23 - ()()()()()()(()()()())((()())(()()()()()()()())(()())(()()()()()()()()()()))
24 - (()()()())((()())(()()()()()()()())(()())(()()()()()()()()()()()()))
25 - (()()()())((()())(()()()()()()()()()())(()())(()()()()()()()()()()))
26 - ()()(()()()())((()())(()()()()()()()()()())(()())(()()()()()()()()()()))
27 - ()()()()(()()()())((()())(()()()()()()()()()())(()())(()()()()()()()()()()))
28 - (()()()())((()())(()()()()()()()())(()())(()()()()()()()()()()()()()()))
29 - ()()(()()()())((()())(()()()()()()()())(()())(()()()()()()()()()()()()()()))
30 - (()()()())((()())(()()()()()()()()()())(()())(()()()()()()()()()()()()))
31 - ()()(()()()())((()())(()()()()()()()()()())(()())(()()()()()()()()()()()()))
32 - (()()()())((()())(()()()()()()()())(()())(()()()()()()()()()()()()()()()()))
33 - ()()(()()()())((()())(()()()()()()()())(()())(()()()()()()()()()()()()()()()()))
34 - ()()()()(()()()())((()())(()()()()()()()())(()())(()()()()()()()()()()()()()()()()))
35 - (()()()())((()())(()()()()()()()()()())(()())(()()()()()()()()()()()()()()))
36 - (()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()))
37 - ()()(()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()))
38 - ()()()()(()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()))
39 - ()()()()()()(()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()))
40 - (()()()())((()())(()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()))
41 - ()()(()()()())((()())(()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()))
42 - (()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()))
43 - ()()(()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()))
44 - ()()()()(()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()))
45 - (()()()())((()())(()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
46 - ()()(()()()())((()())(()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
47 - ()()()()(()()()())((()())(()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
48 - (()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()))
49 - (()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()))
50 - ()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()))
51 - ()()()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()))
52 - ()()()()()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()))
53 - ()()()()()()()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()))
54 - (()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
55 - ()()(()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
56 - (()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()))
57 - ()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()))
58 - ()()()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()))
59 - ()()()()()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()))
60 - (()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()))
61 - ()()(()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()))
62 - ()()()()(()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()))
63 - (()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
64 - (()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()))
65 - ()()(()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()))
66 - (()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()))
67 - ()()(()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()))
68 - ()()()()(()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()))
69 - ()()()()()()(()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()))
70 - (()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()))
71 - ()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()))
72 - (()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
73 - ()()(()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
74 - ()()()()(()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
75 - ()()()()()()(()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
76 - ()()()()()()()()(()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
77 - (()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()))
78 - ()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()))
79 - ()()()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()))
80 - (()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()))
81 - (()()()())((()())(()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
82 - ()()(()()()())((()())(()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
83 - ()()()()(()()()())((()())(()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()))
84 - (()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()()()))
85 - ()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()()()))
86 - ()()()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()()()))
87 - ()()()()()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()()()))
88 - (()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()))
89 - ()()(()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()))
90 - (()()()())((()())(()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()))
91 - ()()(()()()())((()())(()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()))
92 - ()()()()(()()()())((()())(()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()))
93 - ()()()()()()(()()()())((()())(()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()))
94 - ()()()()()()()()(()()()())((()())(()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()))
95 - (()()()())((()())(()()()()()()()()()())(()())(()()(()()()())((()())(()()()()()())(()())(()()()()()()()()()()()()))))
96 - (()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()()()))
97 - ()()(()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()()()))
98 - (()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()()()()()()()))
99 - (()()()())((()())(()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()))

Cat program

(()()()()()()()()()()()()()()()()()()()()()()()())((()()()()()()()()()()()()()()()()()())((()()()()()()()()()()()()()())()))

A+B Problem

(()()()()()()()()()()()()()()()())((()())((()()()()()()()()()()()())()(()()()()()()()()()()()())()))

XKCD Random Number

(()()()()()()()()()()()()()()()()()())((()())(()()()()()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()))))

Alternative:

(()()()()()()()()()()()()()()()())((()())(()()()()()()()()))

Hello World

(()()()()()()()()()()()()()()()()()())((()()()())((()())(()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()())))(()()()()()()()()()()()()()()()()()())((()())(()()(()()()())((()())(()()()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()))))(()()()()()()()()()()()()()()()()()())((()()()())((()())(()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()()())))(()()()()()()()()()()()()()()()()()())((()()()())((()())(()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()()())))(()()()()()()()()()()()()()()()()()())((()())(()()(()()()())((()())(()()()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()))))(()()()()()()()()()()()()()()()()()())((()())(()()()()(()()()())((()())(()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()))))(()()()()()()()()()()()()()()()()()())((()()()())((()())(()()()()()()()())(()())(()()()()()()()()()()()()()()()())))(()()()()()()()()()()()()()()()()()())((()())(()()()()()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()()()))))(()()()()()()()()()()()()()()()()()())((()())(()()(()()()())((()())(()()()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()))))(()()()()()()()()()()()()()()()()()())((()()()())((()())(()()()()()()()()()()()())(()())(()()(()()()())((()())(()()()()()())(()())(()()()()()()()()()()()())))))(()()()()()()()()()()()()()()()()()())((()()()())((()())(()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()()()()()())))(()()()()()()()()()()()()()()()()()())((()()()())((()())(()()()()()()()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()()()()()()()())))(()()()()()()()()()()()()()()()()()())((()())(()()(()()()())((()())(()()()()()()()())(()())(()()()()()()()()()()()()()()()()))))

Truth Machine

(()()()()()()()()()()()()()()()()()()()()()()()()()()()())((()())()(()()()()()()()()()()()())())(()()()()()()()()()()()()()()()())((()()()()()()()()()()()()()()()()()()()()()()()()()())((()())()))(()()()()()()()()()()()()()()()()()()()()()()()())((()()()()()()()()()()()()()()()()()()()()()()()()()())((()())())(()()()()()()()()()()()()()()()())(()()))

Generated with:

print(Write(0,Inp())+Out(Read(0))+While(Read(0),Out(1)))

Fibonacci

(()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()()())(()()()()()()()()()()()()()()()()()()()()()()()())(()()(()())((()()()()()()()()()()()()()()()())((()()()()()()()()()()()()()()()()()()()()()()()()()())((()())()))(()()()()()()()()()()()()()()()()()()()()()()()()()()()())((()())(()()()())(()())((()()()()()()()()()()()()()()()()()()()()()()()()()())((()())())(()()()()()()()()()()()()()()()()()()()()()()()()()())(()())))(()()()()()()()()()()()()()()()()()()()()()()()()()()()())((()())()(()()()()()()()()()()()()()()()()()()()()()()()()()())(()()))(()()()()()()()()()()()()()()()()()()()()()()()()()()()())(()()(()()()()()()()()()()()()()()()()()()()()()()()()()())((()())(()()()())))))

Generated with:

print(Write(1,1)+While(1,Add(Out(Read(0)),Write(2,Add(Read(0),Read(1))),Write(0,Read(1)),Write(1,Read(2)))))

Never Gonna Give You Up

BracketOnly/Rickroll, an unoptimized implementation, it is LZMA compressed and encoded with Base64 since the original program is 264108 bytes long!

Bogen

Bogen, a generator in Python, allows users to generate BracketOnly code easily, its source code is like this:

memo={0:'',1:'()()'}
def generate(x):
    if x in memo:
        return memo[x]
    l=[]
    for i in range(1,x):
        l.append(generate(i)+generate(x-i))
    for i in range(2,x):
        if x%i==0:
            l.append('(()()()())((()())('+generate(i)+')'+'(()())('+generate(x//i)+'))')
    res=l[0]
    for i in l[1:]:
        if len(i)<len(res):
            res=i
    memo[x]=res
    return res
def isonebracket(x):
    num,cnt=0,0
    for i in x:
        if i=='(':
            num+=1
        else:
            num-=1
        if not num:
            cnt+=1
    return cnt==2
def merge(x):
    if not isonebracket(x):
        return '(()())('+x+')'
    return x
def build(x):
    if isinstance(x,str):
        return x
    return merge(generate(x))

def One(*args):
    return "(" + generate(0) + ")(" + "".join(map(build, args)) + ")"


def Add(*args):
    return "(" + generate(1) + ")(" + "".join(map(build, args)) + ")"


def Mul(*args):
    return "(" + generate(2) + ")(" + "".join(map(build, args)) + ")"


def Sub(*args):
    return "(" + generate(3) + ")(" + "".join(map(build, args)) + ")"


def Div(*args):
    return "(" + generate(4) + ")(" + "".join(map(build, args)) + ")"


def Mod(*args):
    return "(" + generate(5) + ")(" + "".join(map(build, args)) + ")"


def Inp(*args):
    return "(" + generate(6) + ")(" + "".join(map(build, args)) + ")"


def Inpc(*args):
    return "(" + generate(7) + ")(" + "".join(map(build, args)) + ")"


def Out(*args):
    return "(" + generate(8) + ")(" + "".join(map(build, args)) + ")"


def Outc(*args):
    return "(" + generate(9) + ")(" + "".join(map(build, args)) + ")"


def Rnd(*args):
    return "(" + generate(10) + ")(" + "".join(map(build, args)) + ")"


def If(*args):
    return "(" + generate(11) + ")(" + "".join(map(build, args)) + ")"


def While(*args):
    return "(" + generate(12) + ")(" + "".join(map(build, args)) + ")"


def Read(*args):
    return "(" + generate(13) + ")(" + "".join(map(build, args)) + ")"


def Write(*args):
    return "(" + generate(14) + ")(" + "".join(map(build, args)) + ")"


def And(*args):
    return "(" + generate(15) + ")(" + "".join(map(build, args)) + ")"


def Or(*args):
    return "(" + generate(16) + ")(" + "".join(map(build, args)) + ")"


def Xor(*args):
    return "(" + generate(17) + ")(" + "".join(map(build, args)) + ")"


def Not(*args):
    return "(" + generate(18) + ")(" + "".join(map(build, args)) + ")"


def Lt(*args):
    return "(" + generate(19) + ")(" + "".join(map(build, args)) + ")"


def Gt(*args):
    return "(" + generate(20) + ")(" + "".join(map(build, args)) + ")"


def Eq(*args):
    return "(" + generate(21) + ")(" + "".join(map(build, args)) + ")"


def Ne(*args):
    return "(" + generate(22) + ")(" + "".join(map(build, args)) + ")"


def Le(*args):
    return "(" + generate(23) + ")(" + "".join(map(build, args)) + ")"


def Ge(*args):
    return "(" + generate(24) + ")(" + "".join(map(build, args)) + ")"

You can use it like this, type in:

from bogen import *
print(Out(Add(Inp(),Inp())))

to get:

(()()()()()()()()()()()()()()()())((()())((()()()()()()()()()()()())()(()()()()()()()()()()()())()))

Or type in:

from bogen import *
print(Outc(52))

to get:

(()()()()()()()()()()()()()()()()()())(()()()()()()(()()()())((()())(()()()()()()()()()()()()()())(()())(()()()()()()()()()()()()()())))

Most of the example programs you see here are actually generated with bogen.

File extensions

Currently, recommended file extensions for this esolang are .(), .bo and .bracketonly.

See also