Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.73 KB | None | 0 0
  1. /*Puntos de entrada:
  2. * Punto 1:marcos.puntajeDisfraz(fiesta)
  3. * Punto 2:fiesta.esUnBodrio()
  4. * Punto 3: fiesta.mejorDisfraz()
  5. * Punto 4.a: fiesta.puedenIntercambiarDisfraces(unInvitado,otroInvitado)
  6. * Punto 4.b: fiesta.intercambiarDisfraces(unInvitado,otroInvitado)
  7. * Punto 5: fiesta.agregarPersonaAListaInvitados(persona)
  8. * Punto 6: fiesta.fiestaInolvidable()
  9. */
  10.  
  11. const caretaMickey = new Careta(personajeSimulado = mickeyMouse)
  12.  
  13. const morsa = new Disfraz(nombre = "Morsa", fechaDeCompra = new Date(), caracteristicas = [gracioso,tobara], nivelDeGracia = 7)
  14.  
  15. const loro = new Disfraz(nombre = "Loro", fechaDeCompra = new Date(), caracteristicas = [tobara,caretaMickey], nivelDeGracia = 9)
  16.  
  17. const marcos = new Numerologo(nombre = "Marcos", personalidad = taciturna, edad = 22, disfraz = morsa, puntajeArbitrario = 21)
  18.  
  19. const juan = new Persona(nombre = "Juan", personalidad = alegre, edad = 22, disfraz = loro)
  20.  
  21. const regatas = new Lugar(nombreLugar = "Regatas", ubicacion = "Bella Vista")
  22.  
  23. const fiestaRegatas = new Fiesta(lugar = regatas, fecha = new Date(day = 15,month = 11, year = 2019), invitados = [marcos,juan])
  24.  
  25.  
  26. const jose = new Persona(nombre = "José", personalidad = alegre, edad = 23)
  27.  
  28.  
  29. class Lugar{
  30. var property nombreLugar
  31. var property ubicacion
  32. }
  33.  
  34. class Disfraz{
  35. var property nombre = ""
  36. var property fechaDeCompra
  37. var property caracteristicas = #{}
  38. var property nivelDeGracia
  39.  
  40. method puntaje(persona,fiesta){
  41. return caracteristicas.sum({caracteristica => caracteristica.puntaje(self,persona,fiesta)})
  42. }
  43.  
  44. method cantidadLetrasNombreEsPar(){
  45. return self.nombre().length().even()
  46. }
  47.  
  48.  
  49.  
  50. }
  51.  
  52. object gracioso{
  53.  
  54. method puntaje(disfraz,persona,fiesta) = if(persona.edad() > 50) 3*disfraz.nivelDeGracia() else disfraz.nivelDeGracia()
  55.  
  56. }
  57.  
  58. object tobara{
  59.  
  60. method puntaje(disfraz,persona,fiesta) = if(persona.cantDiasAntesDeLaFiestaQueComproElDisfraz(fiesta) >= 2) 5 else 3
  61.  
  62. }
  63.  
  64. object sexy{
  65. method puntaje(disfraz,persona,fiesta) = if(persona.esSexy()) 15 else 2
  66. }
  67.  
  68. //Pueden haber muchas caretas.
  69. class Careta{
  70. var property personajeSimulado
  71. method puntaje(disfraz,persona,fiesta) = personajeSimulado.valor()
  72. }
  73.  
  74. object mickeyMouse{
  75. var property valor = 8
  76. }
  77.  
  78. object batman{
  79. var property valor = 3
  80. }
  81.  
  82.  
  83. class Fiesta{
  84. var property lugar
  85. var property fecha
  86. var property invitados = #{}
  87.  
  88.  
  89. method agregarPersonaAListaInvitados(persona)
  90. {
  91. if(persona.tieneDisfraz() && !self.seEncuentraEnLaListaDeInvitados(persona))
  92. {
  93. invitados.add(persona)
  94. }
  95. else
  96. {
  97. self.error("No se pudo agregar a " + persona.nombre() + " a la lista!")
  98. }
  99.  
  100. }
  101.  
  102.  
  103. method seEncuentraEnLaListaDeInvitados(persona)
  104. {
  105. return invitados.contains(persona)
  106. }
  107.  
  108. method esUnBodrio(){
  109. return invitados.all({invitado => !invitado.estaConformeConSuDisfraz(self)})
  110. }
  111.  
  112. //Ordeno a los invitados según el puntaje de su disfraz, y luego obtengo el primero de la lista.
  113. method mejorDisfraz(){
  114. return invitados.sortedBy({invitado,otroInvitado => self.tieneMejorDisfraz(invitado,otroInvitado)}).head().disfraz()
  115. }
  116.  
  117. method tieneMejorDisfraz(unInvitado,otroInvitado)
  118. {
  119. var puntajeDisfrazUnaPersona = unInvitado.puntajePorDisfraz(self)
  120. var puntajeDisfrazOtraPersona = otroInvitado.puntajePorDisfraz(self)
  121.  
  122. return puntajeDisfrazUnaPersona > puntajeDisfrazOtraPersona
  123. }
  124.  
  125. method estanEnLaFiesta(unaPersona,otraPersona)
  126. {
  127. return invitados.contains(unaPersona) && invitados.contains(otraPersona)
  128. }
  129.  
  130. method algunoDeLosDosEstaDisconformeConSuDisfraz(unInvitado,otroInvitado){
  131. return !unInvitado.estaConformeConSuDisfraz(self) || !otroInvitado.estaConformeConSuDisfraz(self)
  132. }
  133.  
  134. method puedenIntercambiarDisfraces(unInvitado,otroInvitado)
  135. {
  136. return self.algunoDeLosDosEstaDisconformeConSuDisfraz(unInvitado,otroInvitado)
  137. && self.estanEnLaFiesta(unInvitado,otroInvitado)
  138. }
  139.  
  140. method intercambiarDisfraces(unInvitado,otroInvitado)
  141. {
  142. if (self.puedenIntercambiarDisfraces(unInvitado,otroInvitado)){
  143. var disfrazUnInvitado = unInvitado.disfraz()
  144. var disfrazOtroInvitado = otroInvitado.disfraz()
  145.  
  146. unInvitado.disfraz(disfrazOtroInvitado)
  147. otroInvitado.disfraz(disfrazUnInvitado)
  148. }
  149. else
  150. {
  151. self.error("No pueden intercambiar disfraces")
  152. }
  153.  
  154. }
  155.  
  156.  
  157. }
  158.  
  159. class FiestaInolvidable inherits Fiesta{
  160.  
  161. override method agregarPersonaAListaInvitados(persona)
  162. {
  163. if(persona.esSexy() && persona.estaConformeConSuDisfraz(self))
  164. {
  165. super(persona)
  166. }
  167. else
  168. {
  169. self.error("No cumple los requisitos para la fiesta!")
  170. }
  171. }
  172.  
  173.  
  174.  
  175. }
  176.  
  177.  
  178.  
  179. class Persona{
  180. var property nombre
  181. var property personalidad
  182. var property edad
  183. var property disfraz = ""
  184.  
  185. //Establezco un default "" para dejar asentado que no tiene disfraz.
  186. method tieneDisfraz(){
  187. return disfraz != ""
  188. }
  189.  
  190. method esSexy() = personalidad.esSexy(self)
  191.  
  192. method puntajePorDisfraz(fiesta) = disfraz.puntaje(self,fiesta)
  193.  
  194. method cantDiasAntesDeLaFiestaQueComproElDisfraz(fiesta){
  195. var diaFiesta = fiesta.fecha()
  196. return diaFiesta - disfraz.fechaDeCompra()
  197. }
  198.  
  199. method estaConformeConSuDisfraz(fiesta) = self.puntajePorDisfraz(fiesta) > 10
  200.  
  201. }
  202.  
  203. //Como el enunciado dice que las personas no cambian,
  204. //no hay problema en usar herencia.
  205. class Caprichoso inherits Persona{
  206. override method estaConformeConSuDisfraz(fiesta){
  207. return super(fiesta) && disfraz.cantidadLetrasNombreEsPar()
  208. }
  209.  
  210. }
  211.  
  212. class Numerologo inherits Persona{
  213. var puntajeArbitrario
  214.  
  215. override method estaConformeConSuDisfraz(fiesta){
  216. return self.puntajePorDisfraz(fiesta) > puntajeArbitrario
  217. }
  218. }
  219.  
  220. object alegre{
  221.  
  222. method esSexy(persona) = false
  223. }
  224.  
  225. object taciturna{
  226.  
  227. method esSexy(persona) = persona.edad() < 30
  228.  
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement