q2

🧩 Syntax:
#include <math.h>
#include <stdio.h>

int stringlen(const char* str);
void printError();
int is_space(const char ch);
int is_end_of_input(const char ch);

void encodeLoop();
void decodeLoop();

void encode_and_print(char ch);
int decode(char ch_1, char ch_2, char* decoded);

int hex_char_to_int(char ch);
char int_to_hex_char(int value);

int main(int argc, char** argv) {

    char ch;
    ch = getchar();
    if(ch == EOF) printf("loh");
    // char ch;

    // if(scanf("%2X", &ch))
    // {
    //     printf("loh");
    // }

    // printf("%c", ch);

    // return 0;

    //printf("argc = %d\n", argc);

    // if (argc != 2) {
    //     printf("loh1");
    //     printError();
    //     return 0;
    // }

    // if (stringlen(argv[1]) != 1) {
    //     printf("loh2");
    //     printError();
    //     return 0;
    // }

    //char mode = argv[1][0];
    char mode = '1';

    if (mode == '0') {
        encodeLoop();
    } else if (mode == '1') {
        decodeLoop();
    } else {
        printError();
    }

    return 0;
}

int stringlen(const char* str) {
    int length = 0;

    for (int i = 0; str[i] != '\0'; ++i) {
        ++length;
    }

    return length;
}

int is_space(const char ch) 
{ 
    return ch == ' ' 
        || ch == '\t'
        || ch == '\r'
        || ch == '\v'
        || ch == '\f';
}

int is_end_of_input(const char ch)
{
    return ch == '\n' || ch == EOF;
}

void printError() { printf("n/a"); }

void encodeLoop() {
    int to_read_char = 1;
    char ch;

    while (scanf("%c", &ch) && ch != '\n') {
        if (!to_read_char ^ is_space(ch)) {
            printError();
        }

        if (to_read_char) {
            encode_and_print(ch);
        } else {
            printf(" ");
        }

        to_read_char ^= 1;
    }
}

// void decodeLoop() {
//     char decoded;
//     char ch_1;
//     char ch_2;
//     char ch_3;

//     int to_loop = 1;
//     int to_read_char = 1;

//     while (to_loop) {
//         if (scanf("%c%c%c", &ch_1, &ch_2, &ch_3) != 3) {
//             printError();
//             return;
//         }

//         if(!is_space(ch_3) && ch_3 != '\n') {
//             printError();
//             return;
//         }

//         if (!decode(ch_1, ch_2, &decoded)) {
//             printError();
//             return;
//         }

//         printf("%c ", decoded);

//         if(ch_3 == '\n') {
//             return;
//         }
//     }
// }

char skip_spaces()
{
    char ch;

    do
    {
        ch = getchar();
    } 
    while (!is_end_of_input(ch) && is_space(ch));

    return ch; 
}

void decodeLoop() {

    char ch = skip_spaces();
    int to_read_char = 1;

    while(!is_end_of_input(ch))
    {
        if(to_read_char)
        {
            
        }
    }
}

void encode_and_print(const char ch) {
    printf("%c%c", int_to_hex_char(ch / 16), int_to_hex_char(ch % 16));
}

int decode(const char ch_1, const char ch_2, char* decoded) {
    int row = hex_char_to_int(ch_1);
    int col = hex_char_to_int(ch_2);

    *decoded = row * 16 + col;

    if (row < 0 || col < 0) {
        return 0;
    }

    return 1;
}

int is_valid_hex_char(const char ch) {
    return (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F');
}

int hex_char_to_int(const char ch) {
    if (ch >= '0' && ch <= '9') return ch - '0';
    if (ch >= 'A' && ch <= 'F') return ch - 'A' + 10;

    return -1;
}

char int_to_hex_char(const int value) {
    if(value >= 0 && value <= 9) return '0' + value;
    if(value >= 10 && value <= 15) return 'A' + value - 10;

    return '-';
}