Skip to content

Commit cc2d10e

Browse files
authored
Merge pull request mouredev#5260 from nlarrea/ts-07
#7 - typescript
2 parents 7d4b7f8 + 321ca0a commit cc2d10e

File tree

1 file changed

+174
-0
lines changed

1 file changed

+174
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
/*
2+
* EJERCICIO:
3+
* Implementa los mecanismos de introducción y recuperación de elementos propios de las
4+
* pilas (stacks - LIFO) y las colas (queue - FIFO) utilizando una estructura de array
5+
* o lista (dependiendo de las posibilidades de tu lenguaje).
6+
*
7+
* DIFICULTAD EXTRA (opcional):
8+
* - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
9+
* de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
10+
* que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
11+
* Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
12+
* el nombre de una nueva web.
13+
* - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
14+
* impresora compartida que recibe documentos y los imprime cuando así se le indica.
15+
* La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
16+
* interpretan como nombres de documentos.
17+
*/
18+
19+
20+
// Stack - LIFO
21+
22+
const stack: number[] = []
23+
24+
// Add item
25+
stack.push(1)
26+
stack.push(2)
27+
stack.push(3)
28+
stack.push(4)
29+
console.log(stack) // [1, 2, 3, 4]
30+
31+
// Remove item -> last item
32+
stack.pop()
33+
console.log(stack) // [1, 2, 3]
34+
stack.pop()
35+
console.log(stack) // [1, 2]
36+
37+
38+
// Queue - FIFO
39+
40+
let queue: number[] = []
41+
42+
// Add item
43+
queue.push(1)
44+
queue.push(2)
45+
queue.push(3)
46+
queue.push(4)
47+
console.log(queue) // [1, 2, 3, 4]
48+
49+
// Remove item -> from the beginning
50+
// Using splice():
51+
queue.splice(0, 1)
52+
console.log(queue) // [2, 3, 4]
53+
// Using slice():
54+
queue = queue.slice(1)
55+
console.log(queue) // [3, 4]
56+
// Using shift()
57+
queue.shift()
58+
console.log(queue) // [4]
59+
60+
61+
/*
62+
* DIFICULTAD EXTRA (opcional):
63+
* - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
64+
* de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
65+
* que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
66+
* Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
67+
* el nombre de una nueva web.
68+
*/
69+
70+
71+
import * as readline from 'readline'
72+
const rl = readline.createInterface({
73+
input: process.stdin,
74+
output: process.stdout
75+
})
76+
77+
78+
const history: string[] = []
79+
let pointer: number = -1
80+
81+
function webNavigation(): void {
82+
const showMenu = (): void => {
83+
console.log('\nType one of the following:');
84+
console.log(' - The web page you want to visit');
85+
console.log(' - Back (to go to the previous page)');
86+
console.log(' - Next (to go to the next page)');
87+
console.log(' - Exit');
88+
}
89+
90+
showMenu()
91+
92+
rl.question('Where do you want to go?\n> ', (action: string) => {
93+
if (action && action.trim().toLowerCase() === 'exit') {
94+
rl.close()
95+
return
96+
} else if (action && action.trim().toLowerCase() === 'next') {
97+
if (pointer !== history.length - 1) {
98+
pointer++
99+
}
100+
console.log(`\nYou are in: ${history[pointer]}`);
101+
} else if (action && action.trim().toLowerCase() === 'back') {
102+
pointer--
103+
if (pointer < 0) {
104+
pointer = -1
105+
console.log('\nYou are in home page')
106+
} else {
107+
console.log(`\nYou are in: ${history[pointer]}`)
108+
}
109+
} else if (action) {
110+
history.push(action)
111+
pointer = history.length - 1
112+
console.log(`\nYou are in: ${history[pointer]}`)
113+
}
114+
115+
webNavigation()
116+
})
117+
}
118+
119+
webNavigation()
120+
121+
122+
/*
123+
* DIFICULTAD EXTRA (opcional):
124+
* - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
125+
* impresora compartida que recibe documentos y los imprime cuando así se le indica.
126+
* La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
127+
* interpretan como nombres de documentos.
128+
*/
129+
130+
131+
const printerQueue: string[] = []
132+
133+
function printer() {
134+
const showMenu = () => {
135+
console.log('\nPrinter options:');
136+
console.log(' - Type a document name to add it to the queue');
137+
console.log(' - Type "print" to print the first item');
138+
console.log(' - Exit');
139+
}
140+
141+
const showQueue = () => {
142+
console.log('\nPrinter Queue:')
143+
144+
if (printerQueue.length > 0) {
145+
for (let doc of printerQueue) {
146+
console.log(` - ${doc}`)
147+
}
148+
} else {
149+
console.log('The Queue is empty.')
150+
}
151+
}
152+
153+
showMenu();
154+
rl.question('Type a document name or "print" to print the first item:\n> ', (action: string) => {
155+
if (action && action.trim().toLowerCase() === 'exit') {
156+
rl.close()
157+
return
158+
} else if (action && action.trim().toLowerCase() === 'print') {
159+
if (printerQueue.length > 0) {
160+
let printingDoc = printerQueue.shift()
161+
console.log(`Printing: ${printingDoc}`)
162+
} else {
163+
console.log('There are no documents to print.')
164+
}
165+
} else if (action) {
166+
printerQueue.push(action)
167+
}
168+
169+
showQueue()
170+
printer()
171+
})
172+
}
173+
174+
printer()

0 commit comments

Comments
 (0)