Split

From Esolang
Jump to navigation Jump to search
Split
Designed by Rignchen
Appeared in 2024
Dimensions One-dimensional languages
Computational class Turing complete
Reference implementation Split
File extension(s) .split, .fu, ., .coddingsucks

The Language:

Conversion:

The language starts by reading the file and convert the unreadable content in readable content
to do this, the interpreter will take the value of each characters except the 1st and last ones as 2 digits numbers
once the interpreter has the value of every characters, it will read them 2 by 2 and convert them in a character
because the 1st and last characters are not converted, the code get after the conversion won't be the same as the original code

The values of the characters are given by this custom table:

X0 X1 X2 X3 X4 X5 X6 X7 X8 X9
0X ' , C J & G ÷ " 6
1X 4 i A p K y T P } ;
2X q # d F 1 s M v V Z
3X @ 2 - w ! . I < B ~
4X 7 e 3 Q | x t f ç 0
5X L a g = 5 r _ l :
6X m D S \ U + ] N ) ^
7X n R $ X % b ? [ h 9
8X O µ o / ' Y 8 * W j
9X H c > ( k z { ` E u


An example of this conversion is the following:

1  #  R  b  6  8
1 21 71 75 09 8
12 17 17 50 98
A  P  P  L  E
1#Rb68 -> APPLE



Splitting Instructions:

Once the code is converted, the interpreter will split the code in instructions
To differenciate instructions, you have to add a : directly after 1/3 of each instructions
Let's suppose that your instruction is "APPLE", then you have to write "AP:PLE"

This would look like this:

1  #  b  c  b  6  8
1 21 75 91 75 09 8
12 17 59 17 50 98
A  P  :  P  L  E
1#bcb68 -> AP:PLE -> APPLE



Multiple Instructions:

If you had 2 instructions "APPLE" and "BANANA", you would have to write "AP:PLEBA:NANA"
This would look like this

1  #  b  c  b  6  /  µ  s  {  R  M  R  2
1 21 75 91 75 09 83 81 25 96 71 26 71 2
12 17 59 17 50 98 38 12 59 67 12 67 12
A  P  :  P  L  E  B  A  :  N  A  N  A
1#bcb6/µs{RMR2 -> AP:PLEBA:NANA -> APPLE BANANA



Empty Characters:

The character 00 beeing empty can be used to help get the right number of characters in each instruction
in the following example, the "BA:NANA" instruction has 7 characters so you have to add 2 00 to it to get 9 characters,
otherwise the interpreter won't know what to do with the A at the end as the instructions wouldn't be filled

AP:PLE|BA:NAN|A
--:---|--:---|?

The same thing happends when the instruction is to short instead of too long

AP:PLE|BAN:ANA??
--:---|---:-----

The ? are here to show the missing characters

Let's addd them between the 2 first characters and the 2 last characters, note that this is an arbitrary choice, they could be added anywhere as long as the : is at the right place

1  #  b  c  b  6  /  O  '  s  {  R  M  n  '  2
1 21 75 91 75 09 83 80 01 25 96 71 26 70 01 2
12 17 59 17 50 98 38 00 12 59 67 12 67 00 12
A  P  :  P  L  E  B  �  A  :  N  A  N  �  A
1#bcb6/O's{RMn'2 -> AP:PLEB�A:NAN�A -> APPLE BANANA

The � character is used to show the empty character as it is normaly not printable

The instructions are executed in reversed order, in this case the first instruction to be executed is "BANANA" and the last one is "APPLE"


Line Break And Tabulations:

All line break and tabulations are removed before the code is converted,
wich means that you can write your code in multiple lines and add as many tabulations as you want without changing the code
for example, this code is exactly the same as the previous one

1#bc
b6/
	O's{	RMn'2



Memory:

This language has 4 variables

  • Str: used to store a chain of numbers
  • Int: used to store a chain of characters
  • Help: the only variable that can be used as a value in most of the commands
  • And: an index and a length used to select a part of the variable Str or the variable Int

Commands:

Instructions are composed of a command and the values given (or not) to the command
Commands are case insensitive

Here's the list of commands:

Command Description Note Example
Help set the value and type of Help to the value and type you want STR values are given in base 7 Help 14 Str (put 11 in Help)
Put Adds a value at the end of Int or Str Put Str (put the value of Help in Str)
Ilen Sets the Index of And to the value you want Ilen 5 (put 5 as index of And)
Ipset Sets the length of And to the value you want Ipset 8 (put 8 as length of And)
Split Store the part of int/str given by And in Help Split Int (overide Help with the characters of Int selected by And)
Display Display content of Help STR: content is display as base 11 Display
In Set the value and type of Help from the user's input STR: content is input as base 10 In Str (put the user's input in Help)
Add Split the content of Help and make the sum of the 2 parts INT, convert the content to ascii and back Add
Reduce Split the content of Help and make the substraction of the 2 parts INT, convert the content to ascii and back Reduce
Multiply Split the content of Help and make the multiplication of the 2 parts INT, convert the content to ascii and back Multiply
Mod Split the content of Help and make the modulo of the 2 parts INT, convert the content to ascii and back Mod
Reverse STR: multiply by -1 INT: upper case to lower case and lower case to upper case Reverse
If Check if Help is < 0 INT: use the sum of the ascii value of the characters If Display (Print Help if Help < 0)
Move Move the currently executed instruction to the value in Help STR: use the number written next to the instruction
STR: follow every Move it finds on the way if it goes in the same direction
Move 1 (move to the first instruction)
Run Execute the code from the Help variables Run


Code Examples:

Hello World:

6iA€c.O&i
:JyµB0JyzYWVçWs+oVQNJ6

Converted version of the code:

Display
Help Hello World Int


Cat Program:

6iA€c.O&i
=m÷&EQm÷J6

Converted version of the code:

Display
In Int