Trigbf
| Paradigm(s) | procedural, imperative |
|---|---|
| Designed by | User:None1 |
| Appeared in | 2025 |
| Memory system | Cell-based |
| Dimensions | one-dimensional |
| Computational class | Turing complete/FSA |
| Major implementations | Python |
| Dialects | Trigbf0 - Trigbf7 |
| Influenced by | brainfuck |
| File extension(s) | .tbf |
Trigbf is an esolang invented by User:None1, inspired by brainfuck.
Trigbf is also known as Trigbf7, you'll know why in the Dialects section.
Memory
Trigbf uses an unbounded (in both directions) tape which contains signed unbounded infinite-precision real numbers. Initially, every cell is zero.
Commands
Trigbf has these commands:
,.><[]: The same as bf, except., which rounds before printing as ASCII.s: Let current cell value bex.xbecomessin(x rad)after the command.c: Let current cell value bex.xbecomescos(x rad)after the command.t: Let current cell value bex.xbecomestan(x rad)after the command. It is undefined behavior to run this command when current cell is an invalid value for tangent (e.g.: pi/2).
Dialects
Trigbf has 8 dialects: Trigbf0 to Trigbf7. After converting the dialect number (0~7) to a big-endian binary number, the 1st, 2nd and 3rd digits decide whether the s, c and t commands are available: 0 if unavailable, 1 if available. The original Trigbf has all three commands, so it's also known as Trigbf7.
Examples (In Trigbf7)
Cat
c[,.]
or:
,[.,]
Hello, world!
cttctttccttscttsttsttttstttsttcttttstttttcscttsttttscttscttstttscttstttcttsttstttsttttcttsttscttsttttcstttscsttttcttstttcttttttttsctttttsttstttsttccttcttttscttstttscttscttstctttsttscttsccttsttstttscttsttcttscttstttcttssttsttctttstttttccttsttttcttttcctttccttcttsttsctttsttsttsttctttt.>ctttccttsttccttttttstttctcctttcttttcttctttscttsttccttsttttsttsctttcttttttsctttcttttcttctttscttsttscttsttccttsttttsttttcttscttsctttsctttctttttsccttstttttcttttcttstcttssttttcttttsctttsttccttccttssttsttcsctttsttstcttstcttsttscttstttctttscttssttsttsctttctttscttsctttctttttsttctcctttctcctttcttstctsttsttttcttstttcttccttsttcctttcttsctttcttcccttsttsctcctccttcttstttscttcttsctttccttcttsttccttctttcttstttscttcttstttstttstttcttccttstttsttctctctttstttctttcttsttscttccttcttctttcttttttstttccttstccttsttttsttsttttcttstttcttcttttctttsttsttstttcttccttstctttscttctttctttcttcttsctttsttttctttctttststtttscttsttsctsttt.>cttctttctcccttstcctttcttsttsctttcttsttctstttsctttctttcctttcttstttscttctttcttcctttsttsttccstttccttttccttsttsctsttscttcttttcttstttsttttstttsttscttttscttsttttctttctttstttttctttttccttttcttscttcttttsctttstttscttststtsttsttscttscttcttccttstttcttccttttccttscttttsttsttsttsttsctttcttttcccttsttstttsttstttscttsttccttscttcttscttctccttsttccccttstttcttscttscttcttscttcttcttsttsctttcttsctttcttstttsttsttsttsttscttccttttscttctttstttsttccttccttsttcttsttsttstttcctttttcttsttctstccttscttsctttctttsttscttsccttsttttsttsttsttsttcttctttcttsttstcttttscttscttscttttcttsttccttcttstttttscttsttcttsttcctttcttcctttcttctttccttctttsttcccttsttttststttstttsttscttscttsttsctttttsctsttttsctttccttcttccttscttsttccttsttscttsttcttsctttt.>cttctttctcttsttsttscttcttstttstttsttttcttttstttctttcttcscttsttscsttttcttsttcttccttccttsttstttcttsctttstttcctttttsttt.>cccttstttttsttctttttcttttttsttttctttcttstttcttsttttttsttsctttstttststttttttttscttsctttcttscttsttsttstttcttcttscttctcttstttttscttsttcctccttttsctttsttttttsttscttsccttsttttsctttstttttstttcttccttsctstttcttscttsttstttsttstttstttcttscttttttscttstttctttsttsttccttcttctttttttsttctttsttttttcttccttscttttctttctsttstttcctttcttcccttsttsttsttccttctttcttsttcttcctttttcttscttsttstttttcctttcttccttttcctttctttsttsttttcttscccttsttsttccttccttscttscttstttctttcttctstttsttsctttccttttccttstttcttscttccttstttcctttcccttstttcttstttctttcccttsttttsttctttsttttccttcctttctcctttccttscttttcttsttscccttsttsctttsttstttcctttttsctttstcttscttsttsctttscttsttttttccttt.>cttctttccttsscttstttsttcttstttctttcctttsctttttttcttcttcttttsttsttstttcttscttscttccttttstttsttstttscttstttststtsctttctsttstttcttttttccttctt.>ctstttttctctttctttsttscttsttsttstcctcctststststststststststststttttstt.>cttctttccttscttsttsttttstttsttctttttsttccttscsttttctccttscttsttsttcttscttsttstttsttcttttcttsttccttstststtscccttsttttsttscttscttttstttsttstttscccttsttstttcttscttttttcttttsttscttcttstttttcttccttsttttcttctttcccttsttttstttsttttcttsttctttsttscttsttttctttttttscttccttttstttcttttscttctcttsttsttsttsttcttccttscttscttcttttcttcctttsttcttctccsttsttcttcttsttctttcttsttsctttcttcttccttstctttsttcttctsttcctstttscttscttstttcttctcttccttccttsctttsttttsctttsttctttcttttccttscttsttsttstttctttstttcttccttctsttccttsttsttsttcttccttstttctttttttsttstttcccttsttscttttsttcttsttccttsttttstcttsctstttttcttsttttttsccttstttsttstttcttcttccttctttcttcttt.>cttctsttssttsttttsttccttstttcttttscttcctttsttttcttctttstttscttssttsttctccttsctttcccttsttstscccttsttctttsttstttcttccttscttttcttttsttsctttcttcttttsttttctsttsctttcttttcttscttscttttctttcctsttscsttsttccttsttcttsttctctttscttsttsttttcttstttscttsttttcttctttcttscttstttscttsctstttstttctttstttcttttcttscttsttttttttscttctttstttscttsttstttstttcttcctttctttctttcscttsttstcttcttstttscttttttsttctcttscttcttsttsttctttcttcttsttttsttccttccttttsttccttccttccttstttttsttctttctttstttsttcttstttttctccttscttsttsttttstttctttssctttctttsctttcctttstttsctttttctttctttctttscttstttcctttcttcttttsctccttscccttsttttttctttsccttstttstttttttsttttttsttssttstttscttsttccttttttstttcctttcttctttttcttstttsttcctttctstttcttscttcttttttscttsctttsttcctttsttsttsctttsttt.>csttsccttstccttttttstttccttstttscttsttttttttsttcttstttsttssttsttsttttsttccttttstttcttctttctttcttscttctttctttsttscttctttsttcccccttstttcccttsttsttctttttctttccttscttstttctttctttcttcttsttccttscttsttstcttccttcttcttcttscttcctttccttcttttstttsttscttttctttcctttsttttsttccttscttccttccttsctttsttsttscttstcttscttsttsttscttttttcttsttsttccttsttsttssttstttcttttsctttttttcctttcttttttscttcttttttsttttcttccstttcctttsttsttcttscttcttcscttstttsttsttcttsttt.>cttscttsstcctttcttsctttcttstttcttsttsttscttttsttctttsttttstcttccttccttsttttsttsctttctttctttctttctctttcttttcttstttcttsttttsttsttttscttststttscttcttttttsttttttcttsttsttcscsttttsttstttsttccttsttttcctttcttscttccttscttscttscttccttsttttscttttsctttccttccttcttttcttscttctttctttsttcttscttccttscttccctccttsscttttsctttscttsttttttsttttctttsttcttscctttcctttttsccttstttscttccttcttttttctcttscttscttsctttcttcctttttsctttcttccttccttsttsttttttstttstttscctttttccttt.>cttctttccttscttsttstttccttttccttsttttcttcctttsttsttstttcttsttcctttsttttstttsttccttscttstttcsttsttsttttttttsscttsttcttccttcttscttsctttcttstccttccttttscttsttctttsttstttttsctttstttttttcttscttttcccttsttscttscttcttcctttcttstttccttccttccsctstttsttsttttcttcttcccttsttsttccttccttccttstttstttcttsttcctttcttttsctttcctttcctttscttctttsttttctttcttssctttcttscsttttctttcctttctsttsttstttscttcttctcttccttscttstttsttstttsttttcttccttctttscttttstttstttttcttcctttttcttscttstttscttsttt.>ctstststststststssttsttsctttcccttstttstctttstststststssttsttsctttctsttcttcttccttstttstttsttccttttstcttsctttttscttscttsttsttttcttcttsttsctttsctttcttccttstttsttttsstcctttcttttcctttcccttstttstttttsttscttcctttttccttsttscttttscttsttttctttcttsctstststststststststttttsttcttcttscttscttsttttsctttcttsttsttctcttsctttctttstttcttsccttsttscttscttscttttttsttttctcctststststststststststststststcctstststststststststststststststststststcctststststststststststststcctsttscttsttsttsttstttctttcttctttccttccttstttstttttsctttssttsttcsttstttttctttttttsttttttscttttttsctcctttcttctttttsccttststststststststststststststststttttsttcttcttscttscttstttttctttcttcttcctttttctttcttccttsttstcttcctttstttcttstststststststststststststtttttscttttstttsctcctttctsttscttsttttstcttstststststsccttstttttcctt.
Wonder how this HUGE program was generated? In fact, I (None1) wrote a weird greedy+randomization algorithm to generate constants:
from math import *
from random import *
def gen(x,lim): # x is the value to generate, lim is the maximum code length x是要生成的数,lim是最大代码长度
r=''
k=0.0
for i in range(lim):
dst=[abs(sin(k)-x),abs(cos(k)-x),abs(tan(k)-x),abs(tan(k)-x),abs(tan(k)-x)] # Add more tan's to let the code choose tan more when ramdomizing 增加更多tan使代码随机化时更多地选择tan
z=min(dst) # Choose the best solution first 先选择最优解
if randint(1,10)==1:
z=choice(dst) # 1/10 probability to give up best solution and pick a random solution 1/10的概率放弃最优解并选择随机解
if z==dst[0]:
r+='s'
k=sin(k)
elif z==dst[1]:
r+='c'
k=cos(k)
else:
r+='t'
k=tan(k)
if z<=0.5:
print('Found') # 找到了
return r
print('Failed') # 没找到
return r
r=''
for i in b'Hello, world!':
print(f'Generating character: {i}')
res=gen(i,1001)
while len(res)==1001: # run gen() unless it succeeds 只要失败就一直跑,直到成功
res=gen(i,1001)
r+='>'+res+'.'
print(r)
Nope.
scttcctttsctttcttsttsttcctttttsttsctccttsttstttstttscttcttsttctttttsttsttcttttccttsttsttccccttstttcttccttctttsttscttscttcttsttsttcctttscttsctttscttsttsttstttsttcttsttctttcttcccttsttscttscttcttstttcctttttcttctttttsttsttsctttscttttsttccttscttsctttttctttsttcttsctttsttcttsttsctttcttcttttcttcttsttcttttstttttscttccttscttctttcttcctcttsttcttctccttscttctccttstttstttsttttcttcttctttcttsttscttsttsttsttcctttcttstttsccctttstttstttcttcttsctttsctttcttsttsttcttstttctttccttstttcttscttttttstttttcttsttsttstttstttsttsttttscttctttcctttctsttsttcttctttscstttttcttcttsttsttscttttttsttsttcttttsttsttscttsttcttstttsctttctttsttttttscccttsttt.>cttctttcctttcttsttcctttscttttctttctttttstttcttttttctttccttttsttsttttstttcttsttststtscttttttttsttttctttttstttsctcctttscctttccttstttsttscttstcttsttccttctttcttsttstttttsttcttsttstttttttsttstttsttttcccttsttsttcttttcttttcttsttttttcctstccttscttctttcttscsttsttsctttccttstttsccttsttstcttttstttcttsctttttcctctcttttcttttsttstttttcttsttstttsttctttsttsttttctttctttcttscttttcttsttctttttscttsctttcttttcttstttccttctttccttsttttttsctttcttscttsttctttcttstttcttcttscttccttsttcttstttcttsttccttcttstttcscttstttttsttsttsctttsttstttttscttttscttccttscttststtttsttttcttsttstttscttsctttttttttcststtscttsttsttststtccttctttcttcttsttcttttscttstttstttctttsctttscttsttsctttscttscttsttctsttstttsttstttsttscttttctttstttsttststttcctsttcccttststttstttscttccttscttsttscttsttccttttcttsttscttcttcstttstttstctctttcttttsttcttccttsttsctttcttstttstttcttttsttt.>cttctttccttsscttstttsttcttsttttttscttsttsttsttscttcttsttscttsttsttscttsctttstttscttstttsttccttscttctccttcttscttcttctttcctttctttcttstcctttcttttttttsttstttccttsttsttscttcscttstttcttcctttsttscttttscttscttsctttcttsttttttcttccccttsttt.>cttctttccttscttsttstttccttttccttsccttsttctcttccttcttctctttstttcttsctccttscttsttsttttttsttttctttctttsttsttscttttscttccttsctsttctttsttctctttsttccttsctttttctttcttcttsttsctttsttscttctttscttsttsttctttsttcttttcscttctccttsttccttstttsttsttttctsttctttsttttcttsttcttcttcttttctttstttccsttttsctttcttsscttsttctttcttttttsctttsttsttsttcctttcttscttttsttttscttttttscttsttsttctttcttsttstttscttccttctttstttscttcttstccttccttccttcttccttcctttcttscttctcttttscttscttttsttscttstttstcttstttcttcstttscttsttsttttcttscttstttcttcctttcttsttsttscttctttscttstttctcctttsctcctttstttstttttctsttttttcttctttcctttsttsttsctttttttscttccttsttttcttsttscttcttcttscttstttccttcttttttsctttstttctttcttcttsctttctttcttttstttttctttcttstttcttttccttsttsttcsttsttsctttcttstttttttstcttccttsttcttctttscttctstttsttstttttttcttcttttsttsttttsttttttcttcttsttttsttttsttstttcttscttstcttsttttttctttcttsttscttsttsctttctstttsttsttstttcttttttscttscttstttsttcttscttsctttttsttttcttcttstttccttsttttt.>cttctttcscttsctttscttstttctttcttsctcttsccttsttsttsttstttscttsttscttscttstttctcttscttttcttccttttcttsttscttttsttctttctttcttscttsttstttsttstttcttcttttttscttcctttcctccttctttsttsttcttsscttscttstttcttscttctttscttsttsctttcttccttsttsttttsttccttccttsttscttsttttsttsctt.
XKCD Random Number
cttctttccttsccctccttstttscttstttctttsttstcctttcttstttstttsttttttcttsttcctttcttctccttstttcttccttscttstttscttstttttttctttttscttscttsttscttttscttscttsttcttstttctttccttttcttctttsscttctcttsttcttcttcctttctttttcttsttcstttctttccttscttstttttscttscttstttstttscttsttscttstttttstttctttcccttsttscttctttcttscttstttctttcttsctttscttstttstttttsttstttstctttcttstttctttscttttcttstttttsctttcttccttcttsttscttsttcttttstttcctsttsctttcttsttttsctttsttscttsttcttcctttscttsttcctt.
Computational class
Dialects without the c command are FSAs because they can't do anything to the tape, making the tape useless.
Dialects with the c command are Turing-complete because brainfuck is Turing-complete even if only changing 0s into 1s is allowed.
Interpreter (Trigbf7 dialect)
In Python:
import sys
from math import *
def tbf(code):
s=[]
matches={}
tape=[0.0]*2000000
for i,j in enumerate(code):
if j=='[':
s.append(i)
if j==']':
m=s.pop()
matches[m]=i
matches[i]=m
cp=0
p=1000000
while cp<len(code):
if code[cp]=='s':
tape[p]=sin(tape[p])
if code[cp]=='c':
tape[p]=cos(tape[p])
if code[cp]=='t':
tape[p]=tan(tape[p])
if code[cp]==',':
c=sys.stdin.read(1)
tape[p]=(ord(c) if c else 0)%256
if code[cp]=='.':
print(chr(int(round(tape[p],0))),end='')
if code[cp]=='<':
p-=1
if code[cp]=='>':
p+=1
if code[cp]=='[':
if not tape[p]:
cp=matches[cp]
if code[cp]==']':
if tape[p]:
cp=matches[cp]
cp+=1
tbf(sys.stdin.read())