LottoScript

From Esolang
Jump to navigation Jump to search

Commands

LottoScript is an esolang with five randomized commands:

Commands
Command Name Function
Add [ADD] Add 1, or 10 (see later at EXR) to the cell
Subtract [SUB] Remove 1, or 10 (ditto) from the cell
Append [APP] Append the cell (as chr value) to the current string and reset the cell
Extra [EXR] Increase the affect of ADD and SUB (comes after)
Output [OUT] Output the current string and reset it

Available characters for the commands:

1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:\"ZXCVBNM<>?

There's also an option for a space, a tab, or a newline.

This means if you try to make a program with random operators, there is a ~0.000000011645049% chance it will work. Probably a higher chance if you use less commands, but that's the number if you use all 5.

Example

Example program:

+<+<+<+<+<+<+<++>+<+<+<+<+<+<+<+<+<+<+++++>+<+<+<+++>+<+<+<++>
+<+<+<+<+<+<+<+++>+<+<+<++>+<+<+<+<+<+<+<+<+<+<+<+<->+<+<+<+<+<+<+<+<+<+<+<+>+<+<+<+<+<+<+<+<+<+<+<>+<+<+<+++>!

Output:

Hi! I won!

This uses:

Example Commands
Command Symbol
[ADD] +
[SUB] -
[APP] >
[EXR] <
[OUT] !

Interpreter

import random
import contextlib

chars="`1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:\"ZXCVBNM<>? \t\n"

addCMD = chars[random.randint(0, len(chars)-1)]
subCMD = chars[random.randint(0, len(chars)-1)]
appCMD = chars[random.randint(0, len(chars)-1)]
exrCMD = chars[random.randint(0, len(chars)-1)]
outCMD = chars[random.randint(0, len(chars)-1)]

with open("main.lotto") as raw:
  con = raw.read()

with contextlib.suppress(Exception):
  curstring = ""
  curcell = 0
  lines = con.split("\n")
  for line in lines:
    for chariter in range(len(line)):
      curchar = line[chariter]
      if curchar == appCMD:
        curstring += chr(curcell)
        curcell = 0
      elif curchar == outCMD:
        print(curstring)
        curstring = ""
     
      with contextlib.suppress(Exception):
        nextchar = line[chariter+1]
        editor = 1
        if nextchar == exrCMD:
          editor = 10
        if curchar == "+":
          curcell += editor
        elif curchar == "-":
          curcell -= editor

If you want to change the commands and not make it impossible to use, just change the CMD variables (addCMD, subCMD, etc.)