package com.genuineminecraft.bf;
public class BrainFuckeryTest {
public static String test = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.";
public static void main(String[] args) {
if (args.length > 0)
test = args[0];
test = test.replaceAll("[^\\,\\.\\<\\>\\[\\]\\-\\+]", "");
System.out.println("===================== Time Trials =====================");
timeTrials();
System.out.println("==================== Quality Check ====================");
qualityCheck();
}
public static void qualityCheck() {
String min = encode(test);
String mag = decode(min);
System.out.println("Debug: " + test);
System.out.println("Debug: " + min);
System.out.println("Debug: " + mag);
if (!test.equals(mag))
System.out.println("Error: Test Failed");
else
System.out.println("Success: Test Passed");
}
public static void timeTrials() {
long start, stop;
int count = 10000;
int dCount = 50;
for (int j = 0; j < dCount; j++) {
if (j == 0) {
System.out.println("Info: Running " + count + " times x" + dCount + ".");
System.out.println("Info: These are the pre-compile results!");
} else
System.out.println("Info: These are the post-compile results!");
start = System.nanoTime();
for (int i = 0; i < count; i++)
encode_1(test);
stop = System.nanoTime();
System.out.println("Debug Encode 1: " + (stop - start) + " nanoseconds.");
start = System.nanoTime();
for (int i = 0; i < count; i++)
encode_2(test);
stop = System.nanoTime();
System.out.println("Debug Encode 2: " + (stop - start) + " nanoseconds.");
start = System.nanoTime();
for (int i = 0; i < count; i++)
encode_3(test);
stop = System.nanoTime();
System.out.println("Debug Encode 3: " + (stop - start) + " nanoseconds.");
start = System.nanoTime();
for (int i = 0; i < count; i++)
decode_1(test);
stop = System.nanoTime();
System.out.println("Debug Decode 1: " + (stop - start) + " nanoseconds.");
start = System.nanoTime();
for (int i = 0; i < count; i++)
decode_2(test);
stop = System.nanoTime();
System.out.println("Debug Decode 2: " + (stop - start) + " nanoseconds.");
}
}
public static String encode(String in) {
return encode_1(in);
}
public static String decode(String in) {
return decode_1(in);
}
private static String encode_1(String in) {
int length = in.length();
if (length == 0)
return in;
StringBuilder out = new StringBuilder(length);
int counter = 0;
int check = 1;
char compare = in.charAt(0);
for (int place = 0; place < length; place++) {
compare = in.charAt(place);
check = place + 1;
if (length > check && compare == in.charAt(check)) {
counter++;
continue;
}
if (counter == 0)
out.append(compare);
else if (counter == 1) {
out.append(compare);
out.append(compare);
} else {
out.append(counter + 1);
out.append(compare);
}
counter = 0;
}
return out.toString();
}
private static String encode_2(String in) {
int length = in.length();
if (length == 0)
return in;
StringBuilder out = new StringBuilder(length);
int counter = 0;
int check = 1;
char compare = in.charAt(0);
for (int place = 0; place < length; place++) {
compare = in.charAt(place);
check = place + 1;
if (length > check && compare == in.charAt(check)) {
counter++;
continue;
}
switch (counter) {
case 0:
out.append(compare);
break;
case 1:
out.append(compare);
out.append(compare);
break;
default:
out.append(counter + 1);
out.append(compare);
break;
}
counter = 0;
}
return out.toString();
}
private static String encode_3(String in) {
int length = in.length();
if (length == 0)
return in;
StringBuilder out = new StringBuilder();
int counter = 0;
int check = 1;
char compare = in.charAt(0);
for (int place = 0; place < length; place++) {
compare = in.charAt(place);
check = place + 1;
if (length > check && compare == in.charAt(check)) {
counter++;
continue;
}
switch (counter) {
case 0:
out.append(compare);
break;
case 1:
out.append(compare);
out.append(compare);
break;
default:
out.append(counter + 1);
out.append(compare);
break;
}
counter = 0;
}
return out.toString();
}
private static String encode_4(String in) {
String out = "";
int counter = 0;
for (int place = 0; place < in.length(); place++) {
char compare = in.charAt(place);
if (in.length() > place + 1 && compare == in.charAt(place + 1)) {
counter++;
continue;
}
switch (counter) {
case 0:
out += Character.toString(compare);
break;
case 1:
out += Character.toString(compare) + Character.toString(compare);
break;
default:
out += Integer.toString(counter + 1) + Character.toString(compare);
break;
}
counter = 0;
}
return out;
}
private static String encode_5(String in) {
String out = "";
int counter = 0;
for (int place = 0; place < in.length(); place++) {
char compare = in.charAt(place);
if (in.length() > place + 1 && compare == in.charAt(place + 1)) {
counter++;
continue;
}
out += (counter == 0 ? "" : counter == 1 ? Character.toString(compare) : Integer.toString(counter + 1)) + Character.toString(compare);
counter = 0;
}
return out;
}
private static String encode_6(String in) {
String out = "";
while (in.length() > 0) {
int counter = 0;
char compare = in.charAt(0);
while (counter < in.length() && in.charAt(counter) == compare)
counter++;
in = in.substring(counter - (counter == 2 ? 1 : 0));
if (counter > 2)
out += counter;
out += compare;
}
return out;
}
private static String decode_1(String in) {
int length = in.length();
if (length == 0)
return in;
StringBuilder out = new StringBuilder(length * 4);
for (int count = 0; count < length; count++) {
if (Character.isDigit(in.charAt(count))) {
int start = count;
while (Character.isDigit(in.charAt(count)))
count++;
for (int j = 0; j < Integer.parseInt(in.substring(start, count), 10); j++)
out.append(in.charAt(count));
} else
out.append(in.charAt(count));
}
return out.toString();
}
private static String decode_2(String in) {
int length = in.length();
if (length == 0)
return in;
StringBuilder out = new StringBuilder();
for (int count = 0; count < in.length(); count++) {
if (Character.isDigit(in.charAt(count))) {
int start = count;
while (Character.isDigit(in.charAt(count)))
count++;
for (int j = 0; j < Integer.parseInt(in.substring(start, count), 10); j++)
out.append(in.charAt(count));
} else
out.append(in.charAt(count));
}
return out.toString();
}
}
Comments
0 B
|👍
/👎