JavaScript - ayuda con ejercicio

   
Vista:

ayuda con ejercicio

Publicado por John (6 intervenciones) el 11/12/2017 16:16:55
Buenas a todos, he estado haciendo un ejercicio, en el que al pulsar un botón, se inserta en una tabla de forma aleatoria las letras 'c' de carnívoro, la 'h' de herbívoro y la 'n' de neutral. Pero en la tabla, un herbívoro no puede estar al lado de un carnívoro, ni tampoco encima ni debajo. Varios herbívoros si pueden estar juntos y carnívoros o neutrales también (los carnívoros no se comen a los neutrales). A continuación el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<html>
 
	<head>
		<title>Zoo en JavaScript</title>
 
		<fieldset>
			H --> Animales herbívoros <br>
			N --> Animales neutros <br>
			C --> Animales carnívoros <br>
		</fieldset>
 
		<script type="text/javascript">
 
			// Variables globales -------------------------------------------------
			var aLetras = new Array('H', 'N', 'C');
			var cLetra = aLetras[Math.floor(Math.random()*aLetras.length)];
			// -------------------------------------------------------------------
 
			function genera_tabla(){
 
				var cadena=" ";
				document.getElementById("parrafo").textContent=cadena;
 
				var ancho= prompt ("¿Qué ancho quieres que tenga la tabla?");
				var alto= prompt ("¿Qué alto quieres que tenga la tabla?");
				// Obtener la referencia del elemento body
			 	var body = document.getElementsByTagName("body")[0];
 
			 	// Crea un elemento <table> y un elemento <tbody>
			 	var tabla   = document.createElement("table");
			 	var tblBody = document.createElement("tbody");
 
			 	// Crea las celdas
			 	for (var i = 0; i < ancho; i++) {
				// Crea las hileras de la tabla
			    var hilera = document.createElement("tr");
 
			    for (var j = 0; j < alto; j++) {
			      // Crea un elemento <td> y un nodo de texto, haz que el nodo de
			      // texto sea el contenido de <td>, ubica el elemento <td> al final
			      // de la hilera de la tabla
			      var celda = document.createElement("td");
			      var textoCelda = document.createTextNode(aLetras[Math.floor(Math.random()*aLetras.length)]);
			      celda.appendChild(textoCelda);
			      hilera.appendChild(celda);
			    }
 
				// agrega la hilera al final de la tabla (al final del elemento tblbody)
			    tblBody.appendChild(hilera);
			  }
 
			 	// posiciona el <tbody> debajo del elemento <table>
			 	tabla.appendChild(tblBody);
			 	// appends <table> into <body>
			 	body.appendChild(tabla);
			 	// modifica el atributo "border" de la tabla y lo fija a "2";
			 	tabla.setAttribute("border", "2");
			 	document.getElementById("parrafo").appendChild(tabla);  // Y esta tabla ya formada, se envía al div="parrafo"
			}
 
		</script>
	</head>
 
	<body>
		<p><center><input type="button" value="Colocar animales" onclick="genera_tabla()"></center></p>
		<center><p id="parrafo"></p></center>
	</body>
 
</html>

El ejercicio lo he hecho con DOM, y mi duda es como podría hacer que un carnívoro no esté a los lados, arriba o abajo de un herbívoro, se que una forma sería comparar por ejemplo el valor de una posición tal de un array y si es igual a 'h' se modifica y se añade 'c' pero no se como resolverlo.

Gracias a todos, por vuestra ayuda y atención.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ayuda con ejercicio

Publicado por Andrés (7 intervenciones) el 12/12/2017 03:40:31
qué pasa en el caso:

HNH
NCN
HNH

?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con ejercicio

Publicado por john (6 intervenciones) el 12/12/2017 18:23:34
Sería un caso válido, los neutrales no se comerían a los carnívoros ni a los herbívoros ni a ellos mismos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con ejercicio

Publicado por Andrés (7 intervenciones) el 12/12/2017 07:42:11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<html>
 
