Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement