#include <stdio.h>
char code[50][101];
int password[8];
int decode(int);
int main()
{
freopen("input.txt", "r", stdin);
int T, test_case;
int N, M;
int start_line;
int sum;
int tmp;
int res;
int cnt;
int i, j;
scanf("%d", &test_case);
for (T = 1; T <= test_case; ++T)
{
sum = 0;
start_line = -1;
cnt = 0;
scanf("%d %d", &N, &M);
for (i = 0; i < N; ++i)
{
scanf("%s", *(code + i));
if (start_line < 0)
{
for (j = 0; j < M - 49; ++j)
{
if ((*(*(code + i) + j) == '1')) // 1인 숫자를 찾기
{
start_line = i;
break;
}
}
}
}
for (i = 0; i < (M - 8) && (cnt < 8); ++i) // i가 열 idx를 저장
{
tmp = 0;
for (j = i; j < i + 7; ++j) // 7칸 이동함
tmp = (tmp << 1) + (*(*(code + start_line) + j) - '0'); // 해시처럼 본인만의 tmp를 만든 후 -> 예제 문제 힌트 얻음
res = decode(tmp); // decode 함
if (res != -1)
{
password[cnt++] = res;
i += 6; // 7칸 이동후에 검사를 진행함
}
else if ((res == -1) && (cnt > 0))
{
i -= (7*cnt); // 잘 못된 코드를 검사하고 있음, 다시 돌아가서 검사를 진행함
cnt = 0;
}
}
if (((password[0] + password[2] + password[4] + password[6]) * 3 + password[1] + password[3] + password[5] + password[7]) % 10 == 0)
{
for (i = 0; i < 8; ++i)
sum += password[i];
}
printf("#%d %d\n", T, sum);
}
return 0;
}
int decode(int src)
{
switch (src)
{
case 13: return 0;
case 25: return 1;
case 19: return 2;
case 61: return 3;
case 35: return 4;
case 49: return 5;
case 47: return 6;
case 59: return 7;
case 55: return 8;
case 11: return 9;
default: return -1;
}
}
댓글