Dead fish ±∔
Jump to navigation
Jump to search
- The title of this article is not correct because of technical limitations. The correct title is actually ><x±∔>.
><x±∔> (Pronounced "Dead fish plus minus plus dot") is a 2D esolang created by User:None1, it is a cross between a cross between Deadfish and ><>, PlusOrMinus and PlusOrOutput, it has a lot of commands that do the same thing.
Commands
><x±∔> adds more commands from ><> and adds all the commands from PlusOrMinus and PlusOrOutput. It also adds the Deadfish command o which becomes O since o is already used.
Commands
The new commands are marked red.
| Command | Meaning | Derives from |
|---|---|---|
| i | Increments the accumulator | Deadfish |
+ |
Increments the accumulator | PlusOrMinus/PlusOrOutput |
- |
Outputs the accumulator as ASCII, then decrements the accumulator | PlusOrMinus |
. |
Outputs the accumulator as ASCII | PlusOrOutput |
| d | Decrements the accumulator | Deadfish |
| s | Squares the accumulator | Deadfish |
O |
Outputs the accmulator as decimal | Deadfish |
| o | Outputs the accumulator as ASCII | ><> |
| n | Outputs the accmulator as decimal | ><> |
| l | Input a character and store its ASCII code in accumulator | ><> |
| ^ | IP direction up | ><> |
| v | IP direction down | ><> |
| < | IP direction left | ><> |
| > | IP direction right | ><> |
# |
Skip next instruction | ><> |
| ? | If accumulator is zero, skip next instruction | ><> |
| ; | Halts the program | ><> |
| space | NOP | ><> |
0-9 |
Set the accumulator to the corresponding number | ><> |
Examples
XKCD Random Number
4O
Print A
8s+.
Nope. interpreter
Nope.
Interpreter
C++
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<fstream>
std::vector<std::string> code;
int w,h,ipx,ipy,ipdx,ipdy=1;
unsigned char x;
signed main(int argc,char* argv[]){
if(argc==1) return std::cout<<"Needs an input file",0;
std::string s;
std::fstream f(argv[1],std::ios::in);
while(std::getline(f,s)){
h++;
w=std::max(w,(int)s.size());
code.push_back(s);
}
f.close();
for(auto i:code){
while(i.size()<w) i+=" ";
}
while(ipx>=0&&ipx<h&&ipy>=0&&ipy<w){
switch(code[ipx][ipy]){
case '+':
case 'i':{
x++;
break;
}
case '-':
case 'd':{
if(code[ipx][ipy]=='-') std::cout<<char(x&255);
x--;
break;
}
case 's':{
x*=x;
break;
}
case 'O':
case 'n':{
std::cout<<int(x)<<std::endl;
break;
}
case '.':
case 'o':{
std::cout<<char(x&255);
break;
}
case 'l':{
x=std::cin.get();
break;
}
case '^':{
ipdx=-1;
ipdy=0;
break;
}
case 'v':{
ipdx=1;
ipdy=0;
break;
}
case '<':{
ipdx=0;
ipdy=-1;
break;
}
case '>':{
ipdx=0;
ipdy=1;
break;
}
case '#':
case '?':{
if(x&&code[ipx][ipy]=='?') break;
ipx+=ipdx;
ipy+=ipdy;
break;
}
case ';':{
return 0;
}
case ' ':{
break;
}
case '0':x=0;break;
case '1':x=1;break;
case '2':x=2;break;
case '3':x=3;break;
case '4':x=4;break;
case '5':x=5;break;
case '6':x=6;break;
case '7':x=7;break;
case '8':x=8;break;
case '9':x=9;break;
default:{
std::cout<<"Nope.";
return 0;
}
}
ipx+=ipdx;
ipy+=ipdy;
}
return 0;
}