凄いバカなプログラムを作ろう企画に参加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; } }