ABC

From Esolang
Jump to navigation Jump to search
Not to be confused with tom7's ABC (compiler), AlPhAbEt, nor Abc.

ABC is an esoteric programming language created by User:Orange. The language is very simple and easy to implement. This language has nothing to do with the real programming language ABC.

Instructions

a - Increment the accumulator
b - Decrement the accumulator
c - Output the accumulator

d - Invert accumulator
r - Set accumulator to a random number between 0 and accumulator
n - Set accumulator to 0

$ - Toggle ASCII output mode.  When on, the c instruction prints the accumulator as an ASCII character.
l - Loop back to the beginning of the program.  Accumulator and ASCII mode does not reset.
; - Debug.  Prints out accumulator as a number and ascii character.

Unknown instructions are treated as NOPs.

Examples

Print out 1337

acaaccaaaac

Simulate a dice throw

aaaaarac

Random phone number generator

ac

naaaaaaaaradc
naaaaaaaaarc
naaaaaaaaarc

naaaaaaaaradc
naaaaaaaaarc
naaaaaaaaarc

naaaaaaaaradc
naaaaaaaaarc
naaaaaaaaarc
naaaaaaaaarc

Hello World

$aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaa
aaaaaaaaaaaaaaaaaaaaaaacaaaaaaaccaaacnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aacbbbbbbbbbbbbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaa
aaaaaaaaaaaaaaaacaaacbbbbbbcbbbbbbbbcnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac

Count infinitely

acl

Beep infinitely using ASCII code 7 (bell)

aaaaaaa$cn$l

Resources

Interpreters

Java

public class ABC{
  public static void interpreter(String code){
    int acc=0;
    boolean stringMode=false;
    for(int i=0;i<code.length();i++){
      switch(code.charAt(i)){
        case'a':++acc;break;
        case'b':--acc;break;
        case'c':if(stringMode)System.out.print((char)acc);
                else System.out.print(acc);
                break;
        case'd':acc*=-1;break;
        case'r':acc=(int)Math.floor(Math.random()*(acc+1));break;
        case'n':acc=0;break;
        case'$':stringMode=(stringMode==false)?true:false;break;
        case'l':i=-1;break;
        case';':System.out.print(acc+" "+(char)acc);
      }
    }
  }
}

Python

import sys
import random

prog = """
aaaaarac
"""

acc = 0
pc = 0
ascii_mode = False
while True:
  if prog[pc] == 'a':
    acc += 1
  elif prog[pc] == 'b':
    acc -= 1
  elif prog[pc] == 'c':
    if ascii_mode:
      sys.stdout.write(chr(acc))
    else:
      sys.stdout.write(str(acc) + ' ')
  elif prog[pc] == 'd':
    acc *= -1
  elif prog[pc] == 'r':
    acc = random.randrange(0, acc)
  elif prog[pc] == 'n':
    acc = 0
  elif prog[pc] == '$':
    ascii_mode = not ascii_mode
  elif prog[pc] == 'l':
    pc = 0
  elif prog[pc] == ';':
    print(acc, chr(acc))
  pc += 1
  if pc == len(prog):
    sys.stdout.write('\n')
    break

External Interpreters

Discussions