Saturday, December 1, 2012

CodeEval Cash Register

// CodeEval Cash Register

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        cash_register.main(args);
    }
}

class cash_register {
    public static void main(String[] args) {
        boolean LOCAL_TEST = false;
        // LOCAL_TEST = true;// comment it before submitting
        if (LOCAL_TEST)
            CodeEvalGetInput("e:\\zin.txt");
        else
            CodeEvalGetInput(args[0]);
    }

    public static void CodeEvalGetInput(String arg) {
        try {
            File file = new File(arg);
            BufferedReader in = new BufferedReader(new FileReader(file));
            Initialize();
            String line;
            while ((line = in.readLine()) != null) {
                String[] lineArray = line.split(";");
                if (lineArray.length > 0) {
                    // Process line of input Here
                    Process(lineArray);
                }
            }
        } catch (IOException e) {
            System.out.println("File Read Error: " + e.getMessage());
        }
    }

    static Map<Double, String> coins;
    static List<Double> coinvals;

    private static void Initialize() {
        coins = new LinkedHashMap<Double, String>();
        coins.put(100.0d, "ONE HUNDRED");
        coins.put(50.0d, "FIFTY");
        coins.put(20.0d, "TWENTY");
        coins.put(10.0d, "TEN");
        coins.put(5.0d, "FIVE");
        coins.put(2.0d, "TWO");
        coins.put(1.0d, "ONE");
        coins.put(0.5d, "HALF DOLLAR");
        coins.put(0.25d, "QUARTER");
        coins.put(0.1d, "DIME");
        coins.put(0.05d, "NICKEL");
        coins.put(0.01d, "PENNY");
        coinvals = new ArrayList<Double>();
        Set<Double> v = coins.keySet();
        for (Double d : v) {
            coinvals.add(d);
        }
    }

    private static void Process(String[] lineArray) {
        double PP = Double.valueOf(lineArray[0]);
        double CH = Double.valueOf(lineArray[1]);
        // System.out.println(PP + ";" + CH + "  :  " + (PP - CH));
        if (CH < PP) {
            System.out.println("ERROR");
            return;
        } else if (CH - PP < 0.001) {
            System.out.println("ZERO");
            return;
        } else {
            List<String> chg = new ArrayList<String>();
            double money = CH - PP + 0.001;
            while (money > 0.005) {
                for (Double val : coinvals) {
                    if (money >= val) {
                        money -= val;
                        String c = coins.get(val);
                        chg.add(c);
                        break;
                    }
                }
            }
            String[] achg = chg.toArray(new String[chg.size()]);
            Arrays.sort(achg);
            for (int i = 0; i < chg.size(); i++) {
                if (i > 0)
                    System.out.print(",");
                System.out.print(achg[i]);
            }
            System.out.println();
        }
    }
}

Friday, November 30, 2012

CodeEval Reverse and Add

// http://www.codeeval.com/open_challenges/45/

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

class Main {
    public static void main(String[] args) {
        reverse_add.main(args);
    }
}

class reverse_add {
    public static void main(String[] args) {
        boolean LOCAL_TEST = false;
        // LOCAL_TEST = true;// comment it before submitting
        if (LOCAL_TEST)
            CodeEvalGetInput("e:\\zin.txt");
        else
            CodeEvalGetInput(args[0]);
    }

    public static void CodeEvalGetInput(String arg) {
        try {
            File file = new File(arg);
            BufferedReader in = new BufferedReader(new FileReader(file));
            String line;
            while ((line = in.readLine()) != null) {
                String[] lineArray = line.split("\\s");
                if (lineArray.length > 0) {
                    // Process line of input Here
                    Process(lineArray);
                }
            }
        } catch (IOException e) {
            System.out.println("File Read Error: " + e.getMessage());
        }
    }

    private static void Process(String[] lineArray) {
        long N = Long.valueOf(lineArray[0]);
        int it = 0;
        String sum = "";
        while (true) {
            it++;
            long rev = Long.valueOf(new StringBuffer(String.valueOf(N)).reverse()
                    .toString());
            sum = String.valueOf(N + rev);
            if (sum.equals(new StringBuffer(sum).reverse().toString())) {
                break;
            }
            N = N + rev;
        }
        System.out.println(it + " " + sum);
    }

}

CodeEval Jolly Jumpers

// CodeEval Jolly Jumpers

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

class Main {
    public static void main(String[] args) {
        jolly_jumpers.main(args);
    }
}

class jolly_jumpers {
    public static void main(String[] args) {
        CodeEvalGetInput(args[0]);
        // CodeEvalGetInput("e:\\zin.txt");
    }

    public static void CodeEvalGetInput(String arg) {
        try {
            File file = new File(arg);
            BufferedReader in = new BufferedReader(new FileReader(file));
            String line;
            while ((line = in.readLine()) != null) {
                String[] lineArray = line.split("\\s");
                if (lineArray.length > 0) {
                    // Process line of input Here
                    Process(lineArray);
                }
            }
        } catch (IOException e) {
            System.out.println("File Read Error: " + e.getMessage());
        }
    }

    private static void Process(String[] lineArray) {
        int N = Integer.valueOf(lineArray[0]);
        Set<Integer> sets = new HashSet<Integer>();
        boolean jolly = true;
        for (int i = 1; i < N; i++) {
            int diff = Integer.valueOf(lineArray[i + 1])
                    - Integer.valueOf(lineArray[i]);
            diff = Math.abs(diff);
            if (diff >= N || sets.contains(diff)) {
                jolly = false;
                break;
            } else {
                sets.add(diff);
            }
        }
        System.out.println(jolly ? "Jolly" : "Not jolly");
    }

}