# Subtle Art of De-MOSS-ing

`// Original Code#include <stdio.h>int main() {    int a,b,op,ans;    printf ("Enter first number: ");    scanf("%d", &a);    printf ("Enter second number: ");    scanf("%d", &b);    here:    printf("Choose what you want to do:\n1 for a+b\n2 for a~b\n3 for a*b\n4 for a^b\n");    scanf ("%d", &op);    switch (op) {        case 1: ans = a+b;                break;        case 2: ans = (int) abs(a-b);                break;        case 3: ans = a*b;                break;        case 4: ans = (int) pow(a,b);                break;        default: printf ("\nChoose a Valid Operator\n");                goto here;    }    printf ("The answer is : %d\n", ans);    return 0;}`

# 1. The 0–1 Ruse

`// Declarations made for one = 1 and zero = 0 and used as explained.#include <stdio.h>int main() {    int a,b,op,ans;    printf ("Enter first number: ");    scanf("%d", &a);    int one = 1;    printf ("Enter second number: ");    scanf("%d", &b);    int zero = 0;    here:    printf("Choose what you want to do:\n1 for a+b\n2 for a~b\n3 for a*b\n4 for a^b\n");    scanf ("%d", &op);    switch (op*one) {        case 1: ans = a*one+b + zero;                break;        case 2: ans = (int) abs(a-b*one)+ zero;                break;        case 3: ans = a*one*b+ zero;                break;        case 4: ans = (int) pow(a*one,b)+ zero;                break;        default: printf ("\nChoose a Valid Operator\n");                goto here;    }    printf ("The answer is : %d\n", ans*one + zero);    return 0;}`

# 2. Changing Workflow

`// Code with workflow changed.#include <stdio.h>int main() {    int a;    printf ("Enter first number: ");    scanf("%d", &a);    int b;    printf ("Enter second number: ");    scanf("%d", &b);    int ans;    while (1) {        printf("Choose what you want to do:\n1 for a*b\n2 for a+b\n3 for a^b\n4 for a~b\n");        int op;        int flag = 0;        scanf ("%d", &op);        switch (op) {            case 3: ans = (int) pow(a,b);                    break;            case 1: ans = a*b;                    break;            case 4: ans = (int) abs(a-b);                    break;            case 2: ans = a+b;                    break;            default: printf ("\nChoose a Valid Operator\n");                    flag = 1;        }        if (!flag){            break;        }    }    printf ("The answer is : %d\n", ans);    return 0;}`

# 3. Variable-Array-Vector Triad

`// Variables replaced by single value arrays#include <stdio.h>int main() {    int a,b,op,ans;    printf ("Enter first number: ");    scanf("%d", &a);    printf ("Enter second number: ");    scanf("%d", &b);    here:    printf("Choose what you want to do:\n1 for a+b\n2 for a~b\n3 for a*b\n4 for a^b\n");    scanf ("%d", &op);    switch (op) {        case 1: ans = a+b;                break;        case 2: ans = (int) abs(a-b);                break;        case 3: ans = a*b;                break;        case 4: ans = (int) pow(a,b);                break;        default: printf ("\nChoose a Valid Operator\n");                goto here;    }    printf ("The answer is : %d\n", ans);    return 0;}`

# 4. Altering Datatypes

`/ INT changed to LONG IT#include <stdio.h>int main() {    long int a,b,op,ans;    printf ("Enter first number: ");    scanf("%ld", &a);    printf ("Enter second number: ");    scanf("%ld", &b);    here:    printf("Choose what you want to do:\n1 for a+b\n2 for a~b\n3 for a*b\n4 for a^b\n");    scanf ("%ld", &op);    switch (op) {        case 1: ans = a+b;                break;        case 2: ans = (long int) abs(a-b);                break;        case 3: ans = a*b;                break;        case 4: ans = (long int) pow(a,b);                break;        default: printf ("\nChoose a Valid Operator\n");                goto here;    }    printf ("The answer is : %ld\n", ans);    return 0;}`

# 5. Exploring New Dimensions

`// Modified Code with single point 2D Arrays#include <stdio.h>int main() {    int a,b,op,ans;    printf ("Enter first number: ");    scanf("%d", &a);    printf ("Enter second number: ");    scanf("%d", &b);    here:    printf("Choose what you want to do:\n1 for a+b\n2 for a~b\n3 for a*b\n4 for a^b\n");    scanf ("%d", &op);    switch (op) {        case 1: ans = a+b;                break;        case 2: ans = (int) abs(a-b);                break;        case 3: ans = a*b;                break;        case 4: ans = (int) pow(a,b);                break;        default: printf ("\nChoose a Valid Operator\n");                goto here;    }    printf ("The answer is : %d\n", ans);    return 0;}`