<head>
    <title>Zoo en JavaScript</title>
 
    <fieldset>
        H --> Animales herbívoros <br> N --> Animales neutros <br> C --> Animales carnívoros <br>
    </fieldset>
 
    <script type="text/javascript">
        // Variables globales -------------------------------------------------
        var aLetras = new Array('H', 'N', 'C');
        var paraCarnivoro = new Array('C', 'N');
        var paraHervivoro = new Array('H', 'N');
        var paraNeutro = new Array('C', 'H');
        var cLetra = aLetras[Math.floor(Math.random() * aLetras.length)];
        // -------------------------------------------------------------------
 
        function obtenerAnimal(animalAnterior) {
 
            if (animalAnterior === 'C') {
 
                animal = paraCarnivoro[Math.floor(Math.random() * paraCarnivoro.length)];
 
            } else if (animalAnterior === 'H') {
 
                animal = paraHervivoro[Math.floor(Math.random() * paraHervivoro.length)];
 
            } else {
                animal = paraNeutro[Math.floor(Math.random() * paraNeutro.length)];;
            }
 
            return animal;
 
        }
 
        //calcular elementos por diagonal
        function obtenerAnimalRenglonPrevio(animalAnterior, animalAnteriorSuperior) {
 
            var c = animalAnterior + animalAnteriorSuperior;
 
            if (c === 'CN' || c === 'NC' || c === 'CC') {
 
                animal = paraCarnivoro[Math.floor(Math.random() * paraCarnivoro.length)];
 
            } else if (c === 'HN' || c === 'NH' || c === 'HH') {
 
                animal = paraHervivoro[Math.floor(Math.random() * paraHervivoro.length)];
 
            } else if (c === 'CH' || c === 'HC') {
 
                animal = 'N';
 
            } else if (c === 'NN') {
 
                animal = paraNeutro[Math.floor(Math.random() * paraNeutro.length)];;
 
            }
 
            return animal;
 
        }
 
 
        function genera_tabla() {
 
            var cadena = " ";
            document.getElementById("parrafo").textContent = cadena;
 
            var ancho = prompt("¿Qué ancho quieres que tenga la tabla?");
            var alto = prompt("¿Qué alto quieres que tenga la tabla?");
            // Obtener la referencia del elemento body
            var body = document.getElementsByTagName("body")[0];
 
            // Crea un elemento <table> y un elemento <tbody>
            var tabla = document.createElement("table");
            var tblBody = document.createElement("tbody");
            //Renglon actual
            var renglon = [];
            //Renglon anterior
            var renglonAnterior;
            //Animal
            var animal;
 
            // Crea las celdas
            for (var i = 0; i < ancho; i++) {
 
                renglon = [];
 
                // Crea las hileras de la tabla
                var hilera = document.createElement("tr");
 
                for (var j = 0; j < alto; j++) {
                    // Crea un elemento <td> y un nodo de texto, haz que el nodo de
                    // texto sea el contenido de <td>, ubica el elemento <td> al final
                    // de la hilera de la tabla
                    var celda = document.createElement("td");
 
                    //Es el primer elemento
                    if (0 === j) {
                        //Hay mas de un renglon  
                        if (i > 0) {
                            //Esta presente el elemento anterior de un renglon?  
                            if (renglon[j - 1]) {
                                //Obtener elemento por diagonal
                                animal = obtenerAnimalRenglonPrevio(renglon[j - 1], renglonAnterior[j]);
 
                            } else {
                                //Obtener el elemento segun el renglon anterior    
                                animal = obtenerAnimal(renglonAnterior[j]);
                            }
 
                        } else {
                            //Asignar cualquier letra	                
                            animal = aLetras[Math.floor(Math.random() * aLetras.length)];
                        }
 
                    } else {
 
                        //Hay mas de un renglon
                        if (i > 0) {
 
                            //Calcular la letra por diagonal
                            animal = obtenerAnimalRenglonPrevio(renglon[j - 1], renglonAnterior[j]);
 
                        } else {
                            //obtener por elemento anterior   
                            animal = obtenerAnimal(renglon[j - 1]);
 
                        }
 
                    }
 
                    //Guardar el animal
                    renglon.push(animal);
 
                    var textoCelda = document.createTextNode(animal);
                    celda.appendChild(textoCelda);
                    hilera.appendChild(celda);
                }
                //guardar el renglon actual
                //animalAnterior = renglon[0];
 
                renglonAnterior = renglon;
 
                // agrega la hilera al final de la tabla (al final del elemento tblbody)
                tblBody.appendChild(hilera);
            }
 
            // posiciona el <tbody> debajo del elemento <table>
            tabla.appendChild(tblBody);
            // appends <table> into <body>
            body.appendChild(tabla);
            // modifica el atributo "border" de la tabla y lo fija a "2";
            tabla.setAttribute("border", "2");
            document.getElementById("parrafo").appendChild(tabla); // Y esta tabla ya formada, se envía al div="parrafo"
        }
    </script>
</head>
<body>
    <p>
        <center><input type="button" value="Colocar animales" onclick="genera_tabla()"></center>
    </p>
    <center>
        <p id="parrafo"></p>
    </center>
</body>
</html>


Screenshot-from-2017-12-12-00-49-11
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar

ayuda con ejercicio

Publicado por john (6 intervenciones) el 12/12/2017 18:41:16
Impresionante tu solución, la estudiaré a fondo para aprender bien a manejar ejercicios de este tipo. Muchas gracias por ayuda Andrés, me has ayudado mucho
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Enrique

ayuda con ejercicio

Publicado por Enrique (15 intervenciones) el 12/12/2017 18:51:25
Deberías dejar que lo intenten mínimo amigo, a leguas se nota que es un ejercicio para el colegio y tu ya le regalaste la calificación
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar