This was a bad idea since almost all stack-basedesoteric languages look unreadable (look at Jelly).
But here goes:
This was a bad idea since almost all stack-based languages look unreadable (look at Jelly).
But here goes:
This was a bad idea since almost all esoteric languages look unreadable (look at Jelly).
But here goes:
Pylongolf2 beta5beta6
) Print the stack.
Ü Toggle the method Pylongolf2 uses for pushing to stack.
a The useless command, removes and adds the selected item in the same place.
c Ask for input.
n Convert string to a number.
" Toggle string mode for pushing text to the stack.
s Convert a number to a string. ╨ Encode the selected item (it must be a string).
_ Duplicate the selected item next to itself.
b Swap places between the selected item and the one before.
d Set the selected item to the last one.
m Move the selected item to the end of the stack.
@ Select an item. (Number required after this command as an argument).
w Wait a specified amount of time (the time is taken from the stack).
= Compare the selected item to the one before. (WARNING. THIS DELETES THE 2 ITEMS AND PLACES A true OR A false) (V2 beta)
~ Print the stack nicely. (V2 beta)
² Square a number. (V3 beta)
| Split a string to an array by the character after |. (V4 beta)
♀ Pop the array. (the contents are left in the stack) (V4 beta)
> Begin a while statement. (V5 beta)
< Loop back to the beginning of the while statement. (V5 beta)
! Break out of the while statements. (V5 beta)
? An if statement, does nothing if the selected item is a `true` boolean. (V6 beta)
¿ If an if statement is `false`, the interpreter skips everything to this character. (V6 beta)
If Statements
To do if statements, put a =
to compare the selected item and the one after.
This places either a true
or a false
in it's place.
The command ?
checks this boolean.
If it's true
then it does nothing and the interpreter goes on.
If it's false
then the interpreter skips to the closest ¿
character.
Interpreter for Pylongolf2 (Java):
package org.midnightas.pylongolf2;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class Pylongolf {
public static final void main(String[] args) throws Exception {
String content = new String(Files.readAllBytes(Paths.get(new File(args[0]).toURI()))) + " ";
boolean fullreadMode = true;
List<Object> stack = new ArrayList<Object>();
List<Integer> whileStatements = new ArrayList<Integer>();
HashMap<String, Object> vars = new HashMap<String, Object>();
int ifStatements = 0;
Scanner scanner = new Scanner(new UnclosableDecorator(System.in));
int selectedIndex = 0;
for (int cl = 0; cl < content.length(); cl++) {
char c = content.charAt(cl);
if (isNumber(c)) {
if (!fullreadMode) {
stack.add(Double.parseDouble(c + ""));
} else {
String number = "";
for (int cl0 = cl; cl0 < content.length(); cl0++) {
if (isNumber(content.charAt(cl0))) {
number += content.charAt(cl0);
} else {
cl = cl0 - 1;
stack.add(Double.parseDouble(number));
break;
}
}
}
} else if (c == ')') {
System.out.println(Arrays.toString(stack.toArray()));
} else if (c == 'Ü') {
fullreadMode = !fullreadMode;
} else if (c == '+') {
if (stack.get(selectedIndex) instanceof Object[]) {
Object[] obj = (Object[]) stack.remove(selectedIndex);
Double dbl = new Double(0d);
for (Object o : obj) {
dbl += (Double) o;
}
stack.add(selectedIndex, dbl);
} else {
Object obj0 = stack.remove(selectedIndex);
Object obj1 = stack.remove(selectedIndex);
if (obj0 instanceof Number && obj1 instanceof Number)
stack.add(((Number) obj0).doubleValue() + ((Number) obj1).doubleValue());
else if (obj0 instanceof String) {
stack.add(obj0.toString() + obj1.toString());
}
}
} else if (c == '-') {
Object obj0 = stack.remove(selectedIndex);
Object obj1 = stack.remove(selectedIndex);
if (obj0 instanceof Number && obj1 instanceof Number)
stack.add(((Number) obj0).doubleValue() - ((Number) obj1).doubleValue());
else if (obj0 instanceof String && obj1 instanceof String) {
stack.add(obj0.toString().replaceAll(obj1.toString(), ""));
}
} else if (c == '*') {
Object obj0 = stack.remove(selectedIndex);
Object obj1 = stack.remove(selectedIndex);
if (obj0 instanceof Number && obj1 instanceof Number)
stack.add(((Number) obj0).doubleValue() * ((Number) obj1).doubleValue());
} else if (c == '/') {
Object obj0 = stack.remove(selectedIndex);
Object obj1 = stack.remove(selectedIndex);
if (obj0 instanceof Number && obj1 instanceof Number)
stack.add(((Number) obj0).doubleValue() / ((Number) obj1).doubleValue());
} else if (c == 'a') {
stack.add(selectedIndex, stack.remove(selectedIndex));
} else if (c == 'c') {
stack.add(scanner.nextLine());
} else if (c == 'n') {
if (stack.get(selectedIndex) instanceof String) {
stack.add(selectedIndex, Double.parseDouble(stack.remove(selectedIndex).toString()));
} else if (stack.get(selectedIndex) instanceof Object[]) {
Object[] oldArray = (Object[]) stack.remove(selectedIndex);
Object[] newArray = new Object[oldArray.length];
for (int i = 0; i < oldArray.length; i++) {
newArray[i] = Double.parseDouble(oldArray[i].toString());
}
stack.add(selectedIndex, newArray);
}
} else if (c == '"') {
String string = "\"";
for (int cl0 = cl + 1; cl0 < content.length(); cl0++) {
string = string + content.charAt(cl0);
if (content.charAt(cl0) == '"') {
stack.add(string.substring(1, string.length() - 1));
cl = cl0;
break;
}
}
} else if (c == 's') {
Object obj = stack.remove(selectedIndex);
if (obj instanceof Double) {
Double dbl = (Double) obj;
if (dbl.doubleValue() == Math.floor(dbl)) {
stack.add(selectedIndex, "" + dbl.intValue() + "");
} else {
stack.add(selectedIndex, "" + dbl + "");
}
}
} else if (c == '╨') {
cl++;
char editmode = content.charAt(cl);
if (editmode == '0') {
stack.add(selectedIndex, rot13(stack.remove(selectedIndex).toString()));
} else if (editmode == '1') {
stack.add(selectedIndex,
new StringBuilder(stack.remove(selectedIndex).toString()).reverse().toString());
} else if (editmode == '2') {
stack.add(selectedIndex, stack.remove(selectedIndex).toString().toLowerCase());
} else if (editmode == '3') {
stack.add(selectedIndex, stack.remove(selectedIndex).toString().toUpperCase());
}
} else if (c == '_') {
stack.add(selectedIndex, stack.get(selectedIndex));
} else if (c == 'b') {
stack.add(selectedIndex + 1, stack.remove(selectedIndex));
} else if (c == 'd') {
selectedIndex = stack.size() == 0 ? 0 : stack.size() - 1;
} else if (c == 'm') {
stack.add(stack.remove(selectedIndex));
} else if (c == '@') {
String number = "";
for (int cl0 = cl + 1; cl0 < content.length(); cl0++) {
if (isNumber(content.charAt(cl0)))
number += content.charAt(cl0);
else {
cl = cl0 - 1;
selectedIndex = Integer.parseInt(number);
break;
}
}
} else if (c == 'w') {
String number = "";
for (int cl0 = cl + 1; cl0 < content.length(); cl0++) {
if (isNumber(content.charAt(cl0)))
number += content.charAt(cl0);
else {
cl = cl0 - 1;
Thread.sleep(Long.parseLong(number));
break;
}
}
} else if (c == '=') {
Object obj0 = stack.remove(selectedIndex);
Object obj1 = stack.remove(selectedIndex);
stack.add(new Boolean(obj0.equals(obj1)));
} else if (c == '~') {
for (Object o : stack)
System.out.print(o);
System.out.println();
} else if (c == '²') {
if (stack.get(selectedIndex) instanceof Double) {
Double dbl = (Double) stack.remove(selectedIndex);
stack.add(selectedIndex, dbl * dbl);
} else if (stack.get(selectedIndex) instanceof Object[]) {
Object[] obj = (Object[]) stack.remove(selectedIndex);
Object[] newArray = new Object[obj.length];
for (int i = 0; i < obj.length; i++) {
newArray[i] = Math.pow((Double) obj[i], 2);
}
stack.add((Object[]) newArray);
}
} else if (c == '|') {
String string = (String) stack.remove(selectedIndex);
cl++;
char splitChar = content.charAt(cl);
stack.add((Object[]) string.split(splitChar + ""));
} else if (c == '♀') {
for (Object obj : (Object[]) stack.remove(selectedIndex)) {
stack.add(selectedIndex, obj);
}
} else if (c == '>') {
whileStatements.add(new Integer(cl));
} else if (c == '<') {
cl = whileStatements.get(whileStatements.size() - 1);
} else if (c == '!') {
whileStatements.remove(whileStatements.size() - 1);
} else if (c == '?') {
if (stack.get(selectedIndex) instanceof Boolean) {
Boolean bool = (Boolean) stack.remove(selectedIndex);
if (bool == false) {
ifStatements++;
for (int cl0 = cl; cl0 < content.length(); cl0++) {
if (content.charAt(cl0) == '¿') {
ifStatements--;
cl = cl0;
}
}
}
}
} else if (c == 't') {
break;
} else if (c == '(') {
stack.remove(selectedIndex);
} else if (c == ':') {
cl++;
char charToVar = content.charAt(cl);
vars.put(charToVar + "", stack.remove(selectedIndex));
} else if (c >= 'A' && c <= 'Z') {
stack.add(vars.get(c + ""));
} else if (c == 'r') {
stack.add(selectedIndex,
(double) new Random().nextInt(((Double) stack.remove(selectedIndex)).intValue() + 1));
}
}
scanner.close();
}
public static String rot13(String input) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c >= 'a' && c <= 'm')
c += 13;
else if (c >= 'A' && c <= 'M')
c += 13;
else if (c >= 'n' && c <= 'z')
c -= 13;
else if (c >= 'N' && c <= 'Z')
c -= 13;
sb.append(c);
}
return sb.toString();
}
public static boolean isNumber(char c) {
return c >= '0' && c <= '9';
}
}
Pylongolf2 beta5
) Print the stack.
Ü Toggle the method Pylongolf2 uses for pushing to stack.
a The useless command, removes and adds the selected item in the same place.
c Ask for input.
n Convert string to a number.
" Toggle string mode for pushing text to the stack.
s Convert a number to a string. ╨ Encode the selected item (it must be a string).
_ Duplicate the selected item next to itself.
b Swap places between the selected item and the one before.
d Set the selected item to the last one.
m Move the selected item to the end of the stack.
@ Select an item. (Number required after this command as an argument).
w Wait a specified amount of time (the time is taken from the stack).
= Compare the selected item to the one before. (WARNING. THIS DELETES THE 2 ITEMS AND PLACES A true OR A false) (V2 beta)
~ Print the stack nicely. (V2 beta)
² Square a number. (V3 beta)
| Split a string to an array by the character after |. (V4 beta)
♀ Pop the array. (the contents are left in the stack) (V4 beta)
> Begin a while statement. (V5 beta)
< Loop back to the beginning of the while statement. (V5 beta)
! Break out of the while statements. (V5 beta)
Pylongolf2 beta6
) Print the stack.
Ü Toggle the method Pylongolf2 uses for pushing to stack.
a The useless command, removes and adds the selected item in the same place.
c Ask for input.
n Convert string to a number.
" Toggle string mode for pushing text to the stack.
s Convert a number to a string. ╨ Encode the selected item (it must be a string).
_ Duplicate the selected item next to itself.
b Swap places between the selected item and the one before.
d Set the selected item to the last one.
m Move the selected item to the end of the stack.
@ Select an item. (Number required after this command as an argument).
w Wait a specified amount of time (the time is taken from the stack).
= Compare the selected item to the one before. (WARNING. THIS DELETES THE 2 ITEMS AND PLACES A true OR A false) (V2 beta)
~ Print the stack nicely. (V2 beta)
² Square a number. (V3 beta)
| Split a string to an array by the character after |. (V4 beta)
♀ Pop the array. (the contents are left in the stack) (V4 beta)
> Begin a while statement. (V5 beta)
< Loop back to the beginning of the while statement. (V5 beta)
! Break out of the while statements. (V5 beta)
? An if statement, does nothing if the selected item is a `true` boolean. (V6 beta)
¿ If an if statement is `false`, the interpreter skips everything to this character. (V6 beta)
If Statements
To do if statements, put a =
to compare the selected item and the one after.
This places either a true
or a false
in it's place.
The command ?
checks this boolean.
If it's true
then it does nothing and the interpreter goes on.
If it's false
then the interpreter skips to the closest ¿
character.
Interpreter for Pylongolf2 (Java):
package org.midnightas.pylongolf2;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class Pylongolf {
public static final void main(String[] args) throws Exception {
String content = new String(Files.readAllBytes(Paths.get(new File(args[0]).toURI()))) + " ";
boolean fullreadMode = true;
List<Object> stack = new ArrayList<Object>();
List<Integer> whileStatements = new ArrayList<Integer>();
HashMap<String, Object> vars = new HashMap<String, Object>();
int ifStatements = 0;
Scanner scanner = new Scanner(new UnclosableDecorator(System.in));
int selectedIndex = 0;
for (int cl = 0; cl < content.length(); cl++) {
char c = content.charAt(cl);
if (isNumber(c)) {
if (!fullreadMode) {
stack.add(Double.parseDouble(c + ""));
} else {
String number = "";
for (int cl0 = cl; cl0 < content.length(); cl0++) {
if (isNumber(content.charAt(cl0))) {
number += content.charAt(cl0);
} else {
cl = cl0 - 1;
stack.add(Double.parseDouble(number));
break;
}
}
}
} else if (c == ')') {
System.out.println(Arrays.toString(stack.toArray()));
} else if (c == 'Ü') {
fullreadMode = !fullreadMode;
} else if (c == '+') {
if (stack.get(selectedIndex) instanceof Object[]) {
Object[] obj = (Object[]) stack.remove(selectedIndex);
Double dbl = new Double(0d);
for (Object o : obj) {
dbl += (Double) o;
}
stack.add(selectedIndex, dbl);
} else {
Object obj0 = stack.remove(selectedIndex);
Object obj1 = stack.remove(selectedIndex);
if (obj0 instanceof Number && obj1 instanceof Number)
stack.add(((Number) obj0).doubleValue() + ((Number) obj1).doubleValue());
else if (obj0 instanceof String) {
stack.add(obj0.toString() + obj1.toString());
}
}
} else if (c == '-') {
Object obj0 = stack.remove(selectedIndex);
Object obj1 = stack.remove(selectedIndex);
if (obj0 instanceof Number && obj1 instanceof Number)
stack.add(((Number) obj0).doubleValue() - ((Number) obj1).doubleValue());
else if (obj0 instanceof String && obj1 instanceof String) {
stack.add(obj0.toString().replaceAll(obj1.toString(), ""));
}
} else if (c == '*') {
Object obj0 = stack.remove(selectedIndex);
Object obj1 = stack.remove(selectedIndex);
if (obj0 instanceof Number && obj1 instanceof Number)
stack.add(((Number) obj0).doubleValue() * ((Number) obj1).doubleValue());
} else if (c == '/') {
Object obj0 = stack.remove(selectedIndex);
Object obj1 = stack.remove(selectedIndex);
if (obj0 instanceof Number && obj1 instanceof Number)
stack.add(((Number) obj0).doubleValue() / ((Number) obj1).doubleValue());
} else if (c == 'a') {
stack.add(selectedIndex, stack.remove(selectedIndex));
} else if (c == 'c') {
stack.add(scanner.nextLine());
} else if (c == 'n') {
if (stack.get(selectedIndex) instanceof String) {
stack.add(selectedIndex, Double.parseDouble(stack.remove(selectedIndex).toString()));
} else if (stack.get(selectedIndex) instanceof Object[]) {
Object[] oldArray = (Object[]) stack.remove(selectedIndex);
Object[] newArray = new Object[oldArray.length];
for (int i = 0; i < oldArray.length; i++) {
newArray[i] = Double.parseDouble(oldArray[i].toString());
}
stack.add(selectedIndex, newArray);
}
} else if (c == '"') {
String string = "\"";
for (int cl0 = cl + 1; cl0 < content.length(); cl0++) {
string = string + content.charAt(cl0);
if (content.charAt(cl0) == '"') {
stack.add(string.substring(1, string.length() - 1));
cl = cl0;
break;
}
}
} else if (c == 's') {
Object obj = stack.remove(selectedIndex);
if (obj instanceof Double) {
Double dbl = (Double) obj;
if (dbl.doubleValue() == Math.floor(dbl)) {
stack.add(selectedIndex, "" + dbl.intValue() + "");
} else {
stack.add(selectedIndex, "" + dbl + "");
}
}
} else if (c == '╨') {
cl++;
char editmode = content.charAt(cl);
if (editmode == '0') {
stack.add(selectedIndex, rot13(stack.remove(selectedIndex).toString()));
} else if (editmode == '1') {
stack.add(selectedIndex,
new StringBuilder(stack.remove(selectedIndex).toString()).reverse().toString());
} else if (editmode == '2') {
stack.add(selectedIndex, stack.remove(selectedIndex).toString().toLowerCase());
} else if (editmode == '3') {
stack.add(selectedIndex, stack.remove(selectedIndex).toString().toUpperCase());
}
} else if (c == '_') {
stack.add(selectedIndex, stack.get(selectedIndex));
} else if (c == 'b') {
stack.add(selectedIndex + 1, stack.remove(selectedIndex));
} else if (c == 'd') {
selectedIndex = stack.size() == 0 ? 0 : stack.size() - 1;
} else if (c == 'm') {
stack.add(stack.remove(selectedIndex));
} else if (c == '@') {
String number = "";
for (int cl0 = cl + 1; cl0 < content.length(); cl0++) {
if (isNumber(content.charAt(cl0)))
number += content.charAt(cl0);
else {
cl = cl0 - 1;
selectedIndex = Integer.parseInt(number);
break;
}
}
} else if (c == 'w') {
String number = "";
for (int cl0 = cl + 1; cl0 < content.length(); cl0++) {
if (isNumber(content.charAt(cl0)))
number += content.charAt(cl0);
else {
cl = cl0 - 1;
Thread.sleep(Long.parseLong(number));
break;
}
}
} else if (c == '=') {
Object obj0 = stack.remove(selectedIndex);
Object obj1 = stack.remove(selectedIndex);
stack.add(new Boolean(obj0.equals(obj1)));
} else if (c == '~') {
for (Object o : stack)
System.out.print(o);
System.out.println();
} else if (c == '²') {
if (stack.get(selectedIndex) instanceof Double) {
Double dbl = (Double) stack.remove(selectedIndex);
stack.add(selectedIndex, dbl * dbl);
} else if (stack.get(selectedIndex) instanceof Object[]) {
Object[] obj = (Object[]) stack.remove(selectedIndex);
Object[] newArray = new Object[obj.length];
for (int i = 0; i < obj.length; i++) {
newArray[i] = Math.pow((Double) obj[i], 2);
}
stack.add((Object[]) newArray);
}
} else if (c == '|') {
String string = (String) stack.remove(selectedIndex);
cl++;
char splitChar = content.charAt(cl);
stack.add((Object[]) string.split(splitChar + ""));
} else if (c == '♀') {
for (Object obj : (Object[]) stack.remove(selectedIndex)) {
stack.add(selectedIndex, obj);
}
} else if (c == '>') {
whileStatements.add(new Integer(cl));
} else if (c == '<') {
cl = whileStatements.get(whileStatements.size() - 1);
} else if (c == '!') {
whileStatements.remove(whileStatements.size() - 1);
} else if (c == '?') {
if (stack.get(selectedIndex) instanceof Boolean) {
Boolean bool = (Boolean) stack.remove(selectedIndex);
if (bool == false) {
ifStatements++;
for (int cl0 = cl; cl0 < content.length(); cl0++) {
if (content.charAt(cl0) == '¿') {
ifStatements--;
cl = cl0;
}
}
}
}
} else if (c == 't') {
break;
} else if (c == '(') {
stack.remove(selectedIndex);
} else if (c == ':') {
cl++;
char charToVar = content.charAt(cl);
vars.put(charToVar + "", stack.remove(selectedIndex));
} else if (c >= 'A' && c <= 'Z') {
stack.add(vars.get(c + ""));
} else if (c == 'r') {
stack.add(selectedIndex,
(double) new Random().nextInt(((Double) stack.remove(selectedIndex)).intValue() + 1));
}
}
scanner.close();
}
public static String rot13(String input) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c >= 'a' && c <= 'm')
c += 13;
else if (c >= 'A' && c <= 'M')
c += 13;
else if (c >= 'n' && c <= 'z')
c -= 13;
else if (c >= 'N' && c <= 'Z')
c -= 13;
sb.append(c);
}
return sb.toString();
}
public static boolean isNumber(char c) {
return c >= '0' && c <= '9';
}
}
This was a bad idea since almost all stack-based languages look unreadable (look at Jelly).
But here goes:
Pylongolf2 beta5
Pushing to the Stack
Pushing to the stack acts differently that in other languages.
The code 78
pushes 7
and 8
into the stack, however in Pylongolf it pushes 78
.
In Pylongolf2 this is toggleable with Ü
.
Commands
) Print the stack.
Ü Toggle the method Pylongolf2 uses for pushing to stack.
a The useless command, removes and adds the selected item in the same place.
c Ask for input.
n Convert string to a number.
" Toggle string mode for pushing text to the stack.
s Convert a number to a string. ╨ Encode the selected item (it must be a string).
_ Duplicate the selected item next to itself.
b Swap places between the selected item and the one before.
d Set the selected item to the last one.
m Move the selected item to the end of the stack.
@ Select an item. (Number required after this command as an argument).
w Wait a specified amount of time (the time is taken from the stack).
= Compare the selected item to the one before. (WARNING. THIS DELETES THE 2 ITEMS AND PLACES A true OR A false) (V2 beta)
~ Print the stack nicely. (V2 beta)
² Square a number. (V3 beta)
| Split a string to an array by the character after |. (V4 beta)
♀ Pop the array. (the contents are left in the stack) (V4 beta)
> Begin a while statement. (V5 beta)
< Loop back to the beginning of the while statement. (V5 beta)
! Break out of the while statements. (V5 beta)
String Concatenation and Removing a Regex Pattern from a String
The + symbol concatenates strings.
You are able to use the - symbol to remove characters following a regex pattern from a string:
c╨2"[^a-zA-Z]"-~
This code takes input and removes all non-alphabetical characters by removing all patterns matching [^a-zA-Z]
.
The selected item must be the regex and the one before must be the string to edit.
Taken from the Github page.