In any case, the interviewer asked me to come up with a function that will take a string of characters and return back the telephone keypad numeric equivalent. I actually sat down at my IDE and banged this bit of code out. I think it handle all cases, and fulfills the request.... Too bad it's a little too late to get that job.
using System;
using System.Collections;
using System.Text;
namespace PhoneLetters
{
class Program
{
static void Main(string[] args)
{
//returns "2223334"
Console.WriteLine(getNumbers("ABCDEFG"));
//returns "222-3334"
Console.WriteLine(getNumbers("ABC-DEFG"));
//returns "1-222-33134"
Console.WriteLine(getNumbers("1-ABC-DE1FG"));
//returns "222-33134&"
Console.WriteLine(getNumbers("ABC-DE1FG&"));
}
static string getNumbers(string letters)
{
StringBuilder sb = new StringBuilder();
foreach (char c in letters.ToUpper())
{
switch (c)
{
case 'A':
case 'B':
case 'C':
sb.Append("2");
break;
case 'D':
case 'E':
case 'F':
sb.Append("3");
break;
case 'G':
case 'H':
case 'I':
sb.Append("4");
break;
case 'J':
case 'K':
case 'L':
sb.Append("5");
break;
case 'M':
case 'N':
case 'O':
sb.Append("6");
break;
case 'P':
case 'Q':
case 'R':
case 'S':
sb.Append("7");
break;
case 'T':
case 'U':
case 'V':
sb.Append("8");
break;
case 'W':
case 'X':
case 'Y':
case 'Z':
sb.Append("9");
break;
default:
sb.Append(c);
break;
}
}
return sb.ToString();
}
}
}
While I understand what interviewers are trying to do, I find it very difficult to whip up code on demand on a white board or over the phone for these made up problems. I guess i should go practice writing code to made up problems without the help of a computer so i can better handle these situations where i need to be able to show that i can indeed write some halfway decent code when i have access to my tools.
2 comments:
Here's another way you might do it. Unfortunately, the stupid ITU E.161 / ISO 9995-8 letter mapping makes what could be an elegant solution all kludgey by putting four letters on 7 and 9. While yours is a cleaner, more practical approach, this is way more fun:
#include <stdio.h>
int main(int argc, char *argv[]){
char *aLetter;
int i;
for(i = 1; i < argc; i++){
printf("%s: ",argv[i]);
aLetter = argv[i];
do{
if((*aLetter >= 'A' && *aLetter <= 'Z') ||
(*aLetter >= 'a' && *aLetter <= 'z')){
*aLetter = toupper(*aLetter);
*aLetter = ((((*aLetter - 'A' - (*aLetter > 'R') - (*aLetter > 'Y')) / 3) + 2) + '0');
}
}while(*(++aLetter));
printf("%s",argv[i]);
if(i < argc - 1) printf("\n");
}
}
Post a Comment