Untitled

 avatar
unknown
c_cpp
2 years ago
1.4 kB
13
Indexable
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char opposite_letter(char c) {
    return 'Z' - (c - 'A');
}

char* Encode(char* input) {
    int len = strlen(input);
    char *encoded = (char *)malloc((len*2 + 1) * sizeof(char));
    int j = 0;
    for (int i = 0; i < len; i++) {
        if ((input[i] - 'A' + 1) % 2 == 0) {
            encoded[j++] = input[i];
            encoded[j++] = opposite_letter(input[i]);
        } else {
            encoded[j++] = opposite_letter(input[i]);
        }
    }
    encoded[j] = '\0';
    return encoded;
}

char* Decode(char* input) {
    int len = strlen(input);
    char *decoded = (char *)malloc((len/2 + 1) * sizeof(char));
    int j = 0;
    for (int i = 0; i < len; i++) {
        if ((input[i] - 'A' + 1) % 2 == 0) {
            if(i+1<len && input[i+1]==opposite_letter(input[i])){
                decoded[j++] = input[i];
                i++;
            }
            else{
                decoded[j++] = opposite_letter(input[i]);
            }
        } else {
            decoded[j++] = opposite_letter(input[i]);
        }
    }
    decoded[j] = '\0';
    return decoded;
}

int main() {
    char* word = "ABC";
    printf("Original: %s\n", word);
    char* encoded = Encode(word);
    printf("Encoded: %s\n", encoded);
    char* decoded = Decode(encoded);
    printf("Decoded: %s\n", decoded);
    free(encoded);
    free(decoded);
    return 0;
}
Editor is loading...