Trigbf

From Esolang
Jump to navigation Jump to search
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 be x. x becomes sin(x rad) after the command.
  • c: Let current cell value be x. x becomes cos(x rad) after the command.
  • t: Let current cell value be x. x becomes tan(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())