Voy a a hacer un post un poco largo, de modo que los vagos deberían dejar de leer ^^
Estoy haciendo problemas de estos con juez automatico, el problema en el que estoy es el siguiente:
Citar
E. KaniI LanGuAgeE
Por razones que no vienen al caso, se quiere convertir grandes clásicos de la literatura española (El Quijote,Don Juan Tenorio, Teo va al parque, etc. . . ) a un lenguaje más cercano a la juventud de hoy en día.
Así pues, se está pensando en realizar un programa que utilice una serie de reglas de conversión al lenguaje conocido como kaNiI LanGuAgeE.
A continuación explicamos dichas reglas:
1. Se eliminan las haches (excepto ch que se transformará en x).
2. Cuando existan una o más vocales juntas, se convierten en mayúscula las de las posiciones pares, contando
la primera vocal como posición 1.
3. Las consonantes siguen una regla similar, pero no tienen que ser consecutivas para pasarlas a mayúsculas. En
este caso, las consonantes se alternan entre mayúsculas y minúsculas dentro de una misma palabra, empezando por mayúscula. (hola caracola!oLaA KaraKolaA) Por simplicidad se puede considerar consonante todo aquello que no es vocal.
4. Si la palabra acaba en vocal se añade la misma vocal (se sigue aplicando la regla de las mayúsculas (regla 2)) (Primo!PriMoO, vivia !BibiAa).
5. Las c con sonido z (ce, ci) se cambian por z, mientras que el resto se cambian por k.
6. Las b cambian por v y las v por b.
7. Las letras ch cambian por x.
8. Las letras que ya están en mayúscula se mantienen: (HOLA CARACOLA!OLAA KARAKOLAA).
9. Una consonante estará en mayúscula si cumple la regla 3 o si la letra original está en mayúscula. Para el
caso especial de la ch (al sustituirse por x), seguirá la regla tomando en cuenta si la c de la ch original es
mayúscula o no. (revancha!RebaNxaA, rebanCHa!RevaNXaA, reVancHa !ReBaNxaA)
10. Una vocal estará en mayúscula si cumple la regla 2 o si la letra original está en mayúscula. (que ! QuEe, quE!QuEE)
Se recomienda revisar los ejemplos detenidamente para ver como se aplican estas reglas. Y utilizar herramientas como diff para ver con más detalle en qué partes está fallando el programa.
Por simplicidad las frases solo contendrán carácteres de a-z y A-Z y espacios como delimitadores. También, debido al caso especial de la eliminación de la h, no existe ninguna palabra que acabe por h.
Por razones que no vienen al caso, se quiere convertir grandes clásicos de la literatura española (El Quijote,Don Juan Tenorio, Teo va al parque, etc. . . ) a un lenguaje más cercano a la juventud de hoy en día.
Así pues, se está pensando en realizar un programa que utilice una serie de reglas de conversión al lenguaje conocido como kaNiI LanGuAgeE.
A continuación explicamos dichas reglas:
1. Se eliminan las haches (excepto ch que se transformará en x).
2. Cuando existan una o más vocales juntas, se convierten en mayúscula las de las posiciones pares, contando
la primera vocal como posición 1.
3. Las consonantes siguen una regla similar, pero no tienen que ser consecutivas para pasarlas a mayúsculas. En
este caso, las consonantes se alternan entre mayúsculas y minúsculas dentro de una misma palabra, empezando por mayúscula. (hola caracola!oLaA KaraKolaA) Por simplicidad se puede considerar consonante todo aquello que no es vocal.
4. Si la palabra acaba en vocal se añade la misma vocal (se sigue aplicando la regla de las mayúsculas (regla 2)) (Primo!PriMoO, vivia !BibiAa).
5. Las c con sonido z (ce, ci) se cambian por z, mientras que el resto se cambian por k.
6. Las b cambian por v y las v por b.
7. Las letras ch cambian por x.
8. Las letras que ya están en mayúscula se mantienen: (HOLA CARACOLA!OLAA KARAKOLAA).
9. Una consonante estará en mayúscula si cumple la regla 3 o si la letra original está en mayúscula. Para el
caso especial de la ch (al sustituirse por x), seguirá la regla tomando en cuenta si la c de la ch original es
mayúscula o no. (revancha!RebaNxaA, rebanCHa!RevaNXaA, reVancHa !ReBaNxaA)
10. Una vocal estará en mayúscula si cumple la regla 2 o si la letra original está en mayúscula. (que ! QuEe, quE!QuEE)
Se recomienda revisar los ejemplos detenidamente para ver como se aplican estas reglas. Y utilizar herramientas como diff para ver con más detalle en qué partes está fallando el programa.
Por simplicidad las frases solo contendrán carácteres de a-z y A-Z y espacios como delimitadores. También, debido al caso especial de la eliminación de la h, no existe ninguna palabra que acabe por h.
Y te dan ejemplo la entrada:
Citar
No es verdad angel de amor que en esta apartada orilla mas pura la
luna brilla y acaso se respira mejor
En un lugar de la mancha de cuyo nombre no quiero acordarme vivia
Con diez canyones por banda viento en popa a toda vela no corta el
mar sino vuela un velero bergantil aquel pirata el temido
Este es
un ejemplo
mas corto
Para que
podais gastar la
herramienta diff
y os salgan bien
las cosas
ahi es nada
y ahora
unas frases tipicas
si apruebo todas mi madre me
compra la moto
sin ser chula ni vacilona soy tu envidia campeona
luna brilla y acaso se respira mejor
En un lugar de la mancha de cuyo nombre no quiero acordarme vivia
Con diez canyones por banda viento en popa a toda vela no corta el
mar sino vuela un velero bergantil aquel pirata el temido
Este es
un ejemplo
mas corto
Para que
podais gastar la
herramienta diff
y os salgan bien
las cosas
ahi es nada
y ahora
unas frases tipicas
si apruebo todas mi madre me
compra la moto
sin ser chula ni vacilona soy tu envidia campeona
Y la salida:
Citar
NoO eS verdad aNgeL DeE aMor QuEe eN eStaA aParTadaA oRilLaA Mas PuraA LaA
LunaA VriLlaA Y aKasoO SeE ResPiraA MejoR
EN uN LugaR DeE LaA ManXaA DeE KuyoO NomVreE NoO QuIeroO aKorDarMeE BibiAa
Kon DiEz KanYoneS Por VanDaA BiEnToO eN PopaA aA TodaA BelaA NoO KorTaA eL
Mar SinoO BuElaA uN BeleRoO VerGanTil aQuEl PiraTaA eL TemiDoO
ESteE eS
uN eJemPloO
Mas KorToO
ParaA QuEe
PodaIS GasTar LaA
eRraMiEnTaA DifF
Y oS SalGan ViEn
Las KosaS
aIi eS NadaA
Y aORaA
uNas FraSes TipiKas
SiI aPruEVoO TodaS MiI MadReE MeE
KomPraA LaA MotoO
Sin Ser XuLaA NiI BaziLonaA Soy TuU eNbiDiAa KamPeOnaA
LunaA VriLlaA Y aKasoO SeE ResPiraA MejoR
EN uN LugaR DeE LaA ManXaA DeE KuyoO NomVreE NoO QuIeroO aKorDarMeE BibiAa
Kon DiEz KanYoneS Por VanDaA BiEnToO eN PopaA aA TodaA BelaA NoO KorTaA eL
Mar SinoO BuElaA uN BeleRoO VerGanTil aQuEl PiraTaA eL TemiDoO
ESteE eS
uN eJemPloO
Mas KorToO
ParaA QuEe
PodaIS GasTar LaA
eRraMiEnTaA DifF
Y oS SalGan ViEn
Las KosaS
aIi eS NadaA
Y aORaA
uNas FraSes TipiKas
SiI aPruEVoO TodaS MiI MadReE MeE
KomPraA LaA MotoO
Sin Ser XuLaA NiI BaziLonaA Soy TuU eNbiDiAa KamPeOnaA
Total que me pongo a ello y saco este código:
Código
#include <iostream> #include <fstream> #include <sstream> using namespace std; string Traducir(string &e); int main() { ifstream fin("Ekani1.in"); ofstream fout("salida.txt"); string palabra,linea; getline(fin,linea); while (fin.good()) { { stringstream Buffer(linea); unsigned int i = 0; while (Buffer.good()) { while (i < linea.size() && linea[i] == ' ') { fout<<' '; i++; } Buffer>>palabra; i += palabra.size(); fout<<Traducir(palabra); palabra.clear(); } fout<<endl; } getline(fin,linea); } return 0; } inline bool esVocal(char a) { return a == 'a' || a == 'e' || a == 'i' || a == 'o' || a== 'u' || a == 'A' || a == 'E' || a == 'I' ||a == 'O' ||a=='U'; } string Traducir(string &e) { string buffer; int consonante = 1; char letra; if (esVocal(e[e.size()-1])) // Si la ultima es vocal, añadimos una vocal al final e += e[e.size()-1]; for (unsigned int i = 0; i < e.size(); i++) { if (esVocal(e[i])) // es vocal? { buffer += e[i]; // la anyadimos bool mayus = 1; i++; // listamos todas las vocales adyacentes (y las h, ya que son "mudas") while (i < e.size() && (esVocal(e[i]) || e[i] == 'h' || e[i] == 'H')) { if (e[i] == 'h' || e[i] == 'H'){i++; continue;} // las haches se descartan if (mayus == 1) buffer += toupper(e[i]); // si toca mayuscula, anyadimos una mayuscula else buffer += e[i]; // sino, la anyadimos tal cual mayus = !mayus; i++; } i--; continue; } // no es vocal if (e[i] == 'h' || e[i] == 'H') // si es h, se ignora { if (i != 0 && (e[i-1] == 'c' || e[i-1] == 'C')) // si la anterior era una c { if (e[i-1] == 'C') letra = 'X'; // la sustituimos por una X else letra = 'x'; // o x minuscula if (consonante % 2 == 0) // si es una posicion par, toca mayuscula { buffer[buffer.size()-1] = toupper(letra); // cambiamos la ultima posicion consonante = 1; } else buffer[buffer.size()-1] = letra; } continue; } letra = e[i]; // la letra se anyade al final, segun resulte ser mayuscula o minuscula consonante++; // else buffer += e[i]; // if (e[i] == 'b') // sustituir b por v { letra = 'v'; } else if (e[i] == 'B') // sustituir B por V { letra = 'V'; } else if (e[i] == 'v') { letra = 'b'; } else if (e[i] == 'V') { letra = 'B'; } else if (e[i] == 'c' || e[i] == 'C') // las c, por z o por k { if (i+1 < e.size() && (e[i+1] =='e' || e[i+1] == 'E' ||e[i+1] == 'i' || e[i+1] == 'I')) { if (e[i] == 'c') letra = 'z'; else letra = 'Z'; // i++; } else { if (e[i] == 'c') letra = 'k'; else letra = 'K'; } } if (consonante % 2 == 0) // si es una consonante en posicion par { buffer += toupper(letra); // se anyade mayuscula consonante = 0; } else buffer += letra; // se anyade tal cual } return buffer; }
Que me genera una salida identica a la anterior.
Total que lo subo al juez y me marca WRONG ANSWER. Lo he revisado varias veces pero no entiendo que puede fallar