Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Puntos de entrada:
- * Punto 1:marcos.puntajeDisfraz(fiesta)
- * Punto 2:fiesta.esUnBodrio()
- * Punto 3: fiesta.mejorDisfraz()
- * Punto 4.a: fiesta.puedenIntercambiarDisfraces(unInvitado,otroInvitado)
- * Punto 4.b: fiesta.intercambiarDisfraces(unInvitado,otroInvitado)
- * Punto 5: fiesta.agregarPersonaAListaInvitados(persona)
- * Punto 6: fiesta.fiestaInolvidable()
- */
- const caretaMickey = new Careta(personajeSimulado = mickeyMouse)
- const morsa = new Disfraz(nombre = "Morsa", fechaDeCompra = new Date(), caracteristicas = [gracioso,tobara], nivelDeGracia = 7)
- const loro = new Disfraz(nombre = "Loro", fechaDeCompra = new Date(), caracteristicas = [tobara,caretaMickey], nivelDeGracia = 9)
- const marcos = new Numerologo(nombre = "Marcos", personalidad = taciturna, edad = 22, disfraz = morsa, puntajeArbitrario = 21)
- const juan = new Persona(nombre = "Juan", personalidad = alegre, edad = 22, disfraz = loro)
- const regatas = new Lugar(nombreLugar = "Regatas", ubicacion = "Bella Vista")
- const fiestaRegatas = new Fiesta(lugar = regatas, fecha = new Date(day = 15,month = 11, year = 2019), invitados = [marcos,juan])
- const jose = new Persona(nombre = "José", personalidad = alegre, edad = 23)
- class Lugar{
- var property nombreLugar
- var property ubicacion
- }
- class Disfraz{
- var property nombre = ""
- var property fechaDeCompra
- var property caracteristicas = #{}
- var property nivelDeGracia
- method puntaje(persona,fiesta){
- return caracteristicas.sum({caracteristica => caracteristica.puntaje(self,persona,fiesta)})
- }
- method cantidadLetrasNombreEsPar(){
- return self.nombre().length().even()
- }
- }
- object gracioso{
- method puntaje(disfraz,persona,fiesta) = if(persona.edad() > 50) 3*disfraz.nivelDeGracia() else disfraz.nivelDeGracia()
- }
- object tobara{
- method puntaje(disfraz,persona,fiesta) = if(persona.cantDiasAntesDeLaFiestaQueComproElDisfraz(fiesta) >= 2) 5 else 3
- }
- object sexy{
- method puntaje(disfraz,persona,fiesta) = if(persona.esSexy()) 15 else 2
- }
- //Pueden haber muchas caretas.
- class Careta{
- var property personajeSimulado
- method puntaje(disfraz,persona,fiesta) = personajeSimulado.valor()
- }
- object mickeyMouse{
- var property valor = 8
- }
- object batman{
- var property valor = 3
- }
- class Fiesta{
- var property lugar
- var property fecha
- var property invitados = #{}
- method agregarPersonaAListaInvitados(persona)
- {
- if(persona.tieneDisfraz() && !self.seEncuentraEnLaListaDeInvitados(persona))
- {
- invitados.add(persona)
- }
- else
- {
- self.error("No se pudo agregar a " + persona.nombre() + " a la lista!")
- }
- }
- method seEncuentraEnLaListaDeInvitados(persona)
- {
- return invitados.contains(persona)
- }
- method esUnBodrio(){
- return invitados.all({invitado => !invitado.estaConformeConSuDisfraz(self)})
- }
- //Ordeno a los invitados según el puntaje de su disfraz, y luego obtengo el primero de la lista.
- method mejorDisfraz(){
- return invitados.sortedBy({invitado,otroInvitado => self.tieneMejorDisfraz(invitado,otroInvitado)}).head().disfraz()
- }
- method tieneMejorDisfraz(unInvitado,otroInvitado)
- {
- var puntajeDisfrazUnaPersona = unInvitado.puntajePorDisfraz(self)
- var puntajeDisfrazOtraPersona = otroInvitado.puntajePorDisfraz(self)
- return puntajeDisfrazUnaPersona > puntajeDisfrazOtraPersona
- }
- method estanEnLaFiesta(unaPersona,otraPersona)
- {
- return invitados.contains(unaPersona) && invitados.contains(otraPersona)
- }
- method algunoDeLosDosEstaDisconformeConSuDisfraz(unInvitado,otroInvitado){
- return !unInvitado.estaConformeConSuDisfraz(self) || !otroInvitado.estaConformeConSuDisfraz(self)
- }
- method puedenIntercambiarDisfraces(unInvitado,otroInvitado)
- {
- return self.algunoDeLosDosEstaDisconformeConSuDisfraz(unInvitado,otroInvitado)
- && self.estanEnLaFiesta(unInvitado,otroInvitado)
- }
- method intercambiarDisfraces(unInvitado,otroInvitado)
- {
- if (self.puedenIntercambiarDisfraces(unInvitado,otroInvitado)){
- var disfrazUnInvitado = unInvitado.disfraz()
- var disfrazOtroInvitado = otroInvitado.disfraz()
- unInvitado.disfraz(disfrazOtroInvitado)
- otroInvitado.disfraz(disfrazUnInvitado)
- }
- else
- {
- self.error("No pueden intercambiar disfraces")
- }
- }
- }
- class FiestaInolvidable inherits Fiesta{
- override method agregarPersonaAListaInvitados(persona)
- {
- if(persona.esSexy() && persona.estaConformeConSuDisfraz(self))
- {
- super(persona)
- }
- else
- {
- self.error("No cumple los requisitos para la fiesta!")
- }
- }
- }
- class Persona{
- var property nombre
- var property personalidad
- var property edad
- var property disfraz = ""
- //Establezco un default "" para dejar asentado que no tiene disfraz.
- method tieneDisfraz(){
- return disfraz != ""
- }
- method esSexy() = personalidad.esSexy(self)
- method puntajePorDisfraz(fiesta) = disfraz.puntaje(self,fiesta)
- method cantDiasAntesDeLaFiestaQueComproElDisfraz(fiesta){
- var diaFiesta = fiesta.fecha()
- return diaFiesta - disfraz.fechaDeCompra()
- }
- method estaConformeConSuDisfraz(fiesta) = self.puntajePorDisfraz(fiesta) > 10
- }
- //Como el enunciado dice que las personas no cambian,
- //no hay problema en usar herencia.
- class Caprichoso inherits Persona{
- override method estaConformeConSuDisfraz(fiesta){
- return super(fiesta) && disfraz.cantidadLetrasNombreEsPar()
- }
- }
- class Numerologo inherits Persona{
- var puntajeArbitrario
- override method estaConformeConSuDisfraz(fiesta){
- return self.puntajePorDisfraz(fiesta) > puntajeArbitrario
- }
- }
- object alegre{
- method esSexy(persona) = false
- }
- object taciturna{
- method esSexy(persona) = persona.edad() < 30
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement