GenuineSounds icon

BrainFuck Encode/Decode

GenuineSounds | PRO | 12/07/14 06:44:30 AM UTC | 0 ⭐ | 592 👁️ | Never ⏰ | []
Java |

3.48 KB

|

None

|

0 👍

/

0 👎

package com.genuineminecraft.bf;
 
public class Test {
 
    public static String test = "+++++++++[->+++++++++<]>+++.<++++[->++++<]>+.++++++++++++++.+.-----------.+++++.-------.<++++++++[->--------<]>-------.<+++++++++[->+++++++++<]>+++.---------------.++++++++++++++.+.-----------.+++++.-------.<++++++++[->--------<]>-------.<++++[->++++<]>+.<++++[->----<]>-.<++++[->++++<]>++.";
 
    public static void main(String[] args) {
        timeTrials();
        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 = 1000000;
        System.out.println("Debug: Running " + count + " times.");
        start = System.currentTimeMillis();
        for (int i = 0; i < count; i++)
            encode_1(test);
        stop = System.currentTimeMillis();
        System.out.println("Debug 1: " + (stop - start) + " millseconds.");
        start = System.currentTimeMillis();
        for (int i = 0; i < count; i++)
            encode_2(test);
        stop = System.currentTimeMillis();
        System.out.println("Debug 2: " + (stop - start) + " millseconds.");
        start = System.currentTimeMillis();
        for (int i = 0; i < count; i++)
            encode_3(test);
        stop = System.currentTimeMillis();
        System.out.println("Debug 3: " + (stop - start) + " millseconds.");
    }
 
    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) {
        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_2(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_3(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) {
        String out = "";
        for (int i = 0; i < in.length(); i++) {
            String t = "";
            while (Character.isDigit(in.charAt(i)))
                t += in.charAt(i++);
            int n = 1;
            if (!t.isEmpty())
                n = Integer.parseInt(t, 10);
            for (int j = 0; j < n; j++)
                out += in.charAt(i);
        }
        return out;
    }
}

Comments

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

    0 B

    |

    👍

    /

    👎