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