COMPARTE ESTE ARTÍCULO

(Tiempo orientativo: 3 h – Lenguaje objetivo: C# 7.0)


ENUNCIADO

1. (4 puntos) Las criaturas elementales

Desarrolla, usando POO correcta (encapsulación, properties, herencia, XML-comments), las clases de un juego con criaturas elementales.

a. El Mundo ocupa la malla rectangular cuyas esquinas opuestas son (0, 0) y (XMax, YMax).

b. La clase Elemental almacena posición (x, y), vitalidad (int) y una referencia al Mundo.

  • Se crea con 150 puntos de vitalidad y en una posición aleatoria válida.
  • Método Desplazar() → mueve x e y entre –5 y 5 sin salir del Mundo y resta 3 puntos de vitalidad.
  • Método virtual Accion() devuelve la cadena vacía.

c. ElementalFuego hereda de Elemental. Sobrescribe Accion() devolviendo aleatoriamente “¡Fiuuu!”, “crack-crack” o “💥” si vitalidad > 0; en caso contrario devuelve “”.

d. ElementalAgua hereda de Elemental y mantiene una lista de Gema (no implementes la clase).

  • Método Colectar() (no programarlo) añade una gema cercana a la lista.
  • Accion() elimina al azar una gema y devuelve su representación textual; si no hay gemas, devuelve “”.

e. Método estático Impacto(List<Elemental> els,int x0,int y0,int r,int d) que resta d puntos de vitalidad a los elementales cuya distancia manhattan a (x0, y0) sea < r. Elimina de la lista los que queden con vitalidad ≤ 0.

f. Método MensajesAgua(Elemental[] els) que concatene los resultados de Accion() de todos los ElementalAgua del array.


2. (2 puntos) Los K más poderosos

Elemental añadirá una segunda característica poder (int, editable). Implementa el método genérico

Elemental[] MaximosK(Elemental[] els,int k,
                     Comparison<Elemental> criterio)

que devuelva hasta k elementales con mejor puntuación según el criterio recibido, sin alterar el array original.


3. (2 puntos) Análisis de complejidad

a) Para N ≥ 1 analiza el siguiente método: cuenta cada acceso a matriz como 1 operación.

void Fusionar(bool[,] matriz)
{
    for(int i=0;i<N;i++)
        for(int j=i+1;j<N;j++)
            if(matriz[i,j]) break;

    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
            for(int k=0;k<i;k++)
                matriz[i,k] = matriz[i,k] || matriz[j,k];
}

Escribe la función de coste (peor caso) y su orden Big-Θ indicando el procedimiento.

b) Verdadero / Falso (razona brevemente):

  1. «Un algoritmo cuyo mejor caso es Θ(N) puede ser asintóticamente peor que otro cuyo peor caso es Θ(N log N)».
  2. «Si T(N)=2 T(N⁄2)+N log N, entonces T(N) es Θ(N log N)».

4. (2 puntos) Recursión sobre árboles

Declara:

class NodoElem {
    public Elemental valor;
    public List<NodoElem> hijos = new List<NodoElem>();
}

Programa recursivamente List<ElementalFuego> FuegosHoja(NodoElem raiz) que devuelva una lista con los ElementalFuego que sean hoja del árbol (nodo sin hijos).


5. (2 puntos) Cola genérica con dos pilas

Implementa ColaDosPilas<T> usando internamente dos objetos Stack<T> de System.Collections.Generic. Métodos:

  • void Encolar(T item)
  • T Desencolar() (lanza InvalidOperationException si está vacía)
  • Propiedad int Count { get; }

La complejidad amortizada de Encolar y Desencolar debe ser O(1). Explica brevemente por qué.


6. (2 puntos) Extensión LINQ

Crea un método de extensión PromedioSeguro(this IEnumerable<int> origen) que devuelva la media entera de la secuencia o 0 si está vacía, sin lanzar excepciones y sin recorrer la colección más de una vez.


SOLUCIÓN PROPUESTA


Uso recomendado del simulacro

  1. Intenta primero resolver el enunciado sin mirar la solución; date 3 h.
  2. Compila y testea tu código con casos sencillos (crea Mundo, varios Elemental*, aplica Impacto, etc.).
  3. Tras comparar, revisa diferencias de diseño, claridad y eficiencia.

¡Mucho ánimo con la preparación!


¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.


¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos. 

 

 


NUESTRAS ÚLTIMAS PUBLICACIONES

INSTAGRAM

TIKTOK


 …Y PRONTO MUCHAS MÁS

AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.

Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Categories:

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
error: CONTENIDO PROTEGIDO