凄いバカなプログラムを作ろう企画に参加!
2007-03-24 - きしだのはてな
とりあえず、パッと書いてみました。if,switch,for,while,try,catch,3項演算子を使わずに書けました。どんなもんでしょ?
public class SortedPrinter { public static void print(int[] data) { ArrayPrinter printer = getPrinter(data); printer.print(data); } private static ArrayPrinter instance_; private static ArrayPrinter getPrinter(int[] data) { boolean b = createNullPrinter(data) && createZeroPrinter(data) && createSortPrinter(data); return instance_; } private static boolean createNullPrinter(int[] data) { instance_ = new NullArrayPrinter(); return !(data == null); } private static boolean createZeroPrinter(int[] data) { instance_ = new ZeroArrayPrinter(); return !(data.length == 0); } private static boolean createSortPrinter(int[] data) { instance_ = new SortArrayPrinter(); return true; } public static void main(String[] args) { print(new int[]{14, 13, 71, 2, 24, 19}); print(new int[]{3, 2}); print(new int[]{5}); print(new int[]{}); print(null); } } interface ArrayPrinter { void print(int[] data); } class NullArrayPrinter implements ArrayPrinter { public void print(int[] data) { System.out.println("nullです"); } } class ZeroArrayPrinter implements ArrayPrinter { public void print(int[] data) { System.out.println("空です"); } } class SortArrayPrinter implements ArrayPrinter { public void print(int[] data) { sort(data); print(data, 0); System.out.println(); } private boolean print(int[] data, int index) { System.out.print(data[index]); boolean b = (data.length > (index + 1)) && printSpace() && print(data, index + 1); return b; } private boolean printSpace() { System.out.print(" "); return true; } private int first_ = -1; private int last_ = -1; private void sort(int[] data) { sortLoop(data, data[data.length / 2], 0, data.length - 1); } private boolean sortLoop(int[] data, int pivot, int first, int last) { first_ = -1; last_ = -1; calcFirst(data, pivot, first); calcLast(data, pivot, last); return (first_ >= 0) && (last_ >= 0) && (first_ < last_) && swap(data, first_, last_) && sortLoop(data, data[data.length / 2], first, last); } private boolean calcFirst(int[] data, int pivot, int first) { boolean b = (data[first] < pivot) && calcFirst(data, pivot, first + 1); b = (first_ < 0) && setFirst(first); return true; } private boolean setFirst(int first) { first_ = first; return true; } private boolean calcLast(int[] data, int pivot, int last) { boolean b = (pivot < data[last]) && calcLast(data, pivot, last - 1); b = (last_ < 0) && setLast(last); return true; } private boolean setLast(int last) { last_ = last; return true; } private boolean swap(int[] data, int lIndex, int rIndex) { data[lIndex] ^= data[rIndex]; data[rIndex] ^= data[lIndex]; data[lIndex] ^= data[rIndex]; return true; } }
追記
ごめんなさい。。。条件を良く見たら、java.lang だけになってましたね。java.util.Arraysを使ってるので失格ですね・・・。
元のソースをここにおいて、出直してきます。
class SortArrayPrinter implements ArrayPrinter { public void print(int[] data) { sort(data); String str = Arrays.toString(data); str = str.replaceAll("[\\]\\[,]", ""); System.out.println(str); } private void sort(int[] data) { Arrays.sort(data); } }
追記2
条件に合うように上記のソースを修正しました。今度は、ちゃんとできてると思います。改めてトラックバック飛ばさせていただきます。