Skip to content

Commit 8f70e91

Browse files
author
Gerardo Medellin
committed
#17, #18, #19 - Go
1 parent 8f6c955 commit 8f70e91

File tree

3 files changed

+374
-0
lines changed

3 files changed

+374
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
// Mecanismo 1
7+
for i := 1; i <= 10; i++ {
8+
fmt.Println(i)
9+
}
10+
11+
// Mecanismo 2
12+
i := 1
13+
for i <= 10 {
14+
fmt.Println(i)
15+
i++
16+
}
17+
18+
// Mecanismo 3
19+
for _, i := range []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} {
20+
fmt.Println(i)
21+
}
22+
23+
//Extra
24+
// Mecanismo 4
25+
i = 1
26+
for {
27+
fmt.Println(i)
28+
i++
29+
if i > 10 {
30+
break
31+
}
32+
}
33+
34+
// Mecanismo 5
35+
i = 1
36+
for {
37+
if i > 10 {
38+
break
39+
}
40+
fmt.Println(i)
41+
i++
42+
}
43+
44+
}

Roadmap/18 - CONJUNTOS/go/thegera4.go

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
package main
2+
3+
import "fmt"
4+
5+
type Conjunto struct {
6+
elementos []string
7+
}
8+
9+
func (c *Conjunto) añadirElementoFinal(elemento string) {
10+
c.elementos = append(c.elementos, elemento)
11+
}
12+
13+
func (c *Conjunto) añadirElementoInicio(elemento string) {
14+
c.elementos = append([]string{elemento}, c.elementos...)
15+
}
16+
17+
func (c *Conjunto) añadirVariosElementosFinal(elementos ...string) { //...string indica que se pueden pasar un numero variable de "elementos"
18+
c.elementos = append(c.elementos, elementos...)
19+
}
20+
21+
func (c *Conjunto) añadirVariosElementosPosicion(posicion int, elementos ...string) {
22+
//c.elementos[:posicion] -> elementos desde el inicio hasta la "posicion", excluyendo la "posicion"
23+
c.elementos = append(c.elementos[:posicion], append(elementos, c.elementos[posicion:]...)...)
24+
//append(elementos, c.elementos[posicion:]...) -> añade los "elementos" al final de "c.elementos" desde la "posicion"
25+
}
26+
27+
func (c *Conjunto) eliminarElementoPosicion(posicion int) {
28+
c.elementos = append(c.elementos[:posicion], c.elementos[posicion+1:]...)
29+
}
30+
31+
func (c *Conjunto) actualizarElementoPosicion(posicion int, elemento string) {
32+
c.elementos[posicion] = elemento
33+
}
34+
35+
func (c *Conjunto) comprobarElemento(elemento string) bool {
36+
for _, e := range c.elementos {
37+
if e == elemento {
38+
return true
39+
}
40+
}
41+
return false
42+
}
43+
44+
func (c *Conjunto) eliminarContenido() {
45+
c.elementos = []string{}
46+
}
47+
48+
func main() {
49+
conjunto := Conjunto{}
50+
51+
conjunto.añadirElementoFinal("naranja")
52+
fmt.Println(conjunto.elementos)
53+
54+
conjunto.añadirElementoInicio("manzana")
55+
fmt.Println(conjunto.elementos)
56+
57+
conjunto.añadirVariosElementosFinal("pera", "kiwi", "melon")
58+
fmt.Println(conjunto.elementos)
59+
60+
conjunto.añadirVariosElementosPosicion(2, "sandia", "uva", "mango")
61+
fmt.Println(conjunto.elementos)
62+
63+
conjunto.eliminarElementoPosicion(3)
64+
fmt.Println(conjunto.elementos)
65+
66+
conjunto.actualizarElementoPosicion(2, "fresa")
67+
fmt.Println(conjunto.elementos)
68+
69+
fmt.Println(conjunto.comprobarElemento("fresa"))
70+
fmt.Println(conjunto.comprobarElemento("platano"))
71+
72+
conjunto.eliminarContenido()
73+
fmt.Println(conjunto.elementos)
74+
75+
//Extra:
76+
77+
//Unión
78+
conjunto1 := Conjunto{}
79+
conjunto1.añadirVariosElementosFinal("naranja", "manzana")
80+
conjunto2 := Conjunto{}
81+
conjunto2.añadirVariosElementosFinal("pera", "uva")
82+
conjunto1.union(conjunto2)
83+
fmt.Println("Union: ", conjunto1.elementos)
84+
85+
//Intersección
86+
conjunto3 := Conjunto{}
87+
conjunto3.añadirVariosElementosFinal("naranja", "manzana", "pera")
88+
conjunto4 := Conjunto{}
89+
conjunto4.añadirVariosElementosFinal("pera", "uva")
90+
conjunto3.interseccion(conjunto4)
91+
fmt.Println("Interseccion: ", conjunto3.elementos)
92+
93+
//Diferencia
94+
conjunto5 := Conjunto{}
95+
conjunto5.añadirVariosElementosFinal("naranja", "manzana", "pera")
96+
conjunto6 := Conjunto{}
97+
conjunto6.añadirVariosElementosFinal("pera", "uva")
98+
conjunto5.diferencia(conjunto6)
99+
fmt.Println("Diferencia: ", conjunto5.elementos)
100+
101+
//Diferencia simétrica
102+
conjunto7 := Conjunto{}
103+
conjunto7.añadirVariosElementosFinal("naranja", "manzana", "pera")
104+
conjunto8 := Conjunto{}
105+
conjunto8.añadirVariosElementosFinal("pera", "uva")
106+
conjunto7.diferenciaSimetrica(conjunto8)
107+
fmt.Println("Diferencia simetrica: ", conjunto7.elementos)
108+
109+
}
110+
111+
//Extra:
112+
113+
//Unión
114+
func (c *Conjunto) union(c2 Conjunto) {
115+
for _, e := range c2.elementos {
116+
if !c.comprobarElemento(e) {
117+
c.añadirElementoFinal(e)
118+
}
119+
}
120+
}
121+
122+
//Intersección
123+
func (c *Conjunto) interseccion(c2 Conjunto) {
124+
for i := 0; i < len(c.elementos); i++ {
125+
if !c2.comprobarElemento(c.elementos[i]) {
126+
c.eliminarElementoPosicion(i)
127+
i--
128+
}
129+
}
130+
}
131+
132+
//Diferencia
133+
func (c *Conjunto) diferencia(c2 Conjunto) {
134+
for i := 0; i < len(c.elementos); i++ {
135+
if c2.comprobarElemento(c.elementos[i]) {
136+
c.eliminarElementoPosicion(i)
137+
i--
138+
}
139+
}
140+
}
141+
142+
//Diferencia simétrica
143+
func (c *Conjunto) diferenciaSimetrica(c2 Conjunto) {
144+
// crear conjuntos temporales/auxiliares
145+
temp1 := make(map[string]bool)
146+
temp2 := make(map[string]bool)
147+
148+
// almacenar los elementos unicos del primer conjunto
149+
for _, e := range c.elementos {
150+
temp1[e] = true
151+
}
152+
153+
// almacenar los elementos unicos del segundo conjunto
154+
for _, e := range c2.elementos {
155+
temp2[e] = true
156+
}
157+
158+
// crear un nuevo conjunto para almacenar la diferencia simetrica
159+
diff := Conjunto{}
160+
161+
// agregar elementos que estan en c pero no en c2
162+
for e := range temp1 {
163+
if !temp2[e] {
164+
diff.añadirElementoFinal(e)
165+
}
166+
}
167+
168+
// agregar elementos que estan en c2 pero no en c
169+
for e := range temp2 {
170+
if !temp1[e] {
171+
diff.añadirElementoFinal(e)
172+
}
173+
}
174+
175+
// actualizar el conjunto original con la diferencia simetrica
176+
*c = diff
177+
}
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
package main
2+
3+
import "fmt"
4+
5+
// No existe la estructura de enumeraciones en Go, pero se puede simular con constantes
6+
// Primero creamos un tipo de dato para representar, en este caso, los días de la semana (este paso es opcional)
7+
type DiaSemana string
8+
9+
// Luego creamos las constantes con su valor, que representan los días de la semana
10+
const (
11+
Lunes DiaSemana = "Lunes"
12+
Martes DiaSemana = "Martes"
13+
Miercoles DiaSemana = "Miercoles"
14+
Jueves DiaSemana = "Jueves"
15+
Viernes DiaSemana = "Viernes"
16+
Sabado DiaSemana = "Sabado"
17+
Domingo DiaSemana = "Domingo"
18+
)
19+
20+
// Creamos una función que recibe un entero y devuelve el día de la semana correspondiente
21+
func DiaSemanaFromInt(dia int) DiaSemana {
22+
switch dia {
23+
case 1:
24+
return Lunes
25+
case 2:
26+
return Martes
27+
case 3:
28+
return Miercoles
29+
case 4:
30+
return Jueves
31+
case 5:
32+
return Viernes
33+
case 6:
34+
return Sabado
35+
case 7:
36+
return Domingo
37+
default:
38+
return "No existe"
39+
}
40+
}
41+
42+
func main() {
43+
fmt.Println(DiaSemanaFromInt(1))
44+
fmt.Println(DiaSemanaFromInt(2))
45+
fmt.Println(DiaSemanaFromInt(3))
46+
fmt.Println(DiaSemanaFromInt(4))
47+
fmt.Println(DiaSemanaFromInt(5))
48+
fmt.Println(DiaSemanaFromInt(6))
49+
fmt.Println(DiaSemanaFromInt(7))
50+
fmt.Println(DiaSemanaFromInt(8))
51+
52+
//Extra:
53+
54+
p1 := Pedido{id: 1, status: PENDIENTE}
55+
p2 := Pedido{id: 2, status: ENVIADO}
56+
p3 := Pedido{id: 3, status: ENTREGADO}
57+
p4 := Pedido{id: 4, status: CANCELADO}
58+
59+
fmt.Println("Pedido 1:")
60+
fmt.Println(p1)
61+
p1.Enviar()
62+
fmt.Println(p1)
63+
p1.Cancelar()
64+
fmt.Println(p1)
65+
66+
fmt.Println("Pedido 2:")
67+
fmt.Println(p2)
68+
p2.Cancelar()
69+
fmt.Println(p2)
70+
p2.Entregar()
71+
fmt.Println(p2)
72+
73+
fmt.Println("Pedido 3:")
74+
fmt.Println(p3)
75+
p3.Enviar()
76+
p3.Cancelar()
77+
78+
fmt.Println("Pedido 4:")
79+
fmt.Println(p4)
80+
p4.Entregar()
81+
82+
}
83+
84+
//Extra:
85+
86+
type EstadoPedido int
87+
88+
const (
89+
PENDIENTE EstadoPedido = iota
90+
ENVIADO
91+
ENTREGADO
92+
CANCELADO
93+
)
94+
95+
type Pedido struct {
96+
id int
97+
status EstadoPedido
98+
}
99+
100+
func (p *Pedido) Enviar() {
101+
if(p.status == ENVIADO){
102+
fmt.Println("El pedido ya ha sido enviado")
103+
} else if (p.status == ENTREGADO) {
104+
fmt.Println("El pedido ya ha sido entregado")
105+
} else if (p.status == PENDIENTE) {
106+
p.status = ENVIADO
107+
} else {
108+
fmt.Println("No se puede enviar un pedido que no está pendiente")
109+
}
110+
}
111+
112+
func (p *Pedido) Cancelar() {
113+
if p.status == CANCELADO {
114+
fmt.Println("El pedido ya ha sido cancelado")
115+
} else if p.status == ENTREGADO {
116+
fmt.Println("El pedido ya ha sido entregado")
117+
} else if p.status == PENDIENTE {
118+
p.status = CANCELADO
119+
} else {
120+
fmt.Println("No se puede cancelar un pedido que no está pendiente")
121+
}
122+
}
123+
124+
func (p *Pedido) Entregar() {
125+
if p.status == ENTREGADO {
126+
fmt.Println("El pedido ya ha sido entregado")
127+
} else if p.status == CANCELADO {
128+
fmt.Println("El pedido ya ha sido cancelado")
129+
} else if p.status == ENVIADO {
130+
p.status = ENTREGADO
131+
} else {
132+
fmt.Println("No se puede entregar un pedido que no está enviado")
133+
}
134+
}
135+
136+
func (p *Pedido) Estado() string {
137+
switch p.status {
138+
case PENDIENTE:
139+
return "Pedido pendiente"
140+
case ENVIADO:
141+
return "Pedido enviado"
142+
case ENTREGADO:
143+
return "Pedido entregado"
144+
case CANCELADO:
145+
return "Pedido cancelado"
146+
default:
147+
return "Estado desconocido"
148+
}
149+
}
150+
151+
func (p *Pedido) String() string {
152+
return fmt.Sprintf("Pedido %d: %s", p.id, p.Estado())
153+
}

0 commit comments

Comments
 (0)