## UVA Problem 11713 – Abstract Names Solution

UVA Problem 11713 – Abstract Names Solution:

Solving Technique:

For input of n there will be 2*n lines. Task is to match a pair of lines. The vowels a, e, i, o, u in the strings doesn’t matter. Except these the rest of both strings should match.

That means each character in a index from both strings should match. Their order needs to be same. Except vowels if the match then output is yes. Otherwise the output is no.

Important:  Be sure to add or print a new line after each output unless otherwise specified. The outputs should match exactly because sometimes even a space character causes the answer to be marked as wrong answer. Please compile with c++ compiler as some of my codes are in c and some in c++.

More Inputs of This Problem on uDebug.

Input:

```5
pele
polo
pele
pola
ronaldo
ronaldino
pele
pelet
pele
bele
```

Output:

```Yes
Yes
No
No
No
```

### Code:

```/**
* Author:    Asif Ahmed
* Site:      https://quickgrid.wordpress.com
* Problem:   UVA 11713 - Abstract Names
* Technique: Removing specific characters from string
*            by copying into another string.
*/

#include<stdio.h>
#include<string.h>

#define N 36

static char s[N];
static char t[N];

static char tmpS[N];
static char tmpT[N];

int main(){

int n;

scanf("%d", &n);
getchar();

while( n-- ){

gets(s);
gets(t);

// If their length is not the same then output is no.
if( strlen(s) != strlen(t) ){
printf("No\n");
continue;
}

// Reset memory.
int j = 0, k = 0;
memset(tmpS, 0, sizeof tmpS);
memset(tmpT, 0, sizeof tmpT);

// Remove vowels from the first string.
for(int i = 0; s[i]; ++i){
if(s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u')
continue;
else
tmpS[j++] = s[i];
}

// Remove vowels from the second the string.
for(int i = 0; t[i]; ++i){
if(t[i] == 'a' || t[i] == 'e' || t[i] == 'i' || t[i] == 'o' || t[i] == 'u')
continue;
else
tmpT[k++] = t[i];
}

// After removing the vowels the strings should match.
if( strcmp(tmpS, tmpT) == 0 )
printf("Yes\n");
else
printf("No\n");

}

return 0;
}
```

## UVA Problem 424 – Integer Inquiry Solution

UVA Problem 424 – Integer Inquiry Solution:

Solving Technique:

This problem requires adding integers. The integers are very long, meaning they won’t fit even in long long. So the addition needs to be done using arrays.

It can be solved using integers arrays but my solution uses character array. Code is explained in the comments.

Similar to this problem UVA 10035 Primary Arithmetic and UVA 713 – Adding Reversed Numbers.

Important:  Be sure to add or print a new line after each output unless otherwise specified. The outputs should match exactly because sometimes even a space character causes the answer to be marked as wrong answer. Please compile with c++ compiler as some of my codes are in c and some in c++.

More Inputs of This Problem on uDebug.

Input:

```123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0
```

Output:

```370370367037037036703703703670
```

### Code:

```/**
* Author:    Asif Ahmed
* Site:      https://quickgrid.wordpress.com
* Problem:   UVA 424 - Integer Inquiry
* Technique: Adding Multi String Integer characters column wise
*/

#include<stdio.h>
#include<string.h>

#define N 160

static char s[N][N];
static char output[N];

int main(){

int i = 0;

int maxlen = 0;

// Finish taking all the inputs.
while( gets(s[i]) ){

// Exit for input of 0.
if( s[i][0] == '0' && ! s[i][1] )
break;

int len = strlen( s[i] );

// Get the max length to create padding.
if( len > maxlen )
maxlen = len;

++i;
}

// Save rows
int rows = i;

// Create padding for each of the strings.
for(int j = 0; j < i; ++j){

int temp = strlen( s[j] );

if( temp != maxlen ){

// Shift by this many spaces to create 0's in front.
int padding = maxlen - temp;

for(int k = temp - 1; k >= 0; --k)

for(int k = 0; k < padding; ++k)
s[j][k] = '0';
}
}

int carry = 0, z = 0;

for(int j = maxlen - 1; j >= 0; --j){

int sum = 0;

for(int i = 0; i < rows; ++i)
sum += s[i][j] - '0';

// Add if any previous  carry
sum = sum + carry;

output[z++] = sum % 10 + '0';

// get the carry for adding to next column
carry = sum / 10;

}

// Print if any carry first
if(carry)
printf("%d", carry);

// Then print what ever character is left
for(int i = z - 1; i >= 0; --i){
if(output[i] >= '0' && output[i] <= '9')
printf("%c", output[i]);
}
printf("\n");

return 0;
}
```

## UVA Problem 10035 – Primary Arithmetic Solution

UVA Problem 10035 – Primary Arithmetic Solution:

Solving Technique:

For this problem two integers less than 10 digits are given. The task is to find how many carry operations occur when adding.

This problem may be solved using strings since input integer is less than 10 digits. It can be solved with out using array. My implementation is using character array to add and count carry operations.

Important:  Be sure to add or print a new line after each output unless otherwise specified. The outputs should match exactly because sometimes even a space character causes the answer to be marked as wrong answer. Please compile with c++ compiler as some of my codes are in c and some in c++.

More Inputs of This Problem on uDebug.

Input:

```123 456
555 555
123 594
0 0
```

Output:

```No carry operation.
3 carry operations.
1 carry operation.
```

### Code:

```/**
* Author:    Asif Ahmed
* Site:      https://quickgrid.wordpress.com
* Problem:   UVA 10035 - Primary Arithmetic
*            Making two strings of same length,
*/

#include<stdio.h>
#include<string.h>

#define N 128

static char s[N];
static char t[N];

static char output[N];

int main(){

while( scanf("%s", s) && scanf("%s", t) ){

// Although a major flaw input beginning with 0 and
// two strings matching. But for this problem it doesn't matter.
if( strcmp(s,t) == 0 && s[0] == '0' )
break;

int lens = strlen(s);
int lent = strlen(t);

// Shift each characters in string right by padding length.
if( lens > lent ){

int padding = lens - lent;

for(int i = lent - 1; i >= 0; --i)

for(int i = 0; i < padding; ++i)
t[i] = '0';
}

else if( lens < lent ){

int padding = lent - lens;

for(int i = lens - 1; i >= 0; --i)

for(int i = 0; i < padding; ++i)
s[i] = '0';
}

int maxlen;
if(lens > lent)
maxlen = lens;
else maxlen = lent;

int carry = 0;
int c = 0;
int sum = 0;

// Add two Strings, if a carry operation occurs
// then add that to the count.
for(int i = maxlen - 1; i >= 0; --i){

sum += s[i] - '0' + t[i] - '0';

sum = sum + carry;

carry = sum / 10;

if(carry)
++c;

sum = 0;

}

if(!c)
printf("No carry operation.\n");
else if( c > 1 )
printf("%d carry operations.\n", c);
else
printf("%d carry operation.\n", c);

}

return 0;
}
```