Cutw
Jump to navigation
Jump to search
Cutw is an esoteric programming language that is made out of cute characters.
Commands
j - Move pointer right. i - Move pointer left. w - Puts input at cell at pointer. t - Outputs cell at pointer as ASCII. u - Branflake's [. c - Branflake's ]. n - Increments cell at pointer. m - Decrements cell at pointer.
Examples
Cat
wt
hi
nnnnnnnnujnnnnnnnnnnnnnimcjtnt
JavaScript interpreter
function cutw(program,input){
var stack=[];
var matches={};
var ip=0;
var tape=[];
var p=0;
var output='';
for(let i=0;i<1000000;i++){
tape.push(0);
}
for(var i=0;i<program.length;i++){
if(program[i]=='u'){
stack.push(i);
}
if(program[i]=='c'){
if(stack.length==0){
throw new Error('c does not match u');
}
var mt=stack.pop();
matches[mt]=i;
matches[i]=mt;
}
}
if(stack.length!=0){
throw new Error('u does not match c');
}
while(ip<program.length){
if(program[ip]=='n'){
tape[p]=tape[p]+1;
if(tape[p]==256) tape[p]=0;
ip=ip+1;
}
if(program[ip]=='m'){
tape[p]=tape[p]-1;
if(tape[p]==-1) tape[p]=255;
ip=ip+1;
}
if(program[ip]=='j'){
p=p+1;
if(p>=1000000){
throw new Error('Pointer overflow');
}
ip=ip+1;
}
if(program[ip]=='i'){
p=p-1;
if(p<0){
throw new Error('Pointer underflow');
}
ip=ip+1;
}
if(program[ip]=='w'){
if(input==''){
tape[p]=0;
}else{
tape[p]=input.charCodeAt(0)%256;
input=input.slice(1);
}
ip=ip+1;
}
if(program[ip]=='t'){
output+=String.fromCharCode(tape[p]);
ip=ip+1;
}
if(program[ip]=='u'){
if(tape[p]==0){
ip=matches[ip];
}else{
ip=ip+1;
}
}
if(program[ip]=='c'){
if(tape[p]!=0){
ip=matches[ip];
}else{
ip=ip+1;
}
}
if(!('nmwtucij'.includes(program[ip]))){
ip=ip+1;
}
}
return output;
}