Run Time: 0.000
Ranking (as of 2016-02-26): 24 out of 396
Language: C++
/* UVa 12364 - In Braille To build using Visual Studio 2012: cl -EHsc -O2 UVa_12364_In_Braille.cpp */ #include <cstdio> const int nr_digits = '9' - '0' + 1, D_max = 100, nr_braille_lines = 3, nr_braille_chars = D_max * 3; char digits[D_max + 1], braille[nr_braille_lines][nr_braille_chars]; const char* braille_numbers[nr_digits][nr_braille_lines] = { {".*", "**", ".."}, {"*.", "..", ".."}, {"*.", "*.", ".."}, {"**", "..", ".."}, {"**", ".*", ".."}, {"*.", ".*", ".."}, {"**", "*.", ".."}, {"**", "**", ".."}, {"*.", "**", ".."}, {".*", "*.", ".."} }; int braille_to_number(int bi) { for (int n = 0; n < nr_digits; n++) { const char** b = braille_numbers[n]; if (braille[0][bi] == b[0][0] && braille[0][bi + 1] == b[0][1] && braille[1][bi] == b[1][0] && braille[1][bi + 1] == b[1][1]) return n; } return -1; } int main() { while (true) { int D; scanf("%d", &D); if (!D) break; getchar(); char sb[8]; gets(sb); if (sb[0] == 'S') { gets(digits); for (int i = 0, k = 0; i < D; i++, k += 3) { const char** b = braille_numbers[digits[i] - '0']; for (int j = 0; j < nr_braille_lines; j++) { braille[j][k] = b[j][0], braille[j][k + 1] = b[j][1]; braille[j][k + 2] = (i < D - 1) ? ' ' : '\0'; } } for (int i = 0; i < nr_braille_lines; i++) puts(braille[i]); } else { for (int i = 0; i < nr_braille_lines; i++) gets(braille[i]); for (int i = 0, j = 0; i < D; i++, j += 3) digits[i] = braille_to_number(j) + '0'; digits[D] = '\0'; puts(digits); } } return 0; }
No comments:
Post a Comment