DOT./Implementations

From Esolang
Jump to navigation Jump to search

DOT. was planned to be implemented in lots of different languages, both practical and esoteric, but for now there are 10 of them.

A

Ada

with Ada.Text_IO;         use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

procedure Main is
   Acc  : Integer := 0;
   Code : String (1 .. 100);
   Last : Natural;
begin
   Put (">");
   Get_Line (Code, Last);

   for I in 1 .. Last loop
      declare
         Cmd : Character := Code (I);
      begin
         if Cmd = 'D' then
            Acc := Acc - 1;
         elsif Cmd = 'T' then
            Acc := Acc + 1;
         elsif Cmd = 'O' then
            Put (Acc, Width => 0);
         elsif Cmd = '.' then
            Put (Code (1 .. Last));
         end if;
      end;
   end loop;
end Main;

D

Delphi

program Main;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  acc: Integer;
  code: string;
  i: Integer;
  cmd: Char;

begin
  acc := 0;
  Write('>');
  ReadLn(code);

  for i := 1 to Length(code) do
  begin
    cmd := code[i];
    if cmd = 'D' then
      Dec(acc)
    else if cmd = 'T' then
      Inc(acc)
    else if cmd = 'O' then
      Write(acc)
    else if cmd = '.' then
      Write(code);
  end;

end.

J

Java

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int acc = 0;
        Scanner scanner = new Scanner(System.in);

        System.out.print(">");
        String code = scanner.nextLine();

        for (int i = 0; i < code.length(); i++) {
            char cmd = code.charAt(i);
            if (cmd == 'D') {
                acc -= 1;
            } else if (cmd == 'T') {
                acc += 1;
            } else if (cmd == 'O') {
                System.out.print(acc);
            } else if (cmd == '.') {
                System.out.print(code);
            }
        }
    }
}

JavaScript

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let acc = 0;

rl.question('>', (code) => {
    for (let i = 0; i < code.length; i++) {
        const cmd = code[i];
        if (cmd === "D") {
            acc -= 1;
        } else if (cmd === "T") {
            acc += 1;
        } else if (cmd === "O") {
            process.stdout.write(String(acc));
        } else if (cmd === ".") {
            process.stdout.write(code);
        }
    }
    rl.close();
});

H

Haskell

import System.IO (hFlush, stdout)

main :: IO ()
main = do
    putStr ">"
    hFlush stdout
    code <- getLine
    loop code 0
  where
    loop [] _ = return ()
    loop (c:cs) acc
        | c == 'D'  = loop cs (acc - 1)
        | c == 'T'  = loop cs (acc + 1)
        | c == 'O'  = do
            putStr (show acc)
            loop cs acc
        | c == '.'  = do
            putStr code
            loop cs acc
        | otherwise = loop cs acc

L

Lisp

(defparameter acc 0)

(format t "> ")
(defparameter code (read-line))

(loop for i from 0 below (length code) do
      (let ((cmd (aref code i)))
        (cond
          ((char= cmd #\D)
           (decf acc))
          ((char= cmd #\T)
           (incf acc))
          ((char= cmd #\O)
           (write-char (code-char (+ acc 48))))  ; преобразуем число в символ
          ((char= cmd #\.)
           (format t "~a" code)))))

Lua

acc = 0
io.write("> ")
code = io.read()

for i = 1, #code do
    local cmd = code:sub(i, i)
    if cmd == "D" then
        acc = acc - 1
    elseif cmd == "T" then
        acc = acc + 1
    elseif cmd == "O" then
        io.write(acc)
    elseif cmd == "." then
        io.write(code)
    end
end

P

Pascal

program Main;

uses
  crt;

var
  acc: integer;
  code: string;
  i: integer;
  cmd: char;

begin
  acc := 0;
  write('>');
  readln(code);

  for i := 1 to length(code) do
  begin
    cmd := code[i];
    if cmd = 'D' then
      dec(acc)
    else if cmd = 'T' then
      inc(acc)
    else if cmd = 'O' then
      write(acc)
    else if cmd = '.' then
      write(code);
  end;

end.

PowerShell

$acc = 0
$code = Read-Host ">"

foreach ($cmd in $code.ToCharArray()) {
    if ($cmd -eq 'D') {
        $acc -= 1
    }
    elseif ($cmd -eq 'T') {
        $acc += 1
    }
    elseif ($cmd -eq 'O') {
        Write-Host -NoNewline $acc
    }
    elseif ($cmd -eq '.') {
        Write-Host -NoNewline $code
    }
}

python

acc = 0
code = input(">")

for cmd in code:
    if cmd == "D":
        acc -= 1
    elif cmd == "T":
        acc += 1
    elif cmd == "O":
        print(acc, end='')
    elif cmd == ".":
        print(code, end='')