-
Notifications
You must be signed in to change notification settings - Fork 0
/
golosinas.wlk
127 lines (112 loc) · 4.07 KB
/
golosinas.wlk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
class Golosina {
var property precio //precio = 0 se le puede dar un valor si queres
var property sabor
var property peso
var property gluten
method mordisco() {
peso = (peso * 0.8) -1
}
}
object bombon inherits Golosina(precio = 5, sabor = "frutilla", peso = 15, gluten = false) {}
object alfajor inherits Golosina(precio = 12, sabor = "chocolate", peso = 300, gluten = true) {
override method mordisco() {
peso = (peso * 0.8)
}
}
object caramelo inherits Golosina(precio = 1, sabor = "frutilla", peso = 5, gluten = false) {
override method mordisco() {
peso -= 1
}
}
object chupetin inherits Golosina(precio = 2, sabor = "naranja", peso = 7, gluten = false) {
override method mordisco() {
if(peso > 2) {
peso = peso * 0.9
}
}
}
object oblea inherits Golosina(precio = 5, sabor = "vainilla", peso = 250, gluten = true) {
override method mordisco() {
if (peso > 70) {
peso = (peso * 0.5)
} else {
peso = (peso * 0.75)
}
}
}
object chocolatin inherits Golosina(precio = 0, sabor = "chocolate", peso = 0, gluten = true) {
override method peso(gramos) {
peso = gramos
pesoInicial = gramos
}
var property pesoInicial = 0
override method mordisco() {
peso -= 2
}
override method precio() = 0.5 * pesoInicial
}
class GolosinaBaniada inherits Golosina(precio = base.precio(), sabor = base.sabor(), peso = base.peso() + self.baniado(), gluten = base.gluten()) {
var property baniado = 4
var property base //le asigno bombon porque sino no funciona
method asignarBase(golosinaBase) {
peso = golosinaBase.peso() + baniado.max(0)
precio = golosinaBase.precio() + 2
sabor = golosinaBase.sabor()
gluten = golosinaBase.gluten()
self.base(golosinaBase)
}
override method mordisco() {
self.base().mordisco()
baniado -= 2
peso = base.peso() + baniado.max(0)
}
}
object pastilla inherits Golosina(precio = 0, sabor = ["frutilla","chocolate","naranja"], peso = 5, gluten = false) {
var property saborIndex = 0
//Si es libre de gluten(false) el precio es $7; si no(true), es de $10.
override method gluten(a) {
if (a) {
gluten = false
} else {
gluten = true
}
}
override method precio() {
return if (self.gluten()) {7}
else {10}
}
override method mordisco() {
saborIndex = (saborIndex + 1) % sabor.size()
}
//Primero es 0 si le das un mordisco:
//Si saborIndex es 0, (0 + 1) % 3 = 1.
//Si saborIndex es 1, (1 + 1) % 3 = 2.
//Si saborIndex es 2, (2 + 1) % 3 = 0.
override method sabor() = sabor.get(saborIndex)
}
object mariano {
var property bolsa = []
method comprar(golosina) = bolsa.add(golosina)
method desechar(golosina) = bolsa.remove(golosina)
method probarGolosinas() = bolsa.forEach{golo => golo.mordisco()}
method haySinTacc() = bolsa.any{golo => !golo.gluten()}
method preciosCuidados() = bolsa.all{golo => golo.precio() <= 10}
method golosinaDeSabor(unSabor) = bolsa.find{golo => golo.sabor() == unSabor}
method golosinasDeSabor(unSabor) = bolsa.filter{golo => golo.sabor() == unSabor}
method sabores() = bolsa.map{golosina => golosina.sabor()}.asSet()//lo hago un set para borrar repetidos
// method sabores() {
// const saboresSet = #{}
// bolsa.forEach{a => saboresSet.add(a.sabor())}
// return saboresSet }
method golosinaMasCara() = bolsa.max{golo => golo.precio()}
method pesoGolosina() = bolsa.sum{a => a.peso()}
method golosinasFaltantes(golosinasDeseadas) {
return golosinasDeseadas.filter{golo => !bolsa.contains(golo)}
}// de la colleccion que le das devuelve los que no esten en la bolsa
method gustosFaltantes(gustosDeseados) {
return gustosDeseados.filter{gusto => !bolsa.any{golo => golo.sabor() == gusto}}
}
method baniar(golosina) {
bolsa.add(new GolosinaBaniada(base = golosina))
}//! esto no entiendo mucho
}