JavaScript - El problema de los hotcakes

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 3 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

El problema de los hotcakes

Publicado por Alexis (1 intervención) el 24/02/2019 06:44:13
Buenas, me interesa saber una forma en la que comenzar con la lógica del problema que me fue dado, este no es el problema de los hotcakes como método de ordenamiento.
Dado un N de hotcakes se irá tomando lectura 1 a 1 preguntándole al usuario en qué estado se encuentra + (volteando hacia arriba) o - (volteando para abajo), después se le pregunta qué número de hotcakes puede voltear la espátula ya que la finalidad del problema es que todos queden viendo hacia arriba o todos viendo hacia abajo; además de mostrar el número de movimientos realizados, en caso no poderse realizar se le muestra el mensaje al usuario.
Ejemplo.
Número de hotcakes: 7
Acomodados de forma: + + - - + - +
Cantidad de hotcakes que puede voltear la espátula en cada moviendo: 2

+ + - - + - +
- - - - + - + (1)
- - - - - + + (2)
- - - - - - - (3)

Se realizaron 3 movimientos.

Agradecería la ayuda, gracias.
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
sin imagen de perfil
Val: 12
Ha disminuido 1 puesto en JavaScript (en relación al último mes)
Gráfica de JavaScript

El problema de los hotcakes

Publicado por Felipe De Jesus (4 intervenciones) el 26/02/2019 17:38:22
Primero, no se en que se basaria uno para saber fisicamente si el hotcake esta de frente o al revez, si solo es representado en codigo de la manera que planteaste solo asi le encontraria logica.
Segundo, En tu dibujo no se por que tomaste 3 iteraciones para poner los hotcakes como +++++++ cuando pudiste solo hacer dos movimientos, esto me hace pensar que requieres de algun orden el cual no indicaste.
Tercero, Si es tal como comprendi podrias preguntar en la consula cuantos hotcakes manejaras, luego de eso mediante un ciclo recorres n veces un mismo codigo que rellene un array bidimensional con dos valores: UNO: numero de hotcake y DOS: estado del hotcake. podrias buscar la manera de que el estado del hotcake se rellene automaticamente mediante un valor random.

Para representar el array y mostrarlo en pantalla mostrarias tal como lo indicaste en el ejemplo: +-++--++
Para editar algun hotcake preguntarias al usuario cuales numeros de hotcake desea modificar, luego de eso tu en tu codigo preguntarias el estado del hotcake n en esa posicion del arrray, cambiarias su estado y volverias a mostrar el array hasta que todos tengan el mismo valor.

Espero haberme explicado bien, Suerte.
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 Alejandro
Val: 1.448
Plata
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

El problema de los hotcakes

Publicado por Alejandro (540 intervenciones) el 27/02/2019 17:55:47
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
El código que te dejo resuelve específicamente el ejemplo que das, porque otra opción es
1
2
3
4
+ + - - + - +
+ + + + + - + (1)
+ + + + + + - (2)
+ + + + + + + (3)

Ademas carece de validaciones pues puede caer en un bucle infinito Ej. 2 hotcakes, + - y la espátula voltea 2
1
2
3
4
5
+ -
- + (1)
+ - (2)
- + (3)
infinito

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
<meta charset="utf-8">
<script>
	aHotcakes = [];
	do{
		nHotcakes = prompt('¿Cuantos hotcakes hay?');
	}while( isNaN(parseInt(nHotcakes)) );
 
	for(i=1; i<=nHotcakes; i++){
		do{
			position = prompt('¿Cual es la posicion del hotcake '+i+'?\r\n+ Arriba\r\n- Abajo');
		}while(position!='+' && position!='-');
		position = (position=="+")?true:false;
		aHotcakes.push(position);
	}
 
	do{
		nTurn4Move = prompt('¿Cuantos hotcakes voltea la espatula?');
	}while( isNaN(parseInt(nTurn4Move)) );
 
	nMoves=0
	while(aHotcakes.indexOf(true)>=0){
		for(i=0, t=aHotcakes.length-1; i<t; i++){
			if(aHotcakes[i]){
				for(j=0;j<nTurn4Move;j++){
					aHotcakes[i+j]   = !aHotcakes[i+j];
				}
				nMoves++;
				document.write(nMoves+')');
				for( position of aHotcakes){
					position = position?'+':'-';
					document.write(position);
				}
				document.write('<br />');
			}
		}
	}
	alert('Se realizaron '+nMoves+' movimientos.');
</script>
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