elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema extraño
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema extraño  (Leído 5,623 veces)
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Problema extraño
« en: 13 Marzo 2014, 12:00 pm »

Buenas.

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.

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

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

Total que me pongo a ello y saco este código:
Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. using namespace std;
  5.  
  6. string Traducir(string &e);
  7.  
  8. int main()
  9. {
  10.    ifstream fin("Ekani1.in");
  11.    ofstream fout("salida.txt");
  12.    string palabra,linea;
  13.    getline(fin,linea);
  14.  
  15.    while (fin.good())
  16.    {
  17.  
  18.        {
  19.            stringstream Buffer(linea);
  20.            unsigned int i = 0;
  21.            while (Buffer.good())
  22.            {
  23.                while (i < linea.size() && linea[i] == ' ')
  24.                {
  25.                    fout<<' ';
  26.                    i++;
  27.                }
  28.  
  29.                Buffer>>palabra;
  30.  
  31.                i += palabra.size();
  32.                fout<<Traducir(palabra);
  33.                palabra.clear();
  34.            }
  35.            fout<<endl;
  36.  
  37.        }
  38.        getline(fin,linea);
  39.    }
  40.  
  41.    return 0;
  42. }
  43.  
  44. inline bool esVocal(char a)
  45. {
  46.    return a == 'a' || a == 'e' || a == 'i' || a == 'o' || a== 'u' || a == 'A' || a == 'E' || a == 'I' ||a == 'O' ||a=='U';
  47. }
  48.  
  49. string Traducir(string &e)
  50. {
  51.    string buffer;
  52.    int consonante = 1;
  53.    char letra;
  54.  
  55.    if (esVocal(e[e.size()-1])) // Si la ultima es vocal, añadimos una vocal al final
  56.        e += e[e.size()-1];
  57.  
  58.    for (unsigned int i = 0; i < e.size(); i++)
  59.    {
  60.        if (esVocal(e[i])) // es vocal?
  61.        {
  62.            buffer += e[i]; // la anyadimos
  63.            bool mayus = 1;
  64.            i++;
  65.  
  66.            // listamos todas las vocales adyacentes (y las h, ya que son "mudas")
  67.  
  68.            while (i < e.size() && (esVocal(e[i]) || e[i] == 'h' || e[i] == 'H'))
  69.            {
  70.                if (e[i] == 'h' || e[i] == 'H'){i++; continue;} // las haches se descartan
  71.  
  72.                if (mayus == 1) buffer += toupper(e[i]); // si toca mayuscula, anyadimos una mayuscula
  73.                else buffer += e[i]; // sino, la anyadimos tal cual
  74.  
  75.                mayus = !mayus;
  76.                i++;
  77.            }
  78.            i--;
  79.            continue;
  80.        }
  81.  
  82.        // no es vocal
  83.  
  84.        if (e[i] == 'h' || e[i] == 'H') // si es h, se ignora
  85.        {
  86.            if (i != 0 && (e[i-1] == 'c' || e[i-1] == 'C')) // si la anterior era una c
  87.            {
  88.                if (e[i-1] == 'C') letra = 'X'; // la sustituimos por una X
  89.                else letra = 'x'; // o x minuscula
  90.  
  91.                if (consonante % 2 == 0) // si es una posicion par, toca mayuscula
  92.                {
  93.                    buffer[buffer.size()-1] = toupper(letra); // cambiamos la ultima posicion
  94.                    consonante = 1;
  95.                }
  96.                else buffer[buffer.size()-1] = letra;
  97.  
  98.            }
  99.            continue;
  100.        }
  101.  
  102.        letra = e[i]; // la letra se anyade al final, segun resulte ser mayuscula o minuscula
  103.        consonante++;
  104.        //  else buffer += e[i];
  105. //
  106.        if (e[i] == 'b') // sustituir b por v
  107.        {
  108.            letra = 'v';
  109.        }
  110.        else if (e[i] == 'B') // sustituir B por V
  111.        {
  112.            letra = 'V';
  113.        }
  114.        else if (e[i] == 'v')
  115.        {
  116.            letra = 'b';
  117.        }
  118.        else if (e[i] == 'V')
  119.        {
  120.            letra = 'B';
  121.        }
  122.  
  123.        else if (e[i] == 'c' || e[i] == 'C') // las c, por z o por k
  124.        {
  125.            if (i+1 < e.size() && (e[i+1] =='e' || e[i+1] == 'E' ||e[i+1] == 'i' || e[i+1] == 'I'))
  126.            {
  127.                if (e[i] == 'c') letra = 'z';
  128.                else letra = 'Z';
  129.               // i++;
  130.            }
  131.            else
  132.            {
  133.                if (e[i] == 'c') letra = 'k';
  134.                else letra = 'K';
  135.            }
  136.        }
  137.  
  138.        if (consonante % 2 == 0) // si es una consonante en posicion par
  139.        {
  140.            buffer += toupper(letra); // se anyade mayuscula
  141.            consonante = 0;
  142.        }
  143.        else buffer += letra; // se anyade tal cual
  144.    }
  145.  
  146.    return buffer;
  147. }
  148.  

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 :(



« Última modificación: 13 Marzo 2014, 12:32 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problema extraño
« Respuesta #1 en: 13 Marzo 2014, 12:28 pm »

No se si es que no han implementado bien las reglas pero...

La respuesta que tu pones es
Código:
NoO eS verdad aNgeL DeE aMor QuEe eN eStaA aParTadaA oRilLaA Mas PuraA LaA

Y la que saca tu programa es

Código:
NoO eS verdad aNgeL DeE aMor QuEe eN eStaA aParTadaA oRilLaA Mas PuraA LaA

ahí veo algunas diferencias en "verdad". Pero lo dicho, no se si será que no está bien redactado el enunciado o que está mal el resultado que te proponen.


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problema extraño
« Respuesta #2 en: 13 Marzo 2014, 12:34 pm »

No he sido yo. Esque el foro me cambia la palabra, lo he editado ya 3 veces Oo

Pongo los archivos en descarga mejor:
https://dl.dropboxusercontent.com/u/69551225/Cani%20Lenguaje.zip
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problema extraño
« Respuesta #3 en: 13 Marzo 2014, 12:42 pm »

Por cierto... si pruebo el código que has puesto... se come la última línea...
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problema extraño
« Respuesta #4 en: 13 Marzo 2014, 12:45 pm »

Por cierto... si pruebo el código que has puesto... se come la última línea...
¿Lo has cogido de los archivos o del foro?

Lo digo porque el foro se salta el último salto de línea *_*
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problema extraño
« Respuesta #5 en: 13 Marzo 2014, 12:48 pm »

Vale sí, era eso.

Lo que pasa es que eso me hace dudar de si el juez no te da por buena la práctica precisamente porque su última línea no termina con un salto.
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problema extraño
« Respuesta #6 en: 13 Marzo 2014, 13:32 pm »

Hize una pregunta y resulta que habían puesto el ejemplo mal:
Citar
Sin Ser XuLaA NiI BaziLonaA Soy TuU eNbiDiAa KamPeOnaA

No es XuLaa sino XulaA, esa mayuscula estaba mal.

Madre mía, retoqué un poco las ch y lo del salto de linea. Ahora ya me va...
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problema extraño
« Respuesta #7 en: 13 Marzo 2014, 13:50 pm »

jajajajaja

Con razón recomendaban utilizar un comparador de ficheros XDDD
En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Problema extraño
« Respuesta #8 en: 13 Marzo 2014, 19:19 pm »

Sólo digo que me parece bien raro ese lenguaje. ¿Quién lo usa? ¿Es algo parecido a los sms?
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema extraño
« Respuesta #9 en: 13 Marzo 2014, 19:33 pm »

Sólo digo que me parece bien raro ese lenguaje. ¿Quién lo usa? ¿Es algo parecido a los sms?

¡No hombre!, es un ejercicio de una página de retos.

¡¡¡¡ Saluditos! ..... !!!!


En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema extraño con ADO
Programación Visual Basic
icisneros 2 2,341 Último mensaje 27 Noviembre 2006, 17:58 pm
por icisneros
Problema muy extraño con ShellEjecute « 1 2 »
Programación Visual Basic
RiasChan 17 8,598 Último mensaje 7 Junio 2020, 11:32 am
por RiasChan
Extraño e-mail
Dudas Generales
stack 4 3,045 Último mensaje 1 Febrero 2022, 10:53 am
por stack
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines