Skip to content

Commit 36c54b5

Browse files
committed
#7 - Javascript
1 parent 33ab7e9 commit 36c54b5

File tree

1 file changed

+155
-0
lines changed

1 file changed

+155
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
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+
let myStack = [];
20+
21+
// stack Last In, First Out (LIFO)
22+
23+
myStack.push(1)
24+
myStack.push(2)
25+
myStack.push(3)
26+
27+
console.log(myStack);
28+
myStack.pop()
29+
console.log(myStack);
30+
31+
// queue First In, FirstOut (FIFO)
32+
33+
let myQueue = []
34+
35+
myQueue.push(1)
36+
myQueue.push(2)
37+
myQueue.push(3)
38+
39+
console.log(myQueue);
40+
myQueue.shift()
41+
console.log(myQueue)
42+
43+
44+
/*
45+
* Navegacion Adelante y Atras
46+
* - Utilizando la implementación de pila y cadenas de texto, simula el mecanismo adelante/atrás
47+
* de un navegador web. Crea un programa en el que puedas navegar a una página o indicarle
48+
* que te quieres desplazar adelante o atrás, mostrando en cada caso el nombre de la web.
49+
* Las palabras "adelante", "atrás" desencadenan esta acción, el resto se interpreta como
50+
* el nombre de una nueva web.
51+
*/
52+
53+
const browser = {
54+
currentWeb : '',
55+
backHistory : [],
56+
fowardHistory : [],
57+
addHistory : function (str) {
58+
if (this.backHistory.length === 0 && this.currentWeb === '') {
59+
this.currentWeb = str
60+
return this.currentWeb
61+
}
62+
this.backHistory.push(this.currentWeb)
63+
this.currentWeb = str
64+
return this.currentWeb
65+
},
66+
backforward : function () {
67+
// Si existe una pagina actual y si la pila aun tiene un elemento que no sea igual al actual, quiere decir que podemos volver atras
68+
if (this.currentWeb !== '' && this.checkHistory(this.backHistory)) {
69+
this.fowardHistory.push(this.currentWeb) // Quitamos de la cola la pagina actual y la guardamos en la pila fowardsHistory
70+
this.currentWeb = this.backHistory.pop() // Actualizamos la pagina actual y la retornamos
71+
return this.currentWeb
72+
}
73+
return 'No hay historial'
74+
},
75+
forward : function () {
76+
// Si existe una pagina actual y si la pila aun tiene un elemento que no sea igual al actual, quiere decir que podemos ir hacia delante
77+
if (this.currentWeb !== '' && this.checkHistory(this.fowardHistory)) {
78+
this.backHistory.push(this.currentWeb) // Almacenamos la pagina actual en la pila backforward
79+
this.currentWeb = this.fowardHistory.pop() // obtenemos la nueva pagina actual de la pila foward y se quita de fowardHistory
80+
return this.currentWeb
81+
}
82+
return 'No hay historial'
83+
84+
},
85+
checkHistory : (stack) => stack.length === 0 ? false : true
86+
}
87+
88+
89+
const readline = require("readline");
90+
const read = readline.createInterface({
91+
input: process.stdin,
92+
output: process.stdout,
93+
});
94+
95+
const menu = () => {
96+
read.question(
97+
`browser: `,
98+
(option = (option) => {
99+
switch (option) {
100+
case "adelante":
101+
console.log(browser.forward())
102+
console.log('Pagina actual: ' + browser.currentWeb);
103+
menu()
104+
break;
105+
case "atras":
106+
console.log(browser.backforward())
107+
console.log('Pagina actual: ' + browser.currentWeb);
108+
menu()
109+
break;
110+
default:
111+
browser.addHistory(option)
112+
console.log('Pagina actual: ' + browser.currentWeb);
113+
menu()
114+
break;
115+
}
116+
})
117+
);
118+
}
119+
120+
//menu()
121+
122+
/*
123+
* - Utilizando la implementación de cola y cadenas de texto, simula el mecanismo de una
124+
* impresora compartida que recibe documentos y los imprime cuando así se le indica.
125+
* La palabra "imprimir" imprime un elemento de la cola, el resto de palabras se
126+
* interpretan como nombres de documentos.
127+
*/
128+
129+
const printer = {
130+
queue : [],
131+
addDocument : function (str) {this.queue.push(str)},
132+
printDocument : function () {return this.queue.length === 0 ? 'No hay documentos en cola' : this.queue.shift()}
133+
}
134+
135+
136+
const menuPrinter = () => {
137+
read.question(
138+
`Impresora, esperando nueva instruccion: `,
139+
(option = (option) => {
140+
switch (option) {
141+
case "imprimir":
142+
console.log(printer.printDocument())
143+
menuPrinter()
144+
break;
145+
default:
146+
printer.addDocument(option)
147+
console.log(printer.queue)
148+
menuPrinter()
149+
break;
150+
}
151+
})
152+
);
153+
}
154+
155+
//menuPrinter()

0 commit comments

Comments
 (0)