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

2007-03-24 - きしだのはてな
「重複値に対応したら、もっとえらい」ということで、ソートアルゴリズムを単純にバブルソートにして対応してみました。大きな変更は特になし。

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);
		print(new int[]{14, 13, 71, 2, 24, 19, 14, 15});
		print(new int[]{3, 2, 3, 2});
	}
}

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 void sort(int[] data) {
		bubbleSort(data, 0, 0);
	}

	private boolean bubbleSort(int[] data, int first, int second) {
		boolean b = (data[first] > data[second]) && swap(data, first, second);
		b = (second < data.length - 1) && bubbleSort(data, first, second + 1);
		b = (first < data.length - 2) && bubbleSort(data, first + 1, first + 2);
		return true;
	}

	private boolean swap(int[] data, int lIndex, int rIndex) {
		int work = data[lIndex];
		data[lIndex] = data[rIndex];
		data[rIndex] = work;
		return true;
	}
}