[Google CodeJam] Qualification Round 2012 – Speaking in Tongues

Aquí les dejo la solución del problema “Speaking in Tongues”, pueden ver su enunciado (en inglés) aquí . El problema básicamente trata de que tenemos una lengua llamada “Googlerese”, la cual, tiene las mismas letras que el alfabeto inglés, con la particularidad de que para cada letra del alfabeto, existe un equivalente en la lengua Googlerese. Esas equivalencias tenemos que encontrarlas nosotros con los ejemplos que nos dan.

Haciendo un análisis manual, llegue a encontrar una relación. En el código se pueden notar 2 arreglos:

-Googlerese: Alfabeto Googlerese.

-English: Alfabeto Inglés.

Las posiciones de ambos alfabetos son las correspondientes a su traducción, e.g. La letra ‘k’ del alfabeto Googlerese, es equivalente a la letra ‘i’ del alfabeto inglés.

El objetivo de la solución es traducir una serie de frases (N frases) al inglés.

Aquí les dejo la solución, no la explico mucho porque creo que con un poco de esfuerzo se podra deducir todo lo que hice.

Lo que encuentro que puede causar confusión es la línea que dice “if(word[i]-32)”.  Al escribir la sentencia anterior, es equivalente a que escribiera “if(word[i]==32)”, ya que C++ al evaluar una igualdad resta al parámetro de la izquierda de la igualdad, el parámetro de la derecha, y ese resultado lo compara con cero. Lo comparo con 32 debido a que 32 es el código ASCII equivalente al espacio en blanco (‘ ‘).

Ahora sí, el código de mi solución:

#include
#include

using namespace std;

char Googlerese[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' '};
char English[] = {'y','h','e','s','o','c','v','x','d','u','i','g','l','b','k','r','z','t','n','w','j','p','f','m','a','q',' '};

void speak(string word)
{
for(int i=0; i<word.length(); i++)
{
if(word[i]-32)
cout << English[word[i]-97];
else
cout << " ";
}
cout N;
cin.ignore();
string word;
while(N--)
{
getline(cin,word);
cout << "Case #" << i++ << ": ";
speak(word);
}
return 0;
}
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s