Skip to content
The combinination of ascii art, electrical engineering, and programming.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
docker
docs fix typo Apr 10, 2019
dots loading the world was adding a whitespace at the end of each line, th… Aug 21, 2018
samples Added code-golfed evilness tester Aug 14, 2018
test
workspace add workspace folder Oct 21, 2017
.gitignore revamp demo Feb 9, 2019
.travis.yml
Dockerfile merge francois2metz's Dockerfile Nov 7, 2017
License.md Create License.md Feb 9, 2017
MANIFEST.in
README.rst
__main__.py
default.nix
distribute.sh
dots_debug.gif
readme.md
requirements.txt fix click module case in requirements.txt Oct 21, 2017
setup.py bump version number Aug 22, 2018

readme.md

AsciiDots - Esoteric Language

The esolang inspired by ascii art

                   _ _ _____        _       
    /\            (_|_)  __ \      | |      
   /  \   ___  ___ _ _| |  | | ___ | |_ ___
  / /\ \ / __|/ __| | | |  | |/ _ \| __/ __|
 / ____ \\__ \ (__| | | |__| | (_) | |_\__ \
/_/    \_\___/\___|_|_|_____/ \___/ \__|___/

codebeat badge Join the chat at https://gitter.im/asciidots/Lobby

Featured on Hacker News, Motherboard (slashdot comments), and i-programmer.

AsciiDots is an esoteric programming language based on ascii art. In this language, dots, represented by periods (.), travel down ascii art paths and undergo operations.

AsciiDots being run in debug mode

Table of Contents

Samples

Hello world:

 .-$"Hello, World!"

Quine:

 ($'.-#40-$_a#-#36-$_a#-#39-$_a#)

Counter:

     /1#-.
     |
   /-+-$#\
   | |   |
  [+]<1#-*
   |     |
   \--<--/
      |
      0
      #
      |
      .

Semi-compact factorial calculator:

 /---------*--~-$#-&
 | /--;---\| [!]-\
 | *------++--*#1/
 | | /1#\ ||
[*]*{-}-*~<+*?#-.
 *-------+-</
 \-#0----/

Code-golfed counter (15 bytes) by @ddorn:

/.*$#-\
\{+}1#/

Installing

Note: asciidots is available online via Try it Online (tio.run)

Using pip (python 3) (recommended):

pip install asciidots

Using Docker Hub (recommended):

Run sample program from this repo:

docker run -ti --rm aaronduino/asciidots samples/hello_world.dots

Run local file test.dots:

docker run -ti --rm -v $PWD:/data aaronduino/asciidots /data/test.dots

Using Local Dockerfile:

Build the image:

docker build -t asciidots ./docker

Run sample program from this repo:

docker run -ti --rm asciidots samples/hello_world.dots

Run local file test.dots:

docker run -ti --rm -v $PWD:/data asciidots /data/test.dots

From source:

git clone https://github.com/aaronduino/asciidots
pip3 install -r requirements.txt

Run it from source using:

python3 __main__.py [arguments]

or alias it to asciidots using:

# on Ubuntu, replace `.bash_profile` with `.bashrc`
echo "alias asciidots='python3 $(pwd)/__main__.py'" >> ~/.bash_profile
source ~/.bash_profile

Using the Interpreter

The interpreter for this language is the __main__.py file. It requires Python 3, and can be run from the terminal using the python3 command. The first argument is the dots file that you wish the interpreter to run.

Here's an example of running the counter sample program (the working directory is the dots repo folder):

$ asciidots ./samples/counter.dots

Here is the list of available flags:

-t [ticks]        Run the program for a specified number of ticks (Default to 0: no limit)

-o [output-limit] Run the program for a specified number of outputs (Default to 0: no limit)

-s                Run without printing ANYTHING to the console. Useful for benchmarking

-d                Run the program in debug mode. It shows the program and highlights the dots with red. Press enter to step the program once.

Some extra flags when debugging:
-a [delay]        Step the program automatically, using the specified delay in seconds. Decimal numbers are permitted, and so is 0.

-w                Run the program without using ncurses. This can fix problems related to Windows.

-l [line-count]   When not in compatibility mode, reserve the specified number of the lines for displaying the program

This is how one might debug the program found at samples/counter.dots for 300 ticks, while running it automatically with a delay of 0.05 seconds per tick:

$ asciidots samples/counter.dots -t 300 -d -a 0.05

Program Syntax

The documentation has been moved to its own page

More Examples

Hello, World!

.-$"Hello, World!"


Test if two input values are equal:

       /-$"Equal"
       |
.-#?-*-~-$"Not equal"
     | |
     \[=]
       |
       ?
       #
       |
       .


Counter:
     /1#-.
     |
   /-+-$#\
   | |   |
  [+]<1#-*
   |     |
   \--<--/
      |
      0
      #
      |
      .


Fibonacci Sequence Calculator:
/--#$--\
|      |
>-*>{+}/
| \+-/
1  |
#  1
|  #
|  |
.  .


Find prime numbers:

%$T

        .
        |
        #
        3
        |
        @
        1
        |
/--*--*-<--\
|  |  |   /+----\
|  #  |   v+-0@-~-\
|  2  | /->~*{%}/ |
|  |  | 1  |\-+---/
|  |  | @  ^\ |
\-{+}-+-*  01 |
      | |  ## |
      | v--*+-/
      | |  ||
    /-* |  *+--\
    | T |  ||  |
    # $ # /~/  |
    0 # 1 */   |
    | | | |    |
    \->-+-~----<-#$-2#-.
        \-/


 /--------\
 T        |
 *--------~
 |        |
 \-*----@[=]
   |      |
   \--#1--/


And a game!

/-""$-.
|
\--$"Pick a number between 1 and 255 (inclusive)"\
/------------------------------------------------/
\--$"I will correctly guess that number after no more than 8 tries"\
/---------------------------------------------------------------""$/
\--$"After each of my guesses, respond with: "\
/---------------------------------------------/
\--$"     '2' if I guess too high,"\
/----------------------------------/
\--$"     '1' if I guess too low,"\
/---------------------------------/
\--$"  or '0' if I guess correctly"\
/----------------------------------/
|
|                             /->-\
|         /--------------\ /-[-]| |
#         |           /#1\-~--+[+]|
6         |          /*-{-}*  | | |
4  /2#\   |     /----~-----+--+-+-+-#7-$a_#-$"I won! Good game!"-&
|/{/}-*---*     *----/     |/-~-/ |
||    |/--+-----+------\   \+-/   |
\>----~#  #     \-?#-*-+----/     |
      |1  1  /$""-$#-/ |          |
      \/  |  ~---------*----------<-821#-.
          \--/

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

You can’t perform that action at this time.