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
.x
becomessin(x rad)
after the command.c
: Let current cell value bex
.x
becomescos(x rad)
after the command.t
: Let current cell value bex
.x
becomestan(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())