Skip to content

Commit f3c666c

Browse files
authored
Merge pull request mouredev#7240 from MiguelP-Dev/main
#7 - Go
2 parents ed34297 + b29b831 commit f3c666c

File tree

4 files changed

+295
-2
lines changed

4 files changed

+295
-2
lines changed

Roadmap/03 - ESTRUCTURAS DE DATOS/go/MiguelP-Dev.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ type Pair struct {
1616
value int
1717
}
1818

19-
// PairList is un slice de pares
19+
// PairList es un slice de pares
2020
type PairList []Pair
2121

2222
// Implementando la interface de ordenamiento para la pairList

Roadmap/06 - RECURSIVIDAD/go/MiguelP-Dev.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func main() {
7373
coutdown(100)
7474

7575
// Factorial
76-
fmt.Println("El factorial de 7 es: ", factorialCalc(25))
76+
fmt.Println("El factorial de 25 es: ", factorialCalc(25))
7777

7878
// Fibbonacci
7979
fmt.Println("El número en la posición 25 de la sucesión es: ", fibbo(25))
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
var lifo sliceStack
7+
var fifo sliceQueue
8+
9+
for {
10+
var opt uint8
11+
fmt.Println("Selecciona uan opcion:")
12+
fmt.Println("1. Ejecuta las funciones de Pilas.")
13+
fmt.Println("2. Ejecuta las funciones de Colas.")
14+
fmt.Println("3. Navegador.")
15+
fmt.Println("4. Impresora.")
16+
fmt.Println("5. Salir.")
17+
fmt.Scan(&opt)
18+
19+
switch opt {
20+
case 1:
21+
// LIFO (Last In, First Out).
22+
lifo.push("MiguelP-Dev")
23+
lifo.push("master")
24+
25+
fmt.Println(lifo.pop())
26+
fmt.Println(lifo.pop())
27+
fmt.Println(lifo.pop())
28+
29+
case 2:
30+
// FIFO (First In, First Out).
31+
32+
fifo.push("0")
33+
fifo.push("1")
34+
fifo.push("2")
35+
fifo.push("3")
36+
37+
fmt.Println(fifo.pop())
38+
fmt.Println(fifo.pop())
39+
fmt.Println(fifo.pop())
40+
fmt.Println(fifo.pop())
41+
fmt.Println(fifo.pop())
42+
43+
case 3:
44+
webNavigator(&navigator)
45+
case 4:
46+
docPrinter(&printerv)
47+
case 5:
48+
return
49+
default:
50+
continue
51+
}
52+
53+
}
54+
}
55+
56+
// LIFO (Last In, First Out).
57+
// sliceStack Es un slice que funcionará como una pila(Stack).
58+
type sliceStack []string
59+
60+
// push Método para agregar datos a un slice que funciona como pila.
61+
func (s *sliceStack) push(v string) {
62+
*s = append(*s, v)
63+
}
64+
65+
// popSlice Método pop para sacar elementos de uns slice que sirve como pila(Los slices no tienen una función 'Delete', pero son ideales como pilas).
66+
func (s *sliceStack) pop() string {
67+
if len(*s) == 0 {
68+
fmt.Println("La pila está vacía.")
69+
return ""
70+
}
71+
index := len(*s) - 1
72+
element := (*s)[index]
73+
*s = (*s)[:index]
74+
return element
75+
}
76+
77+
// FIFO (First In, First Out).
78+
// sliceQueue Es un slice que funcionará como una cola.
79+
type sliceQueue []string
80+
81+
// push Método para encolar elementos
82+
func (q *sliceQueue) push(v string) {
83+
*q = append(*q, v)
84+
}
85+
86+
// pop Método para deencolar elementos
87+
func (q *sliceQueue) pop() string {
88+
if len(*q) == 0 {
89+
fmt.Println("La cola está vacía.")
90+
return ""
91+
}
92+
pop := (*q)[0]
93+
*q = (*q)[1:]
94+
return pop
95+
}
96+
97+
/*
98+
* DIFICULTAD EXTRA (opcional):
99+
* - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
100+
* de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
101+
* que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
102+
* Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
103+
* el nombre de una nueva web.
104+
*/
105+
// navStack pila para la función que simula un navegador
106+
type navStack []string
107+
108+
var navigator navStack
109+
var position = 0
110+
111+
func webNavigator(n *navStack) {
112+
for {
113+
var option string
114+
fmt.Printf("\n")
115+
fmt.Println("adelante", " - ", "Viajar a la página siguiente.")
116+
fmt.Println("atras", " - ", "Viajar a la página anterior.")
117+
fmt.Println("salir", " - ", "Salir de la app.")
118+
fmt.Println("borrar", " - ", "Borra el historial.")
119+
fmt.Printf("Ingresa una de las opciones: ")
120+
fmt.Scan(&option)
121+
122+
switch option {
123+
case "salir":
124+
fmt.Println("Saliendo... Bye!")
125+
return
126+
case "adelante":
127+
if position < len(*n)-1 {
128+
position++
129+
fmt.Println("Viajando a:", (*n)[position])
130+
} else {
131+
fmt.Println("No hay páginas delante.")
132+
}
133+
case "atras":
134+
if position > 0 {
135+
position--
136+
fmt.Println("Viajando a:", (*n)[position])
137+
} else {
138+
fmt.Println("No hay páginas hacia atrás.")
139+
}
140+
case "borrar":
141+
*n = []string{}
142+
position = 0
143+
fmt.Println("Histarial borrado.")
144+
default:
145+
if len(*n) == 0 {
146+
*n = append(*n, option)
147+
position = 0
148+
} else {
149+
*n = append((*n)[:position+1], option)
150+
position++
151+
}
152+
fmt.Println("Navegando a:", (*n)[position])
153+
}
154+
}
155+
156+
}
157+
158+
type queue []string
159+
160+
var printerv queue
161+
162+
func docPrinter(q *queue) {
163+
var option string
164+
fmt.Scan(&option)
165+
166+
switch option {
167+
case "imprimir":
168+
if len(*q) == 0 {
169+
fmt.Println("La cola de impresión está vacía.")
170+
return
171+
}
172+
fmt.Println("Imprimiendo: " + (*q)[0])
173+
*q = (*q)[1:]
174+
case "Salir":
175+
return
176+
default:
177+
*q = append(*q, option)
178+
fmt.Println("Documento agregado a la cola")
179+
}
180+
docPrinter(&printerv)
181+
182+
}
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
package main
2+
3+
import "fmt"
4+
5+
// Golang no posee clases pero si posee estructuras, que son similares.
6+
// programmer es una estructura que contiene los atributos de un programador.
7+
type programmer struct {
8+
name string
9+
age uint8
10+
languages []string
11+
}
12+
13+
func newProgrammer(name string, age uint8, languages []string) *programmer {
14+
return &programmer{
15+
name: name,
16+
age: age,
17+
languages: languages,
18+
}
19+
}
20+
21+
func printLanguages(p programmer) {
22+
text := "Languages used: "
23+
for _, lang := range p.languages {
24+
text += lang + ", "
25+
}
26+
fmt.Println(text[:len(text)-2])
27+
}
28+
29+
func (p *programmer) updateAge(newAge uint8) {
30+
p.age = newAge
31+
}
32+
33+
var one = programmer{}
34+
35+
// Extra : Stack and Queue
36+
type stack struct {
37+
items []int
38+
}
39+
40+
func (s *stack) push(item int) {
41+
s.items = append(s.items, item)
42+
}
43+
44+
func (s *stack) pop() int {
45+
if len(s.items) == 0 {
46+
fmt.Println("Stack is empty")
47+
return -1
48+
}
49+
50+
item := s.items[len(s.items)-1]
51+
s.items = s.items[:len(s.items)-1]
52+
return item
53+
}
54+
55+
type queue struct {
56+
items []int
57+
}
58+
59+
func (s *queue) push(item int) {
60+
s.items = append(s.items, item)
61+
}
62+
63+
func (s *queue) pop() int {
64+
if len(s.items) == 0 {
65+
fmt.Println("Queue is empty")
66+
return -1
67+
}
68+
69+
item := s.items[0]
70+
s.items = s.items[1:]
71+
return item
72+
}
73+
74+
func main() {
75+
one.languages = append(one.languages, "golang")
76+
one.name = "miguel"
77+
one.age = 31
78+
fmt.Println("First: ", one)
79+
one.age = 32
80+
fmt.Println("Updated: ", one)
81+
printLanguages(one)
82+
fmt.Println("Programmer: ", newProgrammer("Miguel", 31, []string{"golang"}))
83+
one.updateAge(33)
84+
fmt.Println("Updating age with method: ", one.age)
85+
86+
// Example about stack and queue using structures instead of classes.
87+
// stack
88+
myStack := new(stack)
89+
myStack.push(1)
90+
myStack.push(2)
91+
myStack.push(3)
92+
fmt.Println("Stack: ", myStack)
93+
myStack.pop()
94+
myStack.pop()
95+
myStack.pop()
96+
myStack.pop()
97+
fmt.Println("Stack: ", myStack)
98+
99+
// queue
100+
myQueue := new(queue)
101+
myQueue.push(1)
102+
myQueue.push(2)
103+
myQueue.push(3)
104+
fmt.Println("Queue: ", myQueue)
105+
myQueue.pop()
106+
myQueue.pop()
107+
myQueue.pop()
108+
myQueue.pop()
109+
fmt.Println("Queue: ", myQueue)
110+
111+
}

0 commit comments

Comments
 (0)