출처 : http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/
2018년 카카오 신입 공채 1차 코딩 테스트 문제입니다.
네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.

네오가 프로도의 비상금을 손에 넣을 수 있도록, 비밀지도의 암호를 해독하는 작업을 도와줄 프로그램을 작성하라.
입력 형식
입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.
출력 형식
원래의 비밀지도를 해독하여 "#", 공백으로 구성된 문자열 배열로 출력하라.
입출력 예제
| 매개변수 | 값 |
|---|---|
| n | 5 |
| arr1 | [9, 20, 28, 18, 11] |
| arr2 | [30, 1, 21, 17, 28] |
| 출력 | ["#####","# # #", "### #", "# ##", "#####"] |
| 매개변수 | 값 |
|---|---|
| n | 6 |
| arr1 | [46, 33, 33 ,22, 31, 50] |
| arr2 | [27 ,56, 19, 14, 14, 10] |
| 출력 | ["######", "### #", "## ##", " #### ", " #####", "### # "] |
80개의 풀이가 있습니다.
def secret(n, arr1, arr2):
print(['{0:b}'.format((i | j)).zfill(n).replace('0', ' ').replace('1', '#') for i, j in zip(arr1, arr2)])
secret(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
secret(6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10])
int main(void)
{
int i=0,temp,temp2,for_bin,input_n;
int *arr1, *arr2;
scanf("%d", &input_n);
arr1 = new int[input_n];
arr2 = new int[input_n];
temp = pow(2, input_n);
printf("arr1 입력\n");
while(i!=input_n){
scanf("%d", &arr1[i]);
if (arr1[i] >= temp)
printf("숫자가 조건보다 큽니다\n재입력하시오\n");
else
i++;
} i = 0;
printf("arr2 입력\n");
while (i != input_n) {
scanf("%d", &arr2[i]);
if (arr2[i] >= temp)
printf("숫자가 조건보다 큽니다\n재입력하시오\n");
else
i++;
}
for (i = 0; i < input_n; i++) {
temp = arr1[i] | arr2[i];
for (for_bin = input_n; for_bin > 0; for_bin--) {
temp2 = pow(2, for_bin - 1);
if (temp / temp2)
printf("#");
else
printf(" ");
temp= temp % temp2;
}
printf("\n");
}
delete arr1,arr2;
return 0;
}
def secret_map(n, arr1, arr2):
for i in range(n):
row = bin(arr1[i] | arr2[i])
row = row[2:]
row = row.zfill(n)
row = row.replace('0', ' ')
row = row.replace('1', '#')
print(row)
secret_map(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
haskell
import Data.Bits ((.|.))
solution :: Int -> [Int] -> [Int] -> [String]
solution n arr1 arr2 = fmap display . toBits <$> zipWith (.|.) arr1 arr2
where
display True = '#'
display False = ' '
toBits = reverse . take n . fmap odd . iterate (`div` 2)
main = mapM_ putStrLn $ solution 5 [9,20,28,18,11] [30,1,21,17,28]
Python 3.7
# 두 지도의 정수 값에 대해 OR 연산 => 연산된 (길이=size의) 이진문자열에 대해 문자 치환
def unveil_map(size, map1, map2):
rst = [binary.zfill(n).replace("1", "#").replace("0", " ") for binary in
(bin(map1[i] | map2[i])[2:] for i in range(size))]
return rst
# 예제1
n = 5
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28]
print(unveil_map(n, arr1, arr2))
# 예제2
n = 6
arr1 = [46, 33, 33, 22, 31, 50]
arr2 = [27, 56, 19, 14, 14, 10]
print(unveil_map(n, arr1, arr2))
Ruby
def decode_map(width, map1, map2)
map1.zip(map2).map {|a,b| ("%0#{width}b" % (a|b)).gsub(/./,'0'=>' ','1'=>'#')}
end
Test
cases = [[5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28]],
[6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10]]]
decoded_maps = [["#####","# # #", "### #", "# ##", "#####"],
["######", "### #", "## ##", " #### ", " #####", "### # "]]
expect( cases.map {|e| decode_map(*e)} ).to eq decoded_maps
# input #######################
n = 6
arr1 = [46, 33, 33 ,22, 31, 50]
arr2 = [27, 56, 19, 14, 14, 10]
###############################
def to_hash(num):
hashs = ''
for i in range(n):
num, r = divmod(num, 2)
hashs = ('#' if r else ' ') + hashs
return hashs
print([to_hash(i | j) for i, j in zip(arr1, arr2)])
자바입니다. 많이 난잡하네여...원래 신입이면 이정도는 쉽게 풀어야 하는건가여 수정,보완 조언 부탁드려여
public class secret_map {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("한변의 길이 입력(1~16정수):");
//한 변의 크기
int n = sc.nextInt();
int[] arr1 = new int[n];
int[] arr2 = new int[n];
Character[][] secret_map = new Character[n][n];
Character[][] secret_map2 = new Character[n][n];
System.out.println("배열1에 담을 값 :");
for(int i=0;i<n;i++){
arr1[i]=sc.nextInt();
}
System.out.println("배열2에 담을 값:");
for(int i=0;i<n;i++){
arr2[i]=sc.nextInt();
}
Character[][] list1=create_map(n,arr1);
Character[][] list2=create_map(n,arr2);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(list1[i][j].equals('1') || list2[i][j].equals('1')){
secret_map[i][j]='1';
}else{
secret_map[i][j]='0';
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.print(secret_map[i][j]);
}
System.out.println();
}
secret_map2=replace_map(secret_map);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.print(secret_map2[i][j]);
}
System.out.println();
}
}
static Character[][] create_map(int n,int[] arr1){
Character[] tmplist1 = new Character[n];
Character[][] list = new Character[n][n];
String tmpstr="";
for(int i=0;i<n;i++){
if(Integer.toBinaryString(arr1[i]).length() != n){
int cnt=1;
while(true){
tmpstr=add_zero(cnt)+Integer.toBinaryString(arr1[i]);
cnt++;
if(tmpstr.length()==n) break;
}
}else{
tmpstr=Integer.toBinaryString(arr1[i]);
}
for(int j=n-1;j>=0;j--){
tmplist1[j] = tmpstr.charAt(j);
}
for(int k=0;k<n;k++){
list[i][k]=tmplist1[k];
}
}
return list;
}
static StringBuffer add_zero(int a){
StringBuffer sb = new StringBuffer();
for(int i=0;i<a;i++){
sb.append("0");
}
return sb;
}
static Character[][] replace_map(Character[][] list){
for(int i=0;i<list.length;i++){
for(int j=0;j<list.length;j++){
if(list[i][j].equals('1')){
list[i][j]='#';
}else{
list[i][j]=' ';
}
}
}
return list;
}
}
vector<string> solution(int n, vector<int> arr1, vector<int> arr2)
{
vector<string> ans(n);
for (int i = 0; i < n; ++i)
{
int lineKey = arr1[i] | arr2[i];
for (int j = 0; j < n; ++j)
{
if (lineKey & (0x1 << j))ans[i] += "#";
else ans[i] += " ";
}
reverse(&ans[i][0], &ans[i][n]);
}
return ans;
}
typedef struct testcase
{
int n;
vector<int> arr1, arr2;
vector<string> expectANS;
};
void TESTCASE()
{
testcase TC[] = {
{5,{ 9, 20, 28, 18, 11 },{ 30, 1, 21, 17, 28 },{ "#####","# # #", "### #", "# ##", "#####"}},
{6,{ 46, 33, 33 ,22, 31, 50 },{ 27 ,56, 19, 14, 14, 10 },{ "######", "### #", "## ##", " #### ", " #####", "### # "}}
};
for (const auto& eachTC : TC)
if (eachTC.expectANS == solution(eachTC.n, eachTC.arr1, eachTC.arr2)) std::cout << "OK!\n";
else std::cout << "WRONG!!!!!\n";
}
int main()
{
TESTCASE();
return 0;
}
def BINARY(a): # 2진수로 바꾸는 함수
X = []
for x in a:
X.append(bin(x)[2:]) # 앞의 0b 제거
return X
n = int(input("How long is the map? : "))
print("\n")
arr1 = [] # 제 1지도
arr2 = [] # 제 2지도
arr3 = [] # 앞의 두개를 겹친 것
arr5 = [] # 우물 정자로 바꾼 것 (최종)
while len(arr1) != n: # 제 1지도 입력
z = int(input("Give me a number for arr1 :"))
if z > 2**n - 1:
print("Too Big! \n") #특정 범위 넘을 시
continue
arr1.append(z)
print("\n")
while len(arr2) != n: # 제 2지도 입력
Z = int(input('Give me a number for arr2 :'))
if Z > 2**n - 1:
print("Too Big! \n")
continue
arr2.append(Z)
print("\n")
for x in range(n):
arr3.append(int(arr1[x])|int(arr2[x])) #겹치기
arr3 = BINARY(arr3) #2진수화
for x in arr3:
arr4 = [] # 우물정자 암호로 만든 후 하나씩 보관하기
for y in x:
if y == "1":
arr4.append("#")
else:
arr4.append(" ")
arr5.append("".join(arr4)) # 보관해 놓은 걸 문자열로 풀어서 최종 리스트에 저장
print(arr5)
python3로 풀었습니다. 작동은 하는데 너무 길고... 매끈하지 못한거 같습니다. 조언 해주시면 감사합니다.
C++입니다. 2차원 배열 설정이 상당이 더럽군요; 배열만 써서 풀었습니다.
#include<iostream>
using namespace std;
int main()
{
int n;
cout << "배열의 크기 : ";
cin >> n;
//미로가 들어갈 배열
int** binary = new int*[n];
int** binary2 = new int*[n];
for (int i = 0; i < n; i++)
{
binary[i] = new int[n];
binary2[i] = new int[n];
}
int *num1, *num2;
num1 = new int[n];
num2 = new int[n];
cout << "첫번째 요소 : ";
for (int i = 0; i < n; i++)
cin >> num1[i];
cout << "두번째 요소 : ";
for (int i = 0; i < n; i++)
cin >> num2[i];
//2진수로 바꿔서 OR
for (int i = 0; i < n; i++)
{
int* temp = new int[n];
for (int k = 0; k < n; k++)
temp[k] = 0;
int j = 0;
while (num1[i] > 0)
{
temp[j] = num1[i] % 2;
num1[i] /= 2;
j++;
}
for (int k = 0; k < n; k++)
{
//cout << temp[k] << " ";
binary[i][n - k - 1] = temp[k];
}
}
for (int i = 0; i < n; i++)
{
int* temp = new int[n];
for (int k = 0; k < n; k++)
temp[k] = 0;
int j = 0;
while (num2[i] > 0)
{
temp[j] = num2[i] % 2;
num2[i] /= 2;
j++;
}
for (int k = 0; k < n; k++)
{
//cout << temp[k] << " ";
binary2[i][n - k - 1] = temp[k];
}
}
cout << "출력" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (binary[i][j] || binary2[i][j])
{
cout << "#";
}
else
{
cout << " ";
}
}
cout << endl;
}
for (int i = 0; i < n; i++)
{
delete[] binary[i];
delete[] binary2[i];
}
delete[] binary;
delete[] binary2;
return 0;
}
파이썬3 풀이입니다.
def solution(n:int, arr1:[int], arr2:[int]) -> [str]:
template = "{: %d}" % n
return [template.format(bin(a|b)[2:].replace('0', ' ').replace('1','#'))
for a, b in zip(arr1, arr2)]
Swift에서는 bin 함수가 기본라이브러리에 없어서 아래와 같이 구현해보았습니다.
import Foundation
func solution(n: Int, arr1: [Int], arr2: [Int]) -> [String] {
func bin(_ a: Int, _ b: Int) -> String {
var temp: [String] = []
var i = 1 << (n-1)
while i > 0 {
temp.append((a|b) & i == 0 ? " " : "#")
i = i >> 1
}
return temp.joined(separator:"")
}
return zip(arr1, arr2).map(bin)
}
하스켈로도 한 번 해봤습니다.
import Data.Bits
doubles :: Int -> [Int]
doubles n = n:(doubles (n*2))
convert :: Int -> Int -> String
convert width n = let ds = take width . doubles $ 1 in reverse . fmap f $ ds
where f x = if n .&. x > 0 then '#' else ' '
solution :: Int -> [Int] -> [Int] -> [String]
solution n arr1 arr2 = fmap (convert n) . fmap (uncurry (.|.)) $ zip arr1 arr2
main = putStr . unlines $ solution 5 [9,20,28,18,11] [30,1,21,17,28]
package codingdojang;
import java.util.Scanner;
public class ex151 { / 입력예시 * 6 46 33 33 22 31 50 27 56 19 14 14 10 / / 출력예시 ###### ### # ## ## #### ##### ### # */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); sc.nextLine();
char map[][] = new char[n][n];
int arr1[] = new int[n];
int arr2[] = new int[n];
for(int i=0; i<n; i++) {
arr1[i] = sc.nextInt();
}
for(int i=0; i<n; i++) {
arr2[i] = sc.nextInt();
}
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
map[i][j] = ' ';
}
}
for(int i=0; i<arr1.length; i++) {
String temp = Integer.toBinaryString(arr1[i]);
for(int j = 0; j<temp.length() ; j++){
if(temp.charAt(j) == '1'){
map[i][temp.length()-1-j] = '#';
}
}
}
for(int i=0; i<arr2.length; i++) {
String temp = Integer.toBinaryString(arr2[i]);
for(int j = 0; j<temp.length() ; j++){
if(temp.charAt(j) == '1'){
map[i][temp.length()-1-j] = '#';
}
}
}
for(int i=0; i<n; i++) {
for(int j=n-1; j>=0; j--) {
System.out.print(map[i][j]);
}
System.out.println();
}
}
}
package codingdojang;
import java.util.Scanner;
public class ex151 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); sc.nextLine();
char map[][] = new char[n][n];
int arr1[] = new int[n];
int arr2[] = new int[n];
for(int i=0; i<n; i++) {
arr1[i] = sc.nextInt();
}
for(int i=0; i<n; i++) {
arr2[i] = sc.nextInt();
}
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
map[i][j] = ' ';
}
}
for(int i=0; i<arr1.length; i++) {
String temp = Integer.toBinaryString(arr1[i]);
for(int j = 0; j<temp.length() ; j++){
if(temp.charAt(j) == '1'){
map[i][temp.length()-1-j] = '#';
}
}
}
for(int i=0; i<arr2.length; i++) {
String temp = Integer.toBinaryString(arr2[i]);
for(int j = 0; j<temp.length() ; j++){
if(temp.charAt(j) == '1'){
map[i][temp.length()-1-j] = '#';
}
}
}
for(int i=0; i<n; i++) {
for(int j=n-1; j>=0; j--) {
System.out.print(map[i][j]);
}
System.out.println();
}
}
}
/*
네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다.
그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다.
다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.
지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 “공백”(“ “) 또는 “벽”(“#”) 두 종류로 이루어져 있다.
전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다.
각각 “지도 1”과 “지도 2”라고 하자.
지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다.
지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다.
“지도 1”과 “지도 2”는 각각 정수 배열로 암호화되어 있다.
암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다.
네오가 프로도의 비상금을 손에 넣을 수 있도록, 비밀지도의 암호를 해독하는 작업을 도와줄 프로그램을 작성하라.
//입력 형식
입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.
1 ≦ n ≦ 16
arr1, arr2는 길이 n인 정수 배열로 주어진다.
정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2^n - 1을 만족한다.
출력 형식
원래의 비밀지도를 해독하여 "#", 공백으로 구성된 문자열 배열로 출력하라.
입출력 예제
*/
import java.util.Scanner;
import javax.swing.plaf.synth.SynthSpinnerUI;
class Solution {
public static void main(String args[]) throws Exception {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 배열 수 입력
int [] arr1 = new int[n];
int [] arr2 = new int[n]; // 배열 두 개 생성
int [][] binaryNumofArr1 = new int[n][n];
int [][] binaryNumofArr2 = new int[n][n];
char [][] finalMap = new char[n][n];
for ( int i = 0; i < n; i++) { // arr1 원소 입력
arr1[i] = sc.nextInt();
}
for ( int i = 0; i < n; i++) { // arr2 원소 입력
arr2[i] = sc.nextInt();
}
for ( int i = 0; i < n; i++) {
for (int j = n -1; j >= 0; j--) {
binaryNumofArr1[i][j] = arr1[i] % 2;
arr1[i] = arr1[i] / 2;
System.out.print(binaryNumofArr1[i][j]);
}System.out.println(" ");
}
System.out.println(" ========================================== ");
for ( int i = 0; i < n; i++) {
for (int j = n-1; j >= 0; j--) {
binaryNumofArr2[i][j] = arr2[i] % 2;
arr2[i] = arr2[i] / 2;
System.out.print(binaryNumofArr2[i][j]);
}System.out.println(" ");
}
for ( int i = 0; i < n; i++) {
for ( int j = 0; j < n; j++) {
if (binaryNumofArr1[i][j] == 1 || binaryNumofArr2[i][j] == 1) {
finalMap[i][j] = '#';
}
else {
finalMap[i][j] = ' ';
}
}
}
for ( int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(finalMap[i][j]);
}
System.out.print(',' + " ");
}
}
}
/*
n 5
arr1 [9, 20, 28, 18, 11]
arr2 [30, 1, 21, 17, 28]
출력 ["#####","# # #", "### #", "# ##", "#####"]
*/
파이썬
n = 5
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28]
answer = ["#####", "# # #", "### #", "# ##", "#####"]
def decoder(n, arr1, arr2):
tempArr = []
for i in range(n):
tempArr.append(bin(arr1[i] | arr2[i])[2:])
tempArr[i] = tempArr[i].replace('0', ' ').replace('1', '#')
print(tempArr)
decoder(n, arr1, arr2)
# KAKAO 3번째 문제
N = 5
ARR1 = [9, 20, 28, 18, 11]
ARR2 = [30, 1, 21, 17, 28]
COMBINED = ARR1.zip(ARR2)
def decode_set(set)
codes, first, second = [], set[0], set[1]
N.times do
code = first % 2 + second % 2
first /= 2
second /= 2
if code.zero?
codes.prepend " "
else
codes.prepend "#"
end
end
codes
end
@result = []
COMBINED.each do |set|
@result << decode_set(set)
end
puts @result.to_s
C
char b;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
b = ((arr1[i] | arr2[i]) & (1<<(n-1-j))) ? '*' : ' ';
printf("%c",b);
}
printf("\n");
}
문법도 간단하고 속도도 빠른 비트연산 만세! ('ㅅ')/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr1 = {9, 20, 28, 18, 11};
int[] arr2 = {30, 1, 21, 17, 28};
getSecret(5, arr1, arr2);
int[] arr3 = {46, 33, 33 ,22, 31, 50};
int[] arr4 = {27 ,56, 19, 14, 14, 10};
getSecret(6, arr3, arr4);
}
public static void getSecret(int n, int[] arr1, int[] arr2){
String[] result = new String[n];
String tmp = "";
for(int i=0;i<n; i++){
String n1 = checkLength(Integer.toBinaryString(arr1[i]),n);
String n2 = checkLength(Integer.toBinaryString(arr2[i]),n);
for(int j=0; j<n; j++){
int c1 = Integer.parseInt(String.valueOf(n1.charAt(j)));
int c2 = Integer.parseInt(String.valueOf(n2.charAt(j)));
if(c1 == 0 && c2 == 0)
tmp += " ";
else
tmp += "#";
}
result[i] = tmp;
tmp = "";
}
for(int k=0; k<result.length; k++){
System.out.print(result[k]+", ");
}
}
public static String checkLength(String value, int n){
String str = "";
if(value.length() >= n)
return value;
else{
for(int l=0; l<(n-value.length()); l++){
str+="0";
}
str+=value;
}
return str;
}
-- 이런 문제 내는것도 대단하다~~
public class SecureMap {
private String divide(int val, int size) {
StringBuilder sb = new StringBuilder();
for (int j = size - 1; j >= 0; j--) {
if (val == 0) {
sb.append("-");
} else if (val == 1) {
sb.append("#");
} else {
int rest = val % 2;
sb.append(rest == 1 ? "#" : "-");
}
val /= 2;
}
return sb.toString();
}
public String[] findMap(int[] a, int[] b) {
int size = a.length;
String[] result = new String[size];
for (int i = 0; i < size; i++) {
String tempA = divide(a[i], size);
String tempB = divide(b[i], size);
result[i] = "";
for (int j = tempA.length() - 1; j >= 0; j--) {
if (tempA.charAt(j) == '#' || tempB.charAt(j) == '#') {
result[i] += "#";
} else {
result[i] += "-";
}
}
}
return result;
}
public static void main(String[] args) {
int[] a = new int[]{46, 33, 33, 22, 31, 50};
int[] b = new int[]{27, 56, 19, 14, 14, 10};
SecureMap secureMap = new SecureMap();
String[] result = secureMap.findMap(a, b);
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
}
a = int(input())
b = list(input().split())
b = list(map(int, b))
c = list(input().split())
c = list(map(int, c))
d = []
for i in range(a):
d.append(bin(b[i] | c[i]))
d[i] = d[i].replace("0b", "")
d[i] = d[i].replace("1", "#")
d[i] = d[i].replace("0", " ")
Javascript (ECMA3), Internet Explorer 6 에서 사용 가능한 Code 입니다...
// polyfill
Array.prototype.fill = Array.prototype.fill ? Array.prototype.fill : function (value) {
for (var i = 0, m = this.length; i < this; i++) {
this[i] = value;
}
return this;
};
function getMap(count, array1, array2) {
// validation of parameters
if (typeof count !== 'number' || isNaN(count)) {
throw new TypeError('1st parameter is required as number type');
}
if (1 > count || count > 16) {
throw new Error('count is not proper');
}
var isArray = function (value) {
return Object.prototype.toString.call(value) === '[object Array]';
};
if (!isArray(array1) || !isArray(array2)) {
throw new TypeError('2nd and 3rd parameters are required as array type');
}
if (array1.length !== count || array2.length !== count) {
throw new Error('2nd and 3rd parameters are invalid caused by 1st parameter validation');
}
// end of validation
var returnArray = [];
var padding = new Array(count).fill(0).join('');
for (var i = 0; i < count; i++) {
var value = (Number(array1[i].toString(2)) + Number(array2[i].toString(2))).toString();
value = padding.substr(value.length) + value;
returnArray.push(value.replace(/[0]/gm, ' ').replace(/[1,2]/gm, '#'));
}
return returnArray;
}
alert(getMap(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28]));
alert(getMap(6, [46, 33, 33, 22, 31, 50], [27, 56, 19, 14, 14, 10]));
(ns secret.core)
(defn to-digits
[n b]
(loop [n n
digits ()]
(if (pos? n)
(recur (quot n b)
(conj digits (mod n b)))
digits)))
(defn padding [seq size]
(let [cnt (count seq)
fill-size (- size cnt)]
(concat (repeat fill-size 0) seq)))
(defn secret [n arr1 arr2]
(->> [arr1 arr2]
(apply map (fn [x y]
(-> (bit-or x y)
(to-digits 2)
(padding n)
(->> (map #(if (zero? %) \space \#))
(apply str)))))))
(let [n 5
arr1 [9, 20, 28, 18, 11]
arr2 [30, 1, 21, 17, 28]]
(secret n arr1 arr2))
;=> ("#####" "# # #" "### #" "# ##" "#####")
(let [n 6
arr1 [46, 33, 33 ,22, 31, 50]
arr2 [27 ,56, 19, 14, 14, 10]]
(secret n arr1 arr2))
;=> ("######" "### #" "## ##" " #### " " #####" "### # ")
def miro(n, arr1, arr2):
temp1, temp2 = [], []
answer = ['' for i in range(n)]
for i in arr1:
temp = len(bin(i)[2:]) < n and ('0' * (n-len(bin(i)[2:]))) + bin(i)[2:] or bin(i)[2:]
temp1.append(temp)
for i in arr2:
temp = len(bin(i)[2:]) < n and ('0' * (n-len(bin(i)[2:]))) + bin(i)[2:] or bin(i)[2:]
temp2.append(temp)
for i in range(n):
for j in range(n):
if temp1[i][j] == '0' and temp2[i][j] == '0':
answer[i] += ' '
else:
answer[i] += '#'
return answer
while True:
try:
n = int(input('input N: '))
if isinstance(n, int) and n < 17:
break
else:
print('16이하의 자연수를 입력하세요')
except ValueError:
print('16이하의 자연수를 입력하세요')
def input_arr(n, arr):
temp = 0
for i in range(n):
while True:
try :
temp = int(input(str(i + 1) + '번 째 원소: '))
except ValueError:
print('0이상 ' + str(2 ** n - 1) + ' 이하의 정수를 입력하세요')
if isinstance(temp, int) and (temp < (2 ** n )):
break
else:
print('0이상 ' + str(2 ** n - 1) + ' 이하의 정수를 입력하세요')
arr.append(temp)
def bin_match(num1, num2):
result = str()
num1_bin = bin(num1)[2:].zfill(5)
num2_bin = bin(num2)[2:].zfill(5)
for i in range(5):
if num1_bin[i] == str(1) or num2_bin[i] == str(1):
result += '#'
else:
result += ' '
print(result)
print('Input arr1: ')
arr1 = []
input_arr(n, arr1)
print('Input arr2: ')
arr2 = []
input_arr(n, arr2)
for i in range(n):
bin_match(arr1[i], arr2[i])
#include<stdio.h>
void bin (int num, int *p);
int n;
int main(void)
{
int arr1[16], arr2[16], i, j;
int compare1[16], compare2[16];
char _char[16][16];
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", arr1 +i);
for(i = 0; i < n; i++)
scanf("%d", arr2 +i);
for( i = 0; i < n; i++)
{
bin(arr1[i], compare1);
bin(arr2[i], compare2);
for(j =0; j < n; j++)
if(compare1[j]||compare2[j])
_char[i][j] = '#';
else
_char[i][j] = ' ';
}
for(i = 0; i < n; i++)
{
for( j = 0; j < n; j++)
printf("%c ", _char[i][j]);
printf("\n");
}
return 0;
}
void bin (int num, int *p)
{
int i, j;
for(i = n-1; i >= 0 ; i--)
{
p[i] = num %2;
num /= 2;
}
}
package CodingDojang;
import java.util.Scanner;
import java.util.Random;
public class test1 {
public static void printResult(int n, int [] A, int [] B, String [] R ){
// print 함수
System.out.println("입력된 한 변의 크기 : " + n);
System.out.print("arr1의 값들 : ");
for(int i = 0; i < A.length; i++){
System.out.print(A[i] + " ");
}
System.out.println();
System.out.print("arr2의 값들 : ");
for(int i = 0; i < B.length; i++){
System.out.print(B[i] + " ");
}
System.out.println();
System.out.print("암호 결과 : [");
for(int j = 0; j < R.length; j++){
System.out.print("\"");
for(int i = 0; i < R.length; i++){
System.out.print(R[j].charAt(i));
}
System.out.print("\"");
}
System.out.print("]");
}
public static void main(String args[]){
int x = 1, n; // 정수배열의 각 원소들의 상한(x), 한 변의 크기(n)
int [] arr1, arr2; // 지도 1, 2
String [] map1, map2, result; //
Scanner input = new Scanner(System.in);
Random rand = new Random();
while(true){
System.out.print("지도 한 변의 크기 : ");
n = input.nextInt();
if(n < 1 || n > 16){
System.out.println("지도 한 변의 크기는 1보다 크거나 같고 16보다는 작거나 같아야합니다.");
} // 지도 한 변의 크기를 만족 못하는 경우 다시 입력
else{
arr1 = new int[n];
arr2 = new int[n];
map1 = new String[n];
map2 = new String[n];
result = new String[n];
break; // 지도 한 변의 크기를 만족하는 경우 지도들의 크기 정의
}
}
for(int i = n; i > 0; i--){
x = x*2;
} // x의 최대상한 계산
for(int i = 0; i < n; i++){
arr1[i] = rand.nextInt(x);
arr2[i] = rand.nextInt(x);
} // 각 지도에 범위에 맞는 값(암호)삽입
for(int i = 0; i < n; i++){
map1[i] = "";
map2[i] = "";
int temp1 = arr1[i], temp2 = arr2[i];
for(int j = x; j > 0; j = j/2){
// 큰 범위의 진수부터 계산
if(temp1 < j && temp1 >= j/2){ // 만약 해당하는 범위라면
map1[i] += "#";
if(j !=1)
temp1 = temp1 % (j/2); // #표시와 함께 나머지값을 temp1에 반환
}
else map1[i] += " ";
if(temp2 < j && temp2 >= j/2){
map2[i] += "#";
if(j != 1)
temp2 = temp2 % (j/2); // map1과 마찬가지
}
else map2[i] += " ";
}
} // 각각의 지도의 암호를 푸는 과정
for(int i = 0 ; i < n; i++){
result[i] = "";
for(int j = 0; j < n; j++){
if( map1[i].charAt(j) == '#' || map2[i].charAt(j) == '#'){
result[i] += "#";
// 만약 각 지도의 자리에 #이 있다면 결과에도 #을 표시
}
else result[i] += " "; // 그렇지 않다면 공백
}
}
printResult(n, arr1, arr2, result); // print
input.close();
}
}
출력값을 기대값과 동일한지 check하는 루틴을 추가하였습니다. 구현내용은 def showmap(n, arr1, arr2)함수를 참고하세요
inputs = [{"n":5, "arr1":[9,20,28,18,11], "arr2":[30,1,21,17,28], "result":["#####","# # #", "### #", "# ##", "#####"]},
{"n":6, "arr1":[46,33,33,22,31,50], "arr2":[27,56,19,14,14,10], "result":["######", "### #", "## ##", " #### ", " #####", "### # "]}]
def showmap(n, arr1, arr2):
result = []
for i in range(len(arr1)):
result.append("{0:b}".format(arr1[i] | arr2[i]).zfill(n).replace("0", " ").replace("1", "#"))
return result
for input in inputs:
assert(input["result"] == showmap(input["n"], input["arr1"], input["arr2"]))
def miro(n, arr1, arr2):
return [bin(arr1[i] | arr2[i])[2:].replace("1", "#").replace('0', ' ') for i in range(5)]
##비밀지도
def decimal2binary(n, decimal_num):
"""Convert decimal number to binary number"""
binary = ""
while decimal_num != 1:
binary = str(decimal_num % 2) + binary
decimal_num = int(decimal_num / 2)
binary = "1" + binary
while len(binary) != n:
binary = "0" + binary
return binary
def map_reader(n, arr1, arr2):
"""n = # of rows, arr1 & arr2 refers to decimal lists"""
arr1_binary = [decimal2binary(n, elem) for elem in arr1]
arr2_binary = [decimal2binary(n, elem) for elem in arr2]
result_list = []
for i in range(n):
result_text = ""
for j in range(n):
if arr1_binary[i][j] == "1" or arr2_binary[i][j] == "1":
result_text += "#"
else:
result_text += " "
result_list.append(result_text)
return result_list
파이썬 3.6
def numtobin(arr):
arr_bin,arr_map,maplist,x = [],[],[],0
for num in arr:# 배열안의 수들을 2진수로 변환
x = num
if num == 1:
arr_bin.append(num)
while x//2 != 0 :
arr_bin.append(x%2)
x = x // 2
if x // 2 == 1:
arr_bin.append(x%2)
arr_bin.append(x//2)
break
if len(arr_bin) < n:
for i in range(len(arr)-len(arr_bin)):
arr_bin.append(0)
arr_bin.reverse()
maplist.append(arr_bin)
arr_bin, arr_map = [],[]
return maplist
def main(map_case):
result,tmp = [],""
for arr in arr_list:
map_case.append(numtobin(arr))
for case in zip(map_case[0],map_case[1]): # 두 가지 맵 배열을 각 행별로 비교하여 비밀지도 배열 완성
for i in range(len(case[0])):
if case[0][i] == 0 and case[1][i] == 0:
tmp += ' '
else:
tmp += '#'
result.append(tmp)
tmp = ""
print("n =%d"%n)
print("arr1 =",arr_list[0])
print("arr2 =",arr_list[1],"\n")
print(result)
if __name__ == "__main__":
n = 5
arr_list = [[9, 20, 28, 18, 11],[30, 1, 21, 17, 28]]
# arr_list = [[46, 33, 33 ,22, 31, 50],[27 ,56, 19, 14, 14, 10]]
map_case =[]
main(map_case)
n =5
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28]
['#####', '# # #', '### #', '# ##', '#####']
n =6
arr1 = [46, 33, 33, 22, 31, 50]
arr2 = [27, 56, 19, 14, 14, 10]
['######', '### #', '## ##', ' #### ', ' #####', '### # ']
class Program
{
static void Main(string[] args)
{
int[] arr1 = { 9,20,28,18,11};
int[] arr2 = { 30,1,21,17,28};
Hiddenmap hdm = new Hiddenmap(arr1);
Hiddenmap hdm2 = new Hiddenmap(arr2);
for (int i = 0; i < hdm.FinalResulter().Length; i++)
Console.WriteLine(hdm.FinalResulter()[i]);
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
for (int i = 0; i < hdm2.FinalResulter().Length; i++)
Console.WriteLine(hdm2.FinalResulter()[i]);
Console.WriteLine();
Console.WriteLine();
Console.WriteLine();
for (int i=0;i<arr1.Length;i++)
{
strcompare(hdm.FinalResulter()[i], hdm2.FinalResulter()[i]);
}
}
public static void strcompare(string str1,string str2)
{
string result="";
for(int i = 0; i < str1.Length; i++)
{
if(str1[i] == str2[i])
{
result += str1[i];
}
else if(str1[i] == '#')
{
result += str1[i];
}
else if (str2[i] == '#')
{
result += str2[i];
}
}
Console.WriteLine(result);
}
}
class Hiddenmap
{
public int[] arr;
public Hiddenmap(int[] arr)
{
this.arr = arr;
}
public string[] FinalResulter()
{
string[] finalcodearr = new string[arr.Length];
int primenum1 = 0;
int settingnum = 0;
for (int i = 0; i < arr.Length; i++)
{
if (i == 0)
primenum1 = arr[i];
if (arr[i] > primenum1)
primenum1 = arr[i];
}
while(Math.Pow(2,settingnum) - 1 <= primenum1)
{
settingnum++;
}
for (int i = 0; i < arr.Length; i++)
{
finalcodearr[i] = this.converter(settingnum, arr[i]);
}
return finalcodearr;
}
public string converter(int n, int num)
{
string result = "";
string ReverseResult = "";
for (int i = 0; i < n; i++)
{
if (num >= 1)
{
if (num % 2 == 1)
result += "#";
else
result += "0";
num = num / 2;
}
else
{
result += "0";
}
}
for (int i = result.Length - 1; i > -1; i--)
ReverseResult += result[i];
return ReverseResult;
}
}
internal string[] PrintSecretMapBitControl(int n, int[] arr1, int[] arr2)
{
var outputs = new string[n];
for (var i = 0; i < n; i++)
{
var curr = arr1[i] | arr2[i];
var temp = Convert.ToString(curr, 2);
temp = temp.Replace("0", " ").Replace("1", "#");
outputs[i] = temp;
}
return outputs;
}
n = 5
inputs1 = [23,17,22, 11]
inputs2 = [3,26,29,30]
output = list()
for j in range(0,len(inputs1)):
ret = ''
num = inputs1[j] | inputs2[j]
for i in range(0,n):
if num % 2 == 0 :ret = ' ' + ret
else: ret = '#' + ret
num = int(num / 2)
output.append(ret)
print(output)
# 파이썬
sample1 = (5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
sample2 = (6, [46, 33, 33, 22, 31, 50], [27, 56, 19, 14, 14, 10])
input_sample = sample2
def draw_map(n, arr1, arr2):
line_s = []
for t in range(n):
c1 = arr1[t]
c2 = arr2[t]
line = ''
m = 2**(n-1)
for _ in range(n):
if c1 >= m or c2 >= m:
line += '#'
if c1 >= m: c1 -= m
if c2 >= m: c2 -= m
m /= 2
else:
line += '_'
m /= 2
line_s.append(line)
for m in line_s:
print(m)
return line_s
print(draw_map(input_sample[0], input_sample[1], input_sample[2]))
def treasuremap(n,arr1, arr2):
def decode(n, arr):
l = list()
for i in arr:
a = list()
for j in range(n):
if i%2 == 1:
a.append('#')
else:
a.append(' ')
i = i//2
a.reverse()
l.append(a)
return l
map1 = decode(n, arr1)
map2 = decode(n, arr2)
result = list()
for i in range(n):
b = list()
for j in range(n):
if map1[i][j] == ' ' and map2[i][j] == ' ':
b.append(' ')
else:
b.append('#')
result.append(b)
return result
a = int(input())
l1 = list(map(int, input("공백으로 수를 구분하시오 :").split(' ')))
l2 = list(map(int, input("공백으로 수를 구분하시오 :").split(' ')))
for i in treasuremap(a, l1, l2):
print(i)
package solr.example.solr.example;
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List;
public class MapCalcu {
public static void main(String[]args) throws Exception{
final int RANDOM = 100;
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
List<String> result = new ArrayList<String>();
System.out.println("Input");
int n = Integer.valueOf(br.readLine());
if(n>16||n<1) {
System.out.println("Retry");
return;
}
int [] arr1 = new int[n];
int [] arr2 = new int[n];
for(int i=0; i<n;i++) {
int value = (int)(Math.random()*RANDOM)+1;
arr1[i]=value;
for(int j=0;j<i;j++) {
if(arr1[j] == arr1[i]) {
--i;
}
}
}
for(int i=0; i<n;i++) {
int value = (int)(Math.random()*RANDOM)+1;
arr2[i] = value;
for(int j=0;j<i;j++) {
if(arr2[j] == arr2[i]) {
--i;
}
}
}
//end for
for(int i=0;i<n;i++) {
String wall = "";
String one = Integer.toBinaryString(arr1[i]);
String two = Integer.toBinaryString(arr2[i]);
char[] ones = one.toCharArray();
char[] twos = two.toCharArray();
for(char o:ones) {
if(o == '1') {
wall+="#";
}else {
for(char t:twos) {
if(t == '0') {
wall+=" ";
}else {
wall+="#";
}
}//end twos
}
}//end ones
result.add(wall);
}//end n for
System.out.println("N="+n);
for(int i:arr1) {
System.out.print(i+" ");
}
System.out.println();
for(int j:arr2) {
System.out.print(j+" ");
}
System.out.println();
System.out.println("결과="+result.toString());
}
}
def secretMap(n, arr1, arr2):
for i in range(n):
print(str(bin(arr1[i]|arr2[i]))[2:].zfill(n).replace("1","#").replace("0"," "))
secretMap(5 , [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
secretMap(6 , [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10])
(function run(n, arr1, arr2) {
function split(element) {
let list = [];
while(element !== 0) {
if(element % 2 == 1)
list.unshift(1);
else
list.unshift(0);
element = parseInt(element / 2);
}
while(list.length < n)
list.unshift(0);
return list;
};
function join(arr1, arr2) {
let result = []
, tmp = [];
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr1[i].length; j++) {
if((arr1[i][j] || arr2[i][j]) === 0)
tmp.push(' ');
else
tmp.push('#');
}
result.push(tmp)
tmp = [];
}
return result;
}
let binary_arr1 = new Array()
, binary_arr2 = new Array()
if (n < 0 && n > 16 && arr1.length !== n && arr2.length !== n)
return;
arr1.map((element) => binary_arr1.push(split(element)));
arr2.map((element) => binary_arr2.push(split(element)));
return join(binary_arr1, binary_arr2)
})();
받은 요소 하나를 2진수로 나누어 저장합니다.
두 요소를 합쳐서 '#' 혹은 ' '으로 복호화 합니다.
def test(n):
n = int(n)
d = []
arr1 = str(input("arr1 배열 입력 : ")).split(",")
arr2 = str(input("arr2 배열 입력 : ")).split(",")
for i in range(n):
arr1[i] = str("{0:0>" + str(n) + "}").format(str(bin(int(arr1[i]))).split("0b")[-1])
arr2[i] = str("{0:0>" + str(n) + "}").format(str(bin(int(arr2[i]))).split("0b")[-1])
for k in range(n):
s = ""
# print(arr1[k])
for l in range(n):
if arr1[k][l] == "1" or arr2[k][l] == "1":
s += "#"
else:
s += " "
d.append(s)
print(d)
if __name__ == "__main__":
test(input("n의 값 입력 : "))
def decrypt_map(n, map1,map2):
result = [0 for i in range(n)]
for i in range(n):
result[i] = map1[i] | map2[i]
return result
def print_map(n, map1):
for i in range(n):
for s in bin(map1[i]):
if s == '1':
print("#", end = "")
elif s == '0' :
print(" ", end = "")
print("")
print("")
#해독함수
def decrypt(n, arr1, arr2):
decrypted_map1 = decrypt_map(n, arr1,arr2)
print_map(n, decrypted_map1)
decrypt(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
decrypt(6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10])
def solvemap(n, arr1, arr2):
map1 = [bin(x)[2:] for x in arr1]
for scan in map1:
if len(scan) != n:
map1[map1.index(scan)] = '0'*(n-len(scan)) + scan
map2 = [bin(x)[2:] for x in arr2]
for scan in map2:
if len(scan) != n:
map2[map2.index(scan)] = '0'*(n-len(scan)) + scan
summap = list(zip(map1, map2))
finalmap = ['' for y in range(n)]
for f, s in summap:
for making in range(n):
if int(f[making]) or int(s[making]):
finalmap[summap.index((f, s))] = finalmap[summap.index((f, s))] + '#'
else: finalmap[summap.index((f, s))] = finalmap[summap.index((f, s))] + ' '
return finalmap
아래 코드를 더하면 지도가 프린트됩니다{.python}
maps = solvemap(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
for printing in maps:
print(printing)
#include<iostream>
using namespace std;
int main()
{
int iArr1[] = { 9, 20, 28, 18, 11 };
int iArr2[] = { 30, 1, 21, 17, 28 };
int n = 5;
int array[5][5];
int devide;
for(int i = 0; i < n; i++)
{
iArr1[i] |= iArr2[i];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
devide = iArr1[i] % 2;
iArr1[i] /= 2;
array[i][j] = devide;
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
(array[i][4 - j] == 0) ? cout << " " : cout << "#";
}
cout << endl;
}
}
def s_bin(n):
return bin(n)[2:].replace('1', '#').replace('0', ' ')
n = int(input("n: "))
arr1 = list(map(int,input("arr1: ").split(",")))
arr2 = list(map(int,input("arr2: ").split(",")))
s_arr = [arr1[i] | arr2[i] for i in range(n)]
print(list(map(s_bin, s_arr)))
object Main extends App {
def binary(x:Int):String = {
x match {
case 0 => "0"
case 1 => "1"
case _ => binary(x/2) + (x%2).toString
}
}
def fitLength(n:Int, x:String) = "0"*(n-x.length) + x
def findMoney(n:Int, arr1:Array[Int], arr2:Array[Int]):List[String] = {
var ansMap:List[String] = List.empty[String]
val findMap = arr1.map(binary(_)).map(fitLength(n, _)).zip(arr2.map(binary(_)).map(fitLength(n, _)))
var str = ""
for((x, y) <- findMap){
str = ""
for(i <- 0 until x.length){
if(x(i) == y(i) && x(i) == '0'){
str += " "
} else str += "#"
}
ansMap = ansMap :+ str
}
ansMap
}
println(findMoney(5, Array(9, 20, 28, 18, 11), Array(30, 1, 21, 17, 28)))
println(findMoney(6, Array(46, 33, 33, 22, 31, 50), Array(27, 56, 19, 14, 14, 10)))
}
def secret(n,arr1,arr2):
if n < 1 or n > 16 :
return "insert the right number"
else :
mylist = []
for i,j in zip(arr1,arr2) :
bini = str(bin(i))[2:] if len(str(bin(i))[2:]) == n else '0' * (n-len(str(bin(i))[2:])) + str(bin(i))[2:]
binj = str(bin(j))[2:] if len(str(bin(j))[2:]) == n else '0' * (n-len(str(bin(j))[2:])) + str(bin(j))[2:]
new = []
for a,b in zip(bini, binj):
if a == b == '0' : new.append(' ')
else : new.append('#')
news = ''.join(new)
mylist.append(news)
return mylist
print(secret(5,[9,20,28,18,11],[30,1,21,17,28]))
print(secret(6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10]))
public void Test2()
{
const int sqr = 5;
int[] mapCode1 = new int[sqr] { 9, 20, 28, 18, 11 };
int[] mapCode2 = new int[sqr] { 30, 1, 21, 17, 28 };
string[] resultMap = new string[sqr] { "", "", "", "", "", };
for (int i = 0; i < sqr; i++)
{
mapCode1[i] = mapCode1[i] | mapCode2[i];
resultMap[i] = Convert.ToString(Convert.ToUInt32(mapCode1[i]), 2);
resultMap[i] = resultMap[i].Replace("0", " ");
resultMap[i] = resultMap[i].Replace("1", "#");
Console.WriteLine("Result map. Line {0} : {1}", (i + 1).ToString(), resultMap[i]);
}
Console.ReadKey();
}
// 자바입니다
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
int[] arr1 = {46, 33, 33 ,22, 31, 50};
int[] arr2 = {27 ,56, 19, 14, 14, 10};
String[] str = new String[t];
String[] str2 = new String[t];
for (int i=0; i<t; i++) {
String a = Integer.toBinaryString(arr1[i]);
String b = Integer.toBinaryString(arr2[i]);
if (a.length() != t) { // 자바만 그런가 앞에 0처리를 못해서 t자리 될 때까지 앞에 0붙여줌
String tmp = new StringBuffer(a).reverse().toString();
while (tmp.length() != t) {
tmp += "0";
}
a = new StringBuffer(tmp).reverse().toString();
}
if (b.length() != t) {
String tmp = new StringBuffer(b).reverse().toString();
while (tmp.length() != t) {
tmp += "0";
}
b = new StringBuffer(tmp).reverse().toString();
}
str[i] = a;
str2[i] = b;
}
System.out.print("[");
for (int i=0; i<t; i++) {
System.out.print("\"");
for (int j=0; j<t; j++) {
int a = Integer.parseInt(str[i].charAt(j) + "") + Integer.parseInt(str2[i].charAt(j) + "");
if (a == 2 || a == 1) System.out.print("#");
else if (a == 0) System.out.print(" ");
}
System.out.print(i != t-1 ? "\", " : "\"]");
}
} // 배열 입력받기 귀찮아서 걍 이클립스에 쳤어요. 잘 동작하네요
Python
def Map(n, arr1, arr2):
for i, j in zip(arr1, arr2):
a = i | j
print(*["#" if k == "1" else " " for k in str(bin(a))[2:]])
print()
Map(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
Map(6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10])
def binary(num):
a = num
result = ''
while a > 0:
a, b = divmod(a,2)
result = str(b)+result
return result
def key(n, arr1, arr2):
if not(1<= n <= 16): raise 'n의 크기가 잘못 되었습니다'
for i in range(n):
if not(0 <= arr1[i] <= 2**n-1): raise 'arr1 정수 크기가 잘못 되었습니다'
arr1[i] = [int(j) for j in binary(arr1[i])]
while len(arr1[i]) < n: arr1[i] = [0]+arr1[i]
for i in range(n):
if not(0 <= arr2[i] <= 2**n-1): raise 'arr2 정수 크기가 잘못 되었습니다'
arr2[i] = [int(j) for j in binary(arr2[i])]
while len(arr2[i]) < n: arr2[i] = [0]+arr2[i]
for i in range(n):
for j in range(n):
if arr1[i][j] + arr2[i][j] > 0: arr1[i][j] = '#'
else: arr1[i][j] = ' '
for i in range(n):
arr1[i] = ''.join(arr1[i])
return arr1
grid = 5
ar1 = [9, 20, 28, 18, 11]
ar2 = [30, 1, 21, 17, 28]
print(key(grid,ar1,ar2))
int nSize = 0;
int nNumberOfCases = 0;
cout << "한변의 크기를 정해주세요 : "; cin >> nSize; cout << endl;
nNumberOfCases = pow(2, nSize);
int *nArrFir = new int[nSize];
int *nArrSec = new int[nSize];
int *nArrRes = new int[nSize];
fill_n(nArrFir, nSize, 0);
fill_n(nArrSec, nSize, 0);
fill_n(nArrRes, nSize, 0);
cout << "First Array에 0 ~ " << nNumberOfCases << "의 숫자 " << nSize << "가지 입력해 주세요." << endl;
for (int i = 0; i < nSize; i++)
{
cout << "[" << i + 1 << "] : ";
cin >> nArrFir[i];
if (nArrFir[i] > nNumberOfCases)
{
cout << "입력 범위를 초과하였습니다. 다시 입력해주세요." << endl;
i--;
}
}
cout << endl;
cout << "Second Array에 0 ~ " << nNumberOfCases << "의 숫자 " << nSize << "가지 입력해 주세요." << endl;
for (int i = 0; i < nSize; i++)
{
cout << "[" << i + 1 << "] : ";
cin >> nArrSec[i];
if (nArrSec[i] > nNumberOfCases)
{
cout << "입력 범위를 초과하였습니다. 다시 입력해주세요." << endl;
i--;
}
}
cout << endl;
for (int i = 0; i < nSize; i++)
{
nArrRes[i] = nArrFir[i] | nArrSec[i];
}
cout << "RESULT" << endl;
string strMap = "";
for (int i = 0; i < nSize; i++)
{
strMap = "";
for (int j = 0; j < nSize; j++)
{
int nCheck = nArrRes[i] & (0x01 << j);
if (nCheck == (0x01 << j))
strMap = "#" + strMap;
else
strMap = " " + strMap;
}
cout << strMap << endl;
}
public class Javatutorial {
public static void main(String[] args) {
int n = 5;
int[] arr1 = {9, 20, 28, 18, 11};
int[] arr2 = {30, 1, 21, 17, 28};
StringBuilder map = new StringBuilder();
for (int i = 0; i < n; i++) {
int x = arr1[i] | arr2[i];
for (int j = 1 << (n - 1); j > 0; j /= 2) {
map.append(x >= j ? "#":" ");
x %= j;
}
map.append("\n");
}
System.out.println(map);
}
}
파이썬 3
def special_plus(s1, s2):
result = ""
for i in range(len(s1)):
if s1[i] == "0" and s2[i] == "0":
result += " "
else:
result += "#"
return result
n = 5
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28]
arr1_ = [bin(i)[2:].zfill(n) for i in arr1]
arr2_ = [bin(i)[2:].zfill(n) for i in arr2]
arr12_ = [special_plus(arr1_[i], arr2_[i]) for i in range(n)]
print(arr1_)
print(arr2_)
print(arr12_)
결과
['01001', '10100', '11100', '10010', '01011']
['11110', '00001', '10101', '10001', '11100']
['#####', '# # #', '### #', '# ##', '#####']
public class KaKaoTest {
private static final int[] map1 = {46, 33, 33, 22, 31, 50};
private static final int[] map2 = {27, 56, 19, 14, 14, 10};
private static final char LINE = '\n';
public static void main(String[] args) {
StringBuilder builder = new StringBuilder();
for ( int i=0, len=map1.length; i<len; i++ ) {
String binaryString = Integer.toBinaryString(map1[i] | map2[i]).replace("1", "#").replace("0", " ");
if ( binaryString.length() != len ) {
builder.append(' ');
}
builder.append(binaryString).append(LINE);
}
System.out.println(builder);
}
}
import java.util.Scanner;
public class secret_map {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("n을 입력해주세요.");
int n = scanner.nextInt();
int[][] map1 = new int[n][n];
int[][] map2 = new int[n][n];
String[][] map1xmap2 = new String[n][n];
//map1 구성
for (int i=0; i<n; i++) {
System.out.println("arr1" + i + " 행을 입력해주세요.");
int temp = scanner.nextInt();
for (int j=n-1; j>=0; j--) {
double a = Math.pow(2, j);
if(temp>=a) {
map1[i][n-j-1] = 1;
temp -= a;
} else {
map1[i][n-j-1] = 0;
}
}
}
//map1 구성
//map2 구성
for (int i=0; i<n; i++) {
System.out.println("arr2" + i + " 행을 입력해주세요.");
int temp = scanner.nextInt();
for (int j=n-1; j>=0; j--) {
double a = Math.pow(2, j);
if(temp>=a) {
map2[i][n-j-1] = 1;
temp -= a;
} else {
map2[i][n-j-1] = 0;
}
}
}
//map2 구성
//map1xmap2구성
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
map1xmap2[i][j] = String.valueOf(map1[i][j] | map2[i][j]);
if(map1xmap2[i][j].equals("1")) {
map1xmap2[i][j]="#";
} else {
map1xmap2[i][j]=" ";
}
}
}
//map1xmap2구성
//출력
System.out.print("[");
for(int i=0; i<n; i++) {
System.out.print("\"");
for(int j=0; j<n; j++) {
System.out.print(map1xmap2[i][j]);
}
System.out.print("\",");
}
System.out.print("]");
//출력
}
}
n = 5
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28]
value = []
for i in range(n):
a1 = bin(arr1[i])[2:].zfill(n)
a2 = bin(arr2[i])[2:].zfill(n)
v = ''
for j in range(n):
if a1[j] == '1' or a2[j] == '1':
v = v + '#'
else:
v = v + ' '
value.append(v)
print(value)
class Question1 {
// 1. 비밀 지도(난이도: 하)
static func execute(_ n : Int,
_ arr1: [Int],
_ arr2: [Int]) -> [String]{
var mapData = [String]()
for idx in 0..<n {
let xor = String(arr1[idx] | arr2[idx], radix: 2)
var binary = xor.map{ char -> String in
if char == "1" {
return "#"
} else {
return " "
}}.joined()
if binary.count < n {
binary = " " + binary
}
mapData.append(binary)
}
return mapData
}
static func test01() -> Bool {
let arr1 = [9,20,28,18,11]
let arr2 = [30,1,21,17,28]
let result = ["#####","# # #", "### #", "# ##", "#####"]
return execute(5, arr1, arr2) == result
}
static func test02() -> Bool {
let arr1 = [46, 33, 33 ,22, 31, 50]
let arr2 = [27 ,56, 19, 14, 14, 10]
let result = ["######", "### #", "## ##", " #### ", " #####", "### # "]
return execute(6, arr1, arr2) == result
}
static func testAll() -> Bool {
return test01() && test02()
}
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void program(int arr[], int num,vector<char>&iv);
void wrapper(vector<char>&iv, vector<char>&iv2);
int main(void)
{
int num;
cin >> num;
vector<char> cv;
vector<char>cv2;
int arr[5] = { 9,20,28,18,11 };
program(arr, num,cv);
int arr2[5] = { 30,1,21,17,28 };
program(arr2, num, cv2);
wrapper(cv, cv2);
for (int i = 0; i < cv.size(); i++)
{
cout << cv[i];
}
cout << endl;
}
void wrapper(vector<char>&iv, vector<char>&iv2)
{
for (int i = 0; i < iv.size(); i++) {
if (iv[i] == '#'|| iv2[i] == '#')iv[i] = '#';
}
}
void program(int arr[], int num,vector<char>&iv)
{
for (int j = 0; j < 5; j++)
{
iv.push_back('"');
for (int i = 0; i < 5; i++)
{
if (arr[j] % 2 != 0) {
iv.push_back('1');
}
else {
iv.push_back('0');
}
arr[j] = arr[j] / 2;
}
iv.push_back('"');
iv.push_back(',');
}
for (vector<char>::iterator itr = iv.begin(); itr < iv.end(); itr++)
{
if (*itr == '1') {
*itr = '#';
}
else if(*itr=='0') {
*itr =' ';
}
}
}
def bina(mp,n):
l = len(bin(mp)[2:])
return ''.join(list(map(lambda x : '#' if x == '1' else ' ',('' if l == n else '0'*(n-l)) + bin(mp)[2:])))
def comp(mp1,mp2):
mp = ''
for x in zip(mp1,mp2):
if x == (' ',' '):
mp += ' '
else:
mp += '#'
return mp
def maps(n,mp1,mp2):
maps = []
for x in range(n):
maps.append(comp(bina(mp1[x],n),bina(mp2[x],n)))
return maps
def Treasure(len, arr1, arr2):
for i in range(len):
arr1[i] = (bin(arr1[i]|arr2[i])[2:]).zfill(len).replace('1','#').replace('0',' ')
print(arr1)
Treasure(6,[46,33,33,22,31,50],[27,56,19,14,14,10])
n = int(input())
arr1 = list(map(int, input().split()))
arr2 = list(map(int, input().split()))
if n < 1 or n > 16:
raise Exception('too large')
if len(arr1) != n or len(arr2) != n:
raise Exception("not in range")
def secret_map(arr1, arr2, n):
arr_bin1 = []
arr_bin2 = []
for i in arr1:
x = bin(i)[2:]
arr_bin1.append(list(x.zfill(n)))
for i in arr2:
x = bin(i)[2:]
arr_bin2.append(list(x.zfill(n)))
return arr_bin1, arr_bin2
def is_wall(arr1, arr2):
result = []
for i in range(len(arr1)):
temp = ''
for j in range(len(arr2)):
if arr1[i][j] == '1' or arr2[i][j] == '1':
temp += '#'
else:
temp += ' '
result.append(temp)
return result
x, y = secret_map(arr1, arr2, n)
print(is_wall(x, y))
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, j, n, *arr1, *arr2;
scanf("%d", &n);
if (n<1||16<n) return -1;
arr1 = (int *)malloc(sizeof(int)*n);
arr2 = (int *)malloc(sizeof(int)*n);
if (!(arr1 && arr2)) return -1;
for(i = 0; i < n; i++) scanf("%d", arr1+i);
for(i = 0; i < n; i++) scanf("%d", arr2+i);
for(i = 0; i < n; i++) {
arr1[i] |= arr2[i];
for(j = n-1; j >= 0; j--)
printf("%c", arr1[i]&(1<<j)?'#':' ');
printf("\n");
}
free(arr1);
free(arr2);
return 0;
}
public class 비밀지도 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
Scanner scan2 = new Scanner(System.in);
int[] arr1_int = Arrays.stream(scan2.nextLine().split(", ")).mapToInt(Integer::valueOf).toArray();
int[] arr2_int = Arrays.stream(scan2.nextLine().split(", ")).mapToInt(Integer::valueOf).toArray();
ArrayList<StringBuffer> 출력 = new ArrayList<StringBuffer>();
for(int i=0; i<n; i++) {
int a = Integer.parseInt(Integer.toBinaryString(arr1_int[i]))+Integer.parseInt(Integer.toBinaryString(arr2_int[i]));
StringBuffer bf = new StringBuffer();
bf.append("\"");
for(int j =0;; j++) {
if(a==0) {
break;
}
if(a%10==0) {
bf.append(" ");
a=a/10;
}
else {
bf.append("#");
a=a/10;
}
}
bf.append("\"");
출력.add(bf.reverse());
}
System.out.println(출력);
}
}
n=int(input("0이상 16이하의 n을 입력하십시오: "))
arr1=list(map(int,input("[배열1]숫자를 연속해서 입력하십시오: ").split(",")))
arr2=list(map(int,input("[배열2]숫자를 연속해서 입력하십시오: ").split(",")))
def change(n): #십진법으로 표현된 수를 이진법으로 변환시켜주는 함수
d="01"
q,r=divmod(n,2)
if q==0:
return d[r]
else:
return change(q)+d[r]
lst1,lst2=[],[]
for num1 in arr1: #arr1에 담긴 n개의 숫자에 대해 이진법으로 변환
bn=change(num1)
while len(bn)<n: #이진법으로 변환시킨 수의 길이가 n보다 작으면
bn="0"+bn #그 길이가 n이 될 때까지 앞에 0을 붙인다.(ex)n:5, num1: 6 -> 110 -> 00110)
lst1.append(bn)
for num2 in arr2:
bn2=change(num2)
while len(bn2)<n:
bn2="0"+bn2
lst2.append(bn2)
#print(lst1)
#print(lst2)
elst=[]
for i in range(len(lst1)):
num=int(lst1[i])+int(lst2[i]) #두 리스트에 있는 변환된 이진법의 수를 더 함(ex) 01001+11110=12111)
if len(str(num))<len(lst1[i]): #만약 변환된 이진수 둘 다 0으로 시작할 경우, 정수로 변환 시 앞의 0이 사라지므로,
num="0"+str(num) #더한 결과의 길이가 원본 이진수의 길이보다 작을 경우 앞에 0을 추가
nlst=list(map(str,str(num)))
for i in range(len(nlst)):
if int(nlst[i])>0: #합한 이진수의 결과에서 각 자리에 있는 수가 0보다 클 경우 "#"으로
nlst[i]="#"
else:
nlst[i]=" " #그렇지 않을 경우 " "(공백)으로 변환
elst.append("".join(nlst))
print(elst)
결과
n =5
arr1 = 9, 20, 28, 18, 11
arr2 = 30, 1, 21, 17, 28
['#####', '# # #', '### #', '# ##', '#####']
n =6
arr1 = 46, 33, 33, 22, 31, 50
arr2 = 27, 56, 19, 14, 14, 10
['######', '### #', '## ##', ' #### ', ' #####', '### # ']
n = int(input("1~16 : "))
arr1 = []
arr2 = []
for i in range(n):
arr1.append(int(input()))
for i in range(n):
arr2.append(int(input()))
arr1_bin =[]
arr2_bin =[]
for i in arr1 :
Bin = bin(i)
Bin = Bin[2:]
arr1_bin.append(Bin)
for j in arr2:
Bin = bin(j)
Bin =Bin[2:]
arr2_bin.append(Bin)
print(arr1_bin)
print(arr2_bin)
count = 0
result_list =[]
i = 0
while count < n:
result = ""
if len(arr1_bin[i]) > len(arr2_bin[i]) :
temp = ((len(arr1_bin[i]) - len(arr2_bin[i]))) * '0' + arr2_bin[i]
temp1 = arr1_bin[i]
elif len(arr1_bin[i]) < len(arr2_bin[i]) :
temp = ((len(arr2_bin[i]) - len(arr1_bin[i]))) * '0' + arr1_bin[i]
temp1 = arr2_bin[i]
else :
temp = arr2_bin[i]
temp1 = arr1_bin[i]
for j in range(len(temp)):
if temp[j] == '1' or temp1[j] == '1':
result += "#"
else :
result += " "
result_list.append(result)
i = i+1
count +=1
print(result_list)
# 지도1과 2는 랜덤으로 생성하게 하였습니다
# 좀 더 간단한 방법이 있을텐데 라인이 길어진것 같습니다 ㅠ
import random
def get_bin_array(nn):
arr=[]
for i in range (0,nn):
a=random.randint(0,2**nn-1)
print (a,' ',end='')
j=0
b=[]
while(j<nn):
b.append(a%2)
a=a//2
j=j+1
b.reverse()
arr.append(b)
print()
return arr
def print_arr(x):
print()
for i in range (0,n):
for j in range (0,n):
if x[i][j]==1:
print('#',end='')
else:
print(' ',end='')
print()
def print_arr_two(x,y):
print()
for i in range (0,n):
for j in range (0,n):
if (x[i][j] + y[i][j]) ==0:
print(' ',end='')
else:
print('#',end='')
print()
n=int(input('비밀지도의 크기를 입력하세요....'))
print()
arr1=[]
print('arr1 = ',end='')
arr1=get_bin_array(n)
print(arr1)
print()
arr2=[]
print('arr2 = ',end='')
arr2=get_bin_array(n)
print(arr2)
print_arr(arr1)
print_arr(arr2)
print_arr_two(arr1,arr2)
def SM(m1, m2):
output = []
arr = [format(a1 | a2, 'b') for a1, a2 in zip(m1, m2)]
mapping = {'1': '#', '0': ' '}
for s in arr:
for key, replacement in mapping.items():
s = s.replace(key, replacement)
output.append(s)
return output
if __name__ == '__main__':
print(SM([9, 20, 28, 18, 11], [30, 1, 21, 17, 28]))
n = int(input())
arr1 = [9, 20, 28, 18, 11]
arr2 = [30, 1, 21, 17, 28]
arr1ref = []
arr2ref = []
arrfinal = []
for i in arr1:
arr1ref.append(bin(i)[2::].zfill(n))
for i in arr2:
arr2ref.append(bin(i)[2::].zfill(n))
for i in range(0,n):
for k in range(0,n):
arrfinal.append(int(arr1ref[i][k]) + int(arr2ref[i][k]))
result = [arrfinal[i * n:(i + 1) * n] for i in range((len(arrfinal) + n - 1) // n )]
print(result)
for i in range(0,n):
for k in range(0,n):
if result[i][k] >= 1:
result[i][k] = '#'
else:
result[i][k] = ' '
print(result)
def binary_sum(n, arr1, arr2):
v_list=[]
for i in range(n):
v_str=''
b_val=bin(arr1[i]|arr2[i])[2:]
cnt=len(b_val)
while cnt<n:
v_str+=' '
cnt+=1
for j in range(len(b_val)):
if b_val[j]=='1':v_str+='#'
else:v_str+=' '
v_list.append(v_str)
return v_list
if __name__ == "__main__":
print(binary_sum(5,[9, 20, 28, 18, 11],[30, 1, 21, 17, 28]))
print(binary_sum(6,[46, 33, 33 ,22, 31, 50],[27 ,56, 19, 14, 14, 10]))
package Test;
public class Test2 {
public static void main(String[] args) {
int[] arr1 = {46, 33, 33 ,22, 31, 50};
int[] arr2 = {27 ,56, 19, 14, 14, 10};
int n = 6;
String[] map1 = new String[arr1.length];
String[] map2 = new String[arr2.length];
String[] result = new String[arr1.length];
for(int a = 0; a < arr1.length; a++) {
map1[a] = IntToBinary(arr1[a],n);
map2[a] = IntToBinary(arr2[a],n);
}
for(int a = 0; a < map1.length; a++) {
result[a] = mergeString(map1[a],map2[a]);
}
for(String x : result) System.out.print(x +",");
}
public static String IntToBinary(int a, int n) {
String temp = Integer.toBinaryString(a);
while(temp.length() < n) {
String zero = "0";
temp = zero.concat(temp);
}
return temp;
}
public static String mergeString(String input1, String input2) {
StringBuilder result = new StringBuilder();
for(int i = 0; i < input1.length(); i++) {
if(input1.charAt(i) == input2.charAt(i)) {
if(input1.charAt(i) == '0') result.append(" ");
else result.append("#");
} else {
result.append("#");
}
}
return result.toString();
}
}
def secretMap(n, arr1, arr2):
temp1 = [bin(i)[2:].zfill(n) for i in arr1]
temp2 = [bin(i)[2:].zfill(n) for i in arr2]
result = []
for i in range(n):
temp = ''
for k in range(n):
if int(temp1[i][k]) or int(temp2[i][k]):
temp += '#'
if not(int(temp1[i][k]) or int(temp2[i][k])):
temp += ' '
result.append(temp)
print(result)
secretMap(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
secretMap(6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10])
def binary(number):
for_answer=[]
while number:
for_answer.append(number%2)
number=int(number/2)
for_answer.reverse()
for_answer=[str(x) for x in for_answer]
return "".join(for_answer)
def treasure_map(n,arr1,arr2):
array=[[' ']*n for i in range(n)]
for_answer=[]
for i in range(0,n,1):
bin1=binary(arr1[i])
binxx=bin1.replace('1','#')
binx=binxx.replace('0',' ')
bin2=binary(arr2[i])
binyy=bin2.replace('1','#')
biny=binyy.replace('0',' ')
len1=len(bin1)
len2=len(bin2)
for j in range(-1,-len1-1,-1):
if array[i][-j-1]==' ':
array[i][-j-1]=binx[j]
for k in range(-1,-len2-1,-1):
if array[i][-k-1]==' ':
array[i][-k-1]=biny[k]
array[i].reverse()
array[i]=[str(x) for x in array[i]]
array[i]=''.join(array[i])
for_answer.append(array[i])
return for_answer
def main():
n=int(input(""))
arr1=input("")
arrx=arr1.split(' ')
arrx=[int(x) for x in arrx]
arr2=input("")
arry=arr2.split(' ')
arry=[int(x) for x in arry]
print(treasure_map(n,arrx,arry))
main()
def merger(first, second, n):
arr1 = [(n-len(str(bin(i))[2:]))*'0'+str(bin(i))[2:] for i in first]
arr2 = [(n-len(str(bin(i))[2:]))*'0'+str(bin(i))[2:] for i in second]
mergedarr = ['']*n
for i in range(n):
for j in range(n):
mergedarr[i] += '#' if arr1[i][j]=='1' or arr2[i][j]=='1' else ' '
return mergedarr
a=[46, 33, 33 ,22, 31, 50]
b=[27 ,56, 19, 14, 14, 10]
n=6
print(merger(a, b, n))
# 이진수로 변환
def convert(n):
result = ''
while True:
q, r = divmod(n, 2)
result = str(r) + result
n = q
if q == 0:
break
return result
def secret_map(n, arr1, arr2):
new_arr1 = [convert(i).zfill(n) for i in arr1]
new_arr2 = [convert(j).rjust(n, '0') for j in arr2]
for i in range(n):
for j in range(n):
if new_arr1[i][j] == '0' and new_arr2[i][j] == '0':
print(' ', sep='', end='')
else:
print('#', sep='', end='')
print()
secret_map(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])
secret_map(6, [46, 33, 33, 22, 31, 50], [27, 56, 19, 14, 14, 10])
def secret_map(arr1,arr2,n):
q=[]
w=[]
z=[]
t=[]
for i in arr1:
a = int(bin(i)[2:])
q.append(a)
for j in arr2:
b = int(bin(j)[2:])
w.append(b)
for a in range(len(arr1)):
z.append(q[a]+w[a])
for i in z:
r = str(i)
p=''
for v in range(len(r)):
if r[v]=='1' or r[v]=='2':
p+="#"
else:
p+='0'
if len(p)<n:
for i in range(n-len(p)):
a = p.split()
a.insert(i,' ')
p = ''.join(a)
t.append(p)
for i in range(len(t)):
t[i] = t[i].replace('0',' ')
print(t)
arr1 = [46, 33, 33 ,22, 31, 50]
arr2 = [27 ,56, 19, 14, 14, 10]
secret_map(arr1,arr2,6)
['######', '### #', '## ##', ' #### ', ' #####', '### # ']
def smap(n,a,b):
if 1<=n<=16 :
a1 = ""
b1 = ''
for a,b in zip(a,b):
a1 += f'{bin(a)[2:]:0>{n}} '
b1 += f'{bin(b)[2:]:0>{n}} '
l= []
e = ''
for i in range(n):
for i2 in range(n):
if a1.split()[i][i2]=='0' and b1.split()[i][i2]=='0': e +=' '
else : e += '#'
l.append(e)
e = ''
return l
else : return '1<=n<=16'
n = 6
a =[46, 33, 33 ,22, 31, 50]
b =[27 ,56, 19, 14, 14, 10]
print(smap(n,a,b))
def binary(num):
result = []
num_temp = int(num)
while num_temp >= 2 :
result.append(num_temp%2)
num_temp = num_temp // 2
result.append(num_temp)
result.reverse()
return result
def array_generation(n):
array = []
for i in range(1, n+1):
array_input = int(input('input array {} : '.format(i)) )
if array_input >= 0 and array_input <= (2**n -1):
array.append(array_input)
else:
print('ERROR : invalid input')
exit()
return array
def translation_array(_list):
result = []
for member in _list:
_temp = binary(member)
for i in range(len(_list) - len(_temp)):
_temp.insert(0, 0)
result_temp = []
for member1 in _temp:
if member1 == 1:
result_temp.append('#')
else:
result_temp.append(' ')
result.append(''.join(result_temp))
return result
def array_comparison(array1, array2):
n = len(array1)
result = []
for i in range(n):
result_temp = []
for j in range(n):
if array1[i][j] == '#' or array2[i][j] == '#':
result_temp.append('#')
elif array1[i][j] == ' ' and array2[i][j] == ' ':
result_temp.append(' ')
result.append(''.join(result_temp))
return result
if __name__ == '__main__':
n = int(input('Type n (between 1 and 16) : '))
if n >=1 and n <=16:
array1 = translation_array(array_generation(n))
array2 = translation_array(array_generation(n))
print(array_comparison(array1, array2))
else:
print('ERROR : invalid range of n (1 ~ 16)')
exit()
#codingdojing_secret_map_re
'''
1. n을 정수로 입력받는다.
2. arr1, arr2를 입력받는다. ex) 9, 20, 28, 10, 11 형식
3. 숫자만 남긴다.
4. zip해서 bit연산 |
5. 2진법 숫자로 변환 후, 1은 #, 0은 공백으로 변환
'''
import sys
n = eval(input('n: '))
arr1 = list(map(eval,input('arr1: ').split(',')))
arr2 = list(map(eval,input('arr2: ').split(',')))
if len(arr1) != n and len(arr1) != n:
print('input error')
sys.exit()
else:
result = [a|b for a,b in zip(arr1, arr2)]
##tranlate to binary num.
secret_map = []
for i in result:
secret_map.append(bin(i)[2:].zfill(n).translate(str.maketrans('10', '# ')))
print(secret_map)
def Sol (a,b):
arr=[]
for i in range(len(a)):
if int(a[i])+int(b[i])==0:
arr.append(' ')
else:
arr.append('#')
return "".join(arr)
while True:
n = int(input("비밀지도의 변의 길이:"))
if n>=1 and n<=16:
break
arr1=[]
arr2=[]
arr = "".join(['0' for i in range(n)])
for i in range(n):
while True:
print("첫번째 지도의 ",i+1,"번째")
x=int(input("원소를 입력하시오"))
if x>=0 and x<=2**n -1 :
a = arr+bin(x)[2:]
arr1.append(a[-n:])
break
for k in range(n):
while True:
print("두번째 지도의 ",k+1,"번째")
x=int(input("원소를 입력하시오"))
if x>=0 and x<=2**n -1 :
a = arr+bin(x)[2:]
arr2.append(a[-n:])
break
result = []
for j in range(len(arr1)):
result.append(Sol(arr1[j],arr2[j]))
print(result)
using System;
using System.Collections.Generic;
namespace solution
{
class Program
{
static void Main(string[] args)
{
int n = 5;
int[] arr1 = new int[] { 9, 20, 28, 18, 11 };
int[] arr2 = new int[] { 30, 1, 21, 17, 28 };
//int n = 6;
//int[] arr1 = new int[] { 46, 33, 33, 22, 31, 50 };
//int[] arr2 = new int[] { 27, 56, 19, 14, 14, 10 };
var map = makeMap(arr1, arr2, n);
Console.WriteLine("\n\t [\"{0}\"]", string.Join("\", \"", map));
}
private static List<string> makeMap(int[] arr1, int[] arr2, int n)
{
List<string> mapLst = new List<string>();
string str = "";
int row = arr1.Length;
for (int r = 0; r < row; r++)
{
str = "";
string str1 = int.Parse(Convert.ToString(arr1[r], 2)).ToString("D"+n.ToString());
string str2 = int.Parse(Convert.ToString(arr2[r], 2)).ToString("D" + n.ToString());
for (int c = 0; c < n; c++)
{
str += (str1[c] == '0' && str2[c] == '0') ? " " : "#";
}
mapLst.Add(str);
}
return mapLst;
}
}
}