# 13601 - Ultimate caesar salad
>author: Utin
###### tags: `ASCII`
---
## Brief
See the code below
## Solution 0
```c=
#include <stdio.h>
//Hint: 注意char的範圍
int is_lower(int c);
int is_upper(int c);
int both_upper(int a, int b);
int both_lower(int a, int b);
int upper_correct(int c);
int lower_correct(int c);
int main() {
int ans;
char a[6], b[6], c[6];
scanf("%s", a);
scanf("%s", b);
scanf("%s", c);
for(int i = 0; i < 5; i ++) {
if(both_upper(a[i], b[i]) || both_lower(a[i], b[i])) {
ans = c[i] + b[i] - a[i];
if(is_lower(c[i])) ans = lower_correct(ans);
else ans = upper_correct(ans);
printf("%c", ans);
}
else {
if(is_lower(a[i])) ans = c[i] + (b[i] + 32) - a[i];
else ans = c[i] + (b[i] - 32) - a[i];
if(is_lower(c[i])) ans = upper_correct(ans-32);
else ans = lower_correct(ans+32);
printf("%c", ans);
}
}
printf("\n");
}
int is_lower(int c) {
return c >= 'a' && c <= 'z';
}
int is_upper(int c) {
return c >= 'A' && c <= 'Z';
}
int both_upper(int a, int b) {
return is_upper(a) && is_upper(b);
}
int both_lower(int a, int b) {
return is_lower(a) && is_lower(b);
}
int upper_correct(int c) {
if(c > 'Z') return c - 26;
else if(c < 'A') return c + 26;
else return c;
}
int lower_correct(int c) {
if(c > 'z') return c - 26;
else if(c < 'a') return c + 26;
else return c;
}
// By Utin
```
## Reference