#include <stdio.h>
void encode() {
char c, sep;
int is_first = 1;
while (1) {
// Считываем символ
if (scanf("%c", &c) != 1) {
printf("n/a\n");
return;
}
// Если сразу пришел перенос строки
if (c == '\n') {
if (is_first) printf("\n");
break;
}
// Считываем разделитель (сразу за символом)
int sep_res = scanf("%c", &sep);
if (sep_res != 1) {
sep = '\n'; // Если конец файла, считаем это концом строки
}
// Если после символа идет не пробел и не перенос строки — ошибка формата
if (sep != ' ' && sep != '\n') {
printf("n/a\n");
return;
}
// Если валидация пройдена, печатаем
if (!is_first) printf(" ");
printf("%02X", c);
is_first = 0;
// Если это был перенос строки, завершаем
if (sep == '\n') {
printf("\n");
break;
}
}
}
void decode() {
char c1, c2, sep;
int is_first = 1;
while (1) {
// Считываем первый символ HEX
if (scanf("%c", &c1) != 1) {
printf("n/a\n");
return;
}
if (c1 == '\n') {
if (is_first) printf("\n");
break;
}
// Считываем второй символ HEX
if (scanf("%c", &c2) != 1) {
printf("n/a\n");
return;
}
// HEX должен состоять ровно из двух символов
if (c2 == ' ' || c2 == '\n') {
printf("n/a\n");
return;
}
// Считываем разделитель
int sep_res = scanf("%c", &sep);
if (sep_res != 1) {
sep = '\n';
}
// Разделитель обязан быть пробелом или переносом
if (sep != ' ' && sep != '\n') {
printf("n/a\n");
return;
}
// Переводим HEX в числа
int v1 = -1, v2 = -1;
if (c1 >= '0' && c1 <= '9') v1 = c1 - '0';
else if (c1 >= 'a' && c1 <= 'f') v1 = c1 - 'a' + 10;
else if (c1 >= 'A' && c1 <= 'F') v1 = c1 - 'A' + 10;
if (c2 >= '0' && c2 <= '9') v2 = c2 - '0';
else if (c2 >= 'a' && c2 <= 'f') v2 = c2 - 'a' + 10;
else if (c2 >= 'A' && c2 <= 'F') v2 = c2 - 'A' + 10;
if (v1 == -1 || v2 == -1) {
printf("n/a\n");
return;
}
// Печатаем раскодированный символ
if (!is_first) printf(" ");
printf("%c", v1 * 16 + v2);
is_first = 0;
// Если достигли конца ввода
if (sep == '\n') {
printf("\n");
break;
}
}
}
int main(int argc, char *argv[]) {
// Проверка количества аргументов
if (argc != 2) {
printf("n/a\n");
return 1;
}
// Проверка режима без использования <string.h>
char *arg = argv[1];
if (arg[0] == '0' && arg[1] == '\0') {
encode();
} else if (arg[0] == '1' && arg[1] == '\0') {
decode();
} else {
printf("n/a\n");
}
return 0;
}