Tare
Tare or 'tis a random esolang is an esolang invented by User:None1. Its specification changes every second because it is generated from the UNIX timestamp.
It uses a pseudo random generator to generate from a seed, by default it is the UNIX timestamp, but you can pass the seed as a command line argument to generate the seed.
Example languages
Language generated by seed 1
Name of esolang: Vdb
Vdb is an esolang, it has a deque and a tape.
It has 4 commands.
- Z - Add deque back by 54.
- 6 - If pointer is 71, multiply pointer by deque back.
- c - If pointer isn't 56, input current cellas ASCII.
- Y - If pointer is 23, floor divide deque back by 82.
Language generated by seed 1708330440
Name of esolang: Bcfjajvcz
Bcfjajvcz is an esolang, it has a queue, a stack and a tape.
It has 7 commands.
- ( - Push pointer into current cell.
- O - If queue front is 72, add stack top by 11.
- r - Push current cell into current cell.
- 4 - Decrement current cell.
- b - If queue front is 33, print 23 as decimal.
- : - Pop queue front and discard it.
- i - If queue front is 21, pop current cell and discard it.
Language generated by seed 1708330325
Name of esolang: Ghrseg
Ghrseg is an esolang, it has a stack and a tape.
It has 10 commands.
- > - If current cell isn't 59, push 80 into stack top.
- Y - If stack top isn't 58, subtract stack top by 7.
- D - If stack top is 83, print "dgff YarH".
- T - Increment stack top.
- G - Decrement current cell.
- y - Multiply stack top by 43.
- F - Push current cell into stack top.
- p - Multiply stack top by pointer.
- , - Decrement pointer.
- c - Print "rG".
Language generated by seed 123456
Name of esolang: Eqntzu
Eqntzu is an esolang, it has a deque, a stack and a tape.
It has 3 commands.
- 0 - If deque front isn't 40, increment current cell.
- % - If pointer isn't 93, print 64 as decimal.
- ' - Multiply current cell by pointer.
You can see that, most esolangs generated by seeds are pretty stupid.
Generator
The badly coded generator is written in C++:
#include<bits/stdc++.h> using namespace std; long long _seed; int rnd(){ _seed=(_seed*65537+1000000007)%2147483647; return _seed; } int randint(int l,int r){ return rnd()%(r-l+1)+l; } string datastr[]={"tape","stack","queue","deque"}; set<string> chosen_datastr; vector<char> chs; vector<int> ops; vector<string> pos; char s[100]; string getpos(bool writable){ int r=randint(1,100); int k=randint(0,1); if(k&&!writable){ sprintf(s,"%d",r); return string(s); } return pos[randint(0,pos.size()-1)]; } int main(int argc,char *argv[]){ if(argc>1){ for(int i=0;argv[1][i];i++){ _seed=(_seed*10+argv[1][i]-48)%2147483647; } }else{ _seed=time(0); } cout<<"Seed: "<<_seed<<'\n'; string name; int len=randint(3,10); name+=char(randint(65,90)); for(int i=1;i<len;i++){ name+=char(randint(97,122)); } cout<<"Name of esolang: "<<name<<'\n'; cout<<name<<" is an esolang, it has "; for(int i=0;i<=8;i++) ops.push_back(i); for(int i=0;i<4;i++){ if(randint(0,1)||(chosen_datastr.empty()&&i==3)){ chosen_datastr.insert(datastr[i]); if(i==0){ pos.push_back("current cell"); pos.push_back("pointer"); } if(i==1){ pos.push_back("stack top"); ops.push_back(9); ops.push_back(10); } if(i==2){ pos.push_back("queue front"); ops.push_back(9); ops.push_back(10); } if(i==3){ pos.push_back("deque front"); pos.push_back("deque back"); ops.push_back(9); ops.push_back(10); } } } int cnt=0; for(auto i:chosen_datastr){ ++cnt; if(cnt==chosen_datastr.size()&&chosen_datastr.size()!=1) cout<<" and "; else if(cnt!=1) cout<<", "; cout<<"a "+i; } cout<<".\n"; int num_commands=randint(2,20); cout<<"It has "<<num_commands<<" commands.\n"; for(int i='!';i<='~';i++) chs.push_back(i); for(int i=1;i<=num_commands;i++){ cout<<"* "; int num=randint(0,chs.size()-1); cout<<chs[num]<<" - "; chs.erase(chs.begin()+num); bool hasif=0; if(randint(0,1)){ hasif=1; string pos=getpos(1); bool is=randint(0,1); int val=randint(1,100); cout<<"If "+pos+" "<<(is?"is":"isn\'t")<<" "<<val<<", "; } int op=ops[randint(0,ops.size()-1)]; switch(op){ case 1:{ cout<<(hasif?"increment":"Increment"); cout<<' '; cout<<getpos(1); cout<<'.'; break; } case 2:{ cout<<(hasif?"decrement":"Decrement"); cout<<' '; cout<<getpos(1); cout<<'.'; break; } case 3:{ cout<<(hasif?"add":"Add"); cout<<' '; cout<<getpos(1); cout<<" by "; cout<<getpos(0); cout<<'.'; break; } case 4:{ cout<<(hasif?"subtract":"Subtract"); cout<<' '; cout<<getpos(1); cout<<" by "; cout<<getpos(0); cout<<'.'; break; } case 5:{ cout<<(hasif?"multiply":"Multiply"); cout<<' '; cout<<getpos(1); cout<<" by "; cout<<getpos(0); cout<<'.'; break; } case 6:{ cout<<(hasif?"floor divide":"Floor divide"); cout<<' '; cout<<getpos(1); cout<<" by "; cout<<getpos(0); cout<<'.'; break; } case 7:{ cout<<(hasif?"print":"Print"); cout<<' '; cout<<getpos(0); cout<<(randint(0,1)?" as decimal":" as ASCII"); cout<<'.'; break; } case 8:{ cout<<(hasif?"input":"Input"); cout<<' '; cout<<getpos(1); cout<<(randint(0,1)?" as decimal":" as ASCII"); cout<<'.'; break; } case 9:{ cout<<(hasif?"push":"Push"); cout<<' '; cout<<getpos(0); cout<<" into "; cout<<getpos(1); cout<<'.'; break; } case 10:{ cout<<(hasif?"pop":"Pop"); cout<<' '; cout<<getpos(1); if(randint(0,1)){ cout<<" and discard it"; }else{ cout<<" and store it into "; cout<<getpos(1); } cout<<'.'; break; } default:{ cout<<(hasif?"print":"Print"); int l=randint(1,20); cout<<" "; cout<<'\"'; string t="1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm,.!? "; for(int i=1;i<=l;i++) cout<<t[randint(0,t.size()-1)]; cout<<'\"'; if(randint(0,1)) cout<<" and a line feed"; cout<<'.'; break; } } cout<<"\n"; } return 0; }
Computational class
It can be easily seen from the interpreter that, any esolang generated has absolutely no control flow, thus, Tare is total.