GenuineSounds icon

BrainFuckery

GenuineSounds | PRO | 12/07/14 09:12:43 PM UTC | 0 ⭐ | 531 👁️ | Never ⏰ | []
Java |

6.98 KB

|

None

|

0 👍

/

0 👎

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

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