凄いバカなプログラムを作ろう企画に参加!

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

条件に合うように上記のソースを修正しました。今度は、ちゃんとできてると思います。改めてトラックバック飛ばさせていただきます。