秘密の地図


ニオは秘密の地図を手に持って、プロドが普段私房のお金を隠している場所を教えた.しかし、この秘密地図はデジタル暗号化されており、位置を確認するために解読が必要です.幸いなことに、地図のパスワードを解読する方法が書かれたメモも見つかった.
地図は、エッジ長nの正方形の配列形式で、各セルは「空白」(")または「壁」("#")の2種類で構成されています.
地図全体を2枚の地図で重ねることができます.それぞれ「地図1」と「地図2」と言います.地図1または地図2のいずれかが壁である部分は、地図全体でも壁である.地図1も地図2も空白の部分であり、地図全体においても空白である.
「地図1」と「地図2」はそれぞれ整数配列で暗号化されている.
暗号化された配列は,地図の横線ごとに壁部分を1に符号化し,空白部分を0に符号化したときのバイナリ値の配列である.

ニオがフロドの私房金を手に入れるために、秘密地図のパスワードを解読するのに役立つプログラムを作成しました.
入力フォーマット
地図に入るエッジサイズnと2つの整数配列arr 1とarr 2を入力します.
  • 1 ≦ n ≦ 16
  • arr 1,arr 2は長さnの整数配列である.
  • 整数配列の各要素xがバイナリ数に変換されたときの長さはn以下である.すなわち、0≦x≦2^n–1を満たす.
  • 出力フォーマット
    元の秘密地図を復号し、「#」と出力し、スペースの文字列配列を出力します.
    I/O例
    HeaderDescription 5 arr 1[9,20,28,18,11]arr 2[30,1,21,17,28]出力[############################################################################
    HeaderDescription 6 arr 1[46,33,22,31,50]arr 2[27,56,19,14,14,10]出力[######################################################################################

    最初のコード

    class Solution {
        public String[] solution(int n, int[] arr1, int[] arr2) {
            String[] answer = new String[n];
            
            for (int i = 0; i < n; i++) {
    			answer[i] = Integer.toBinaryString(arr1[i]|arr2[i]).replace('0', ' ').replace('1', '#');
    		}
            
            return answer;
        }
    }
    先頭スペースが消えた結果を生成

    2番目のコード

    class Solution {
        public String[] solution(int n, int[] arr1, int[] arr2) {
            String[] answer = new String[n];
            
            for (int i = 0; i < n; i++) {
    			answer[i] = String.format("%"+n+"s", Integer.toBinaryString(arr1[i]|arr2[i]).replace('0', ' ').replace('1', '#'));
    		}
            
            return answer;
        }
    }
    String.前のスペースを書式で追加

    整理する

  • Integer.toBinaryString:数値をバイナリ数値に変換し、String
  • を返します.
  • ビット演算or:2つの国の1つが1を返すか、0が
  • を返す
  • String.format:%とsの間に数字を追加し、文字列の長さがその数字になるまで
  • まで前にスペースを追加します.