# 6. Modifying Conditions

`// Switch statement changed to if-else-if steps.#include <stdio.h>int main() {    int a,b,op,ans;    printf ("Enter first number: ");    scanf("%d", &a);    printf ("Enter second number: ");    scanf("%d", &b);    here:    printf("Choose what you want to do:\n1 for a+b\n2 for a~b\n3 for a*b\n4 for a^b\n");    scanf ("%d", &op);    if (op == 1)        ans = a+b;    else if (op == 2)        ans = (int) abs(a-b);    else if (op == 3)        ans = a*b;    else if (op == 4)        ans = (int) pow(a,b);    else {        printf ("\nChoose a Valid Operator\n");        goto here;    }    printf ("The answer is : %d\n", ans);    return 0;}`

# 7. Manipulating Loops

`// Infinite while loop changed to an infinite for loop#include <stdio.h>int main() {    int a;    printf ("Enter first number: ");    scanf("%d", &a);    int b;    printf ("Enter second number: ");    scanf("%d", &b);    int ans;    for (int i = 0; ; i++) {        printf("Choose what you want to do:\n1 for a*b\n2 for a+b\n3 for a^b\n4 for a~b\n");        int op;        int flag = 0;        scanf ("%d", &op);        switch (op) {            case 3: ans = (int) pow(a,b);                    break;            case 1: ans = a*b;                    break;            case 4: ans = (int) abs(a-b);                    break;            case 2: ans = a+b;                    break;            default: printf ("\nChoose a Valid Operator\n");                    flag = 1;        }        if (!flag){            break;        }    }    printf ("The answer is : %d\n", ans);    return 0;}`

# 8. Modularity

`// Modular functions added for each operation.#include <stdio.h>int add (int a, int b) {    int c = a+b;    return c;}int difference (int a, int b) {    int c = (int) abs(a-b);    return c;}int product (int a, int b) {    int c = a*b;    return c;}int exponential (int a, int b) {    int c = (int) pow(a,b);    return c;}int main() {    int a,b,op,ans;    printf ("Enter first number: ");    scanf("%d", &a);    printf ("Enter second number: ");    scanf("%d", &b);    here:    printf("Choose what you want to do:\n1 for a+b\n2 for a~b\n3 for a*b\n4 for a^b\n");    scanf ("%d", &op);    switch (op) {        case 1: ans = add(a,b);                break;        case 2: ans = difference(a,b);                break;        case 3: ans = product(a,b);                break;        case 4: ans = exponential(a,b);                break;        default: printf ("\nChoose a Valid Operator\n");                goto here;    }    printf ("The answer is : %d\n", ans);    return 0;}`

# 9. Adding Jargon

`// Entire Mergesort funciton hard coded and added to the original code.#include <stdio.h>void merge(int arr[], int l, int m, int r){    int i, j, k;    int n1 = m - l + 1;    int n2 =  r - m;    int L[n1], R[n2];    for (i = 0; i < n1; i++)        L[i] = arr[l + i];    for (j = 0; j < n2; j++)        R[j] = arr[m + 1+ j];    i = 0; // Initial index of first subarray    j = 0; // Initial index of second subarray    k = l; // Initial index of merged subarray    while (i < n1 && j < n2) {        if (L[i] <= R[j]) {            arr[k] = L[i];            i++;        }        else {            arr[k] = R[j];            j++;        }        k++;    }    while (i < n1) {        arr[k] = L[i];        i++;        k++;    }    while (j < n2) {        arr[k] = R[j];        j++;        k++;    }}void mergeSort(int arr[], int l, int r) {    if (l < r) {        int m = l+(r-l)/2;        mergeSort(arr, l, m);        mergeSort(arr, m+1, r);        merge(arr, l, m, r);    }}void printArray(int A[], int size) {    int i;    for (i=0; i < size; i++)        printf("%d ", A[i]);    printf("\n");}int main() {    int a,b,op,ans;    printf ("Enter first number: ");    scanf("%d", &a);    printf ("Enter second number: ");    scanf("%d", &b);    here:    printf("Choose what you want to do:\n1 for a+b\n2 for a~b\n3 for a*b\n4 for a^b\n");    scanf ("%d", &op);    switch (op) {        case 1: ans = a+b;                break;        case 2: ans = (int) abs(a-b);                break;        case 3: ans = a*b;                break;        case 4: ans = (int) pow(a,b);                break;        default: printf ("\nChoose a Valid Operator\n");                goto here;    }    printf ("The answer is : %d\n", ans);    return 0;}`

--

--