アルゴリズムチャレンジ-12


2659クロスカードの問題


質問する



上の十字形のカードには、四角に1つまたは9つ以下の数字があります.この4つの数字には同じ数字があります.
すべての可能なクロスカードが付与されると、各カードには「クロック数」という番号があります.クロック数は、4桁の中でカードの数字を時計回りに読み取ることによって生じる最小の数である.上の図のカードは時計回りに3227、2273、2732、7322を読み取ることができるので、このカードのクロック数が最も小さいのは2273です.
指定されたカード上のクロック数を入力で計算し、すべてのクロック数の中で何番目に小さいテーブル数であるかを決定するプログラムを作成します.
例えば、以下のクロスカードのクロック数は1122であり、このときのクロック数より小さいクロック数は1111、1112、1113、1114、1115、1117、1118、1119のみであるため、1122は10時間目のクロック数である.(ここで、クロスカードは、01120がクロック数ではないことを示すことができない.また、1121と書かれたカードのクロック数は、11121121がクロック数ではない.)

入力


入力は1行で構成され、この行は時計回りにカードの4つの辺の4つの1または9以下の数字を入力します.各数字の間にスペースがあります.

しゅつりょく


入力カードのクロック数は、すべてのクロック数の中で最小のクロック数を出力します.

入力例


2 1 1 2

サンプル出力


10

コード#コード#

import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String first = scanner.next();
        String second = scanner.next();
        String third = scanner.next();
        String fourth = scanner.next();

        int minNumber = rotation(first,second,third,fourth);

        int count=0;
        for(int i=1111;i<10000;i++){
            String stringNumber = Integer.toString(i);
            if(stringNumber.contains("0")==false){
                String[] rotationList = stringNumber.split("");
                int rotationNumber = rotation(rotationList[0],rotationList[1],rotationList[2],rotationList[3]);
                if(rotationNumber==i){
                    count++;
                    if(stringNumber.equals(Integer.toString(minNumber))){
                        break;
                    }
                }

            }
        }
        System.out.println(count);
    }

    public static int rotation(String first, String second, String third, String fourth){
        int[] numList = new int[4];
        int number=10000;
        numList[0] = Integer.parseInt(first+second+third+fourth);
        numList[1] = Integer.parseInt(second+third+fourth+first);
        numList[2] = Integer.parseInt(third+fourth+first+second);
        numList[3] = Integer.parseInt(fourth+first+second+third);

        for(int i=0;i<4;i++){
            if(number>numList[i]){
                number=numList[i];
            }
        }
        return number;
    }
}