Lines
Jump to navigation
Jump to search
Lines is a language based on ///, but with input.
Specification
The program is interpreted exactly as in ///, with one exception. If \| is encountered, rather than doing something with |, the program gets one character from the standard input.
Examples
All of the examples for /// are valid in Lines, as long as they do not contain | anywhere.
Read a character and print it
\|
Read a character and print it twice
/~/\|/~~
(Both this and the next program freeze if the user inputs a ~.)
Read a character and print it, unless it is a q
/~/\|//q//~
Interpreter
import java.util.Scanner;
public class Lines {
public static void run(String prog) {
Scanner input = new Scanner(System.in);
input.useDelimiter("");
StringBuilder program = new StringBuilder(prog);
program:
while (true) {
while (true) {
if (program.length() == 0) {
break program;
}
if (program.charAt(0) == '\\') {
char next = program.charAt(1);
if (next == '|') {
next = input.next().charAt(0);
}
System.out.print(next);
program.delete(0, 2);
} else if (program.charAt(0) == '/') {
program.deleteCharAt(0);
break;
} else {
System.out.print(program.charAt(0));
program.deleteCharAt(0);
}
}
StringBuilder pattern = new StringBuilder();
while (true) {
if (program.length() == 0) {
break program;
}
if (program.charAt(0) == '\\') {
char next = program.charAt(1);
if (next == '|') {
next = input.next().charAt(0);
}
pattern.append(next);
program.delete(0, 2);
} else if (program.charAt(0) == '/') {
program.deleteCharAt(0);
break;
} else {
pattern.append(program.charAt(0));
program.deleteCharAt(0);
}
}
StringBuilder replacement = new StringBuilder();
while (true) {
if (program.length() == 0) {
break program;
}
if (program.charAt(0) == '\\') {
char next = program.charAt(1);
if (next == '|') {
next = input.next().charAt(0);
}
replacement.append(next);
program.delete(0, 2);
} else if (program.charAt(0) == '/') {
program.deleteCharAt(0);
break;
} else {
replacement.append(program.charAt(0));
program.deleteCharAt(0);
}
}
String patternStr = pattern.toString();
String replaceStr = replacement.toString();
int index = program.indexOf(patternStr);
while (index != -1) {
program.replace(index, index + pattern.length(), replaceStr);
index = program.indexOf(patternStr);
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line;
while (!(line = scanner.nextLine()).isEmpty()) {
run(line);
System.out.println();
}
}
}