elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 23:33  


Tema destacado: Entra al canal IRC oficial de #elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General (Moderador: Littlehorse)
| | |-+  Reto Programación
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Reto Programación  (Leído 1,259 veces)
Oblivi0n

Desconectado Desconectado

Mensajes: 201


Odio las ranas.


Ver Perfil
Reto Programación
« en: 20 Diciembre 2010, 18:26 »

Las soluciones para el ejercicio pueden postearlas en cualquier lenguaje, no se trata de ver quien acaba antes ni que codigo lo hace en menor tiempo, sino en que salga (solo hay una forma de hacerlo creo  :laugh:)

El reto consiste en:

Tenemos un array de 7 elementos, siendo los 3 primeros 1's, el 4 un espacio, y los 3 ultimos 2's, es decir:

Código:
1,1,1,espacio,2,2,2

Lo que tenemos que conseguir, es que los 1's acaben en el lugar de los 2's, y viceversa.
Para ello, los 1's solo se pueden mover hacia la derecha, y los 2's a la izquierda.

Solo se puede mover a la casilla siguiente, en caso de que esta este vacía, y si estuviese ocupada por un contrario, a la siguiente de la siguiente, en caso de que este vacia.

Por si alguien no lo entiende bien, este juego es lo mismo, pero cambia los 1's por ranas y los 2's por sapos  :xD
http://blog.tayuyo.com/2007/09/13/sapos-y-ranas/

Un saludo!
Dedicado a MR.FROG  >:D :laugh:

P.D: El espacio lo podeis representar como un 0, o como os venga en gana, la salida deberia de quedar
Código:
2,2,2,espacio,1,1,1

P.D2 : Los que lo resolvais primero por el juego, no hagais esos movimientos en el programa  :¬¬ , intentad hacerlo generico (para mas tamaños)
Lo se, me explico como el culo


« Última modificación: 20 Diciembre 2010, 18:44 por guru6 » En línea




pucheto

Desconectado Desconectado

Mensajes: 214


Ver Perfil
Re: Reto Programación
« Respuesta #1 en: 21 Diciembre 2010, 01:08 »

Con BFS sale... cada vertice es un estado del juego, los adyacentes son cada posible jugada valida... mas tarde veo si lo codeo... ahora no entiendo para que una entrada... si es fija...


En línea
Oblivi0n

Desconectado Desconectado

Mensajes: 201


Odio las ranas.


Ver Perfil
Re: Reto Programación
« Respuesta #2 en: 21 Diciembre 2010, 15:16 »

Si, me hago un poco el lio explicando jajaja
La profesora de matematicas nos dijo que como mejor se resolvia era con grafos, pero como estamos en 2º de bachiller, no damos eso, dijo que haber quien lo resolvia con los menores pasos posibles jaja
En línea




Afsoon

Desconectado Desconectado

Mensajes: 130


Ver Perfil
Re: Reto Programación
« Respuesta #3 en: 21 Diciembre 2010, 17:22 »

Ya tengo los movimientos del juego voy a hacer a ver si se puede con 4 en cada lado

PD:Una vez que extraes los movimientos lo puedes hacer para X numeros a cada lado, solo que cada vez son mas movimientos con 4 son 25 (Incluyo el estado inicial de 1111  2222)
« Última modificación: 21 Diciembre 2010, 17:31 por Afsoon » En línea
xassiz~


Desconectado Desconectado

Mensajes: 428



Ver Perfil WWW
Re: Reto Programación
« Respuesta #4 en: 21 Diciembre 2010, 20:46 »

Código
#!/usr/bin/env python
#Ranas y sapos
#Autor: pablomi
 
def mover(x):
if array[x]==1:
if array[x+1]==0:
array[x+1] = 1
elif array[x+2]==0:
array[x+2] = 1
elif array[x]==2:
if array[x-1]==0:
array[x-1] = 2
elif array[x-2]==0:
array[x-2] = 2
array[x] = 0
 
array = [1,1,1,0,2,2,2]
movimientos = "245310246531243"
 
print "Antes:   %s" % array
 
for x in movimientos:
mover(int(x))
 
print "Despues: %s" % array
¿Vale así? :laugh:
En línea

Afsoon

Desconectado Desconectado

Mensajes: 130


Ver Perfil
Re: Reto Programación
« Respuesta #5 en: 21 Diciembre 2010, 21:26 »

Si que vale pero dice que no se haga para el ejemplo que pone sino mas generico.
En línea
Darhius


Conectado Conectado

Mensajes: 427


Divide y vencerás.


Ver Perfil
Re: Reto Programación
« Respuesta #6 en: 21 Diciembre 2010, 21:30 »

Si, me hago un poco el lio explicando jajaja
La profesora de matematicas nos dijo que como mejor se resolvia era con grafos, pero como estamos en 2º de bachiller, no damos eso, dijo que haber quien lo resolvia con los menores pasos posibles jaja

Entonces mas bien es una tarea, no un reto  como tal. :¬¬

Pero es interesante crear un algoritmo para resolverlo. Recuerdo que la primera vez lo resolví en 10 segundos, la segunda vez ya no recordaba como xD.

Ahora me has dado algo en que pasar el tiempo.
En línea

"Cuenta mi historia... a quienes pregunten, cuéntala con verdad, las cosas malas junto con las buenas  y permite que sea juzgado apegado ellas... el resto... es silencio." Dinobot (Beast Wars Transformers)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.005



Ver Perfil WWW
Re: Reto Programación
« Respuesta #7 en: 21 Diciembre 2010, 21:40 »

@pablomi
:xD tramposo

Segun creo entender, en el argumento de la funcion a realizar deberiamos incluir el numero (impar) de posiciones posibles, si fuera 9 seria:
Código:
1,1,1,1,0,2,2,2,2

Y de ahi pasarlo a esto:
Código:
2,2,2,2,0,1,1,1,1
Siguiendo las normas del juego, seria bueno que imprimiera los pasos que se realizan para ello.

Entonces mas bien es una tarea, no un reto  como tal. :¬¬
No es para nada deberes ni nada parecido (lo digo porque va a mi mismo instituto)

DoEvents! :P
En línea

ace332

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Reto Programación
« Respuesta #8 en: 21 Diciembre 2010, 23:44 »

Esta sería la serie de movimientos para 4 elementos de cada tipo:
Código:
1111 2222  avance (1)
111 12222  salto  (2)
11121 222  avance (2)
111212 22  salto  (1)
1112 2122  salto  (1)   
11 212122  avance (1)   
1 1212122  salto  (2)   
121 12122  salto  (2)   
12121 122  salto  (2)   
1212121 2  avance (2)
12121212   salto  (1)
121212 21  salto  (1)
1212 2121  salto  (1)
12 212121  salto  (1)
 21212121  avance (2)
2 1212121  salto  (2)
221 12121  salto  (2)
22121 121  salto  (2)
2212121 1  avance (1)
221212 11  salto  (1)
2212 2111  salto  (1)
22 212111  avance (2)
222 12111  salto  (2)
22221 111  avance (1)
2222 1111         

Basandonos en las regularidades que se presentan se puede hacer un par de algoritmos...

Para mañana les traigo uno implementado en C

Saludos ;D
En línea
.:WindHack:.

Desconectado Desconectado

Mensajes: 162


Prisionero de mi propia mente...


Ver Perfil WWW
Re: Reto Programación
« Respuesta #9 en: 21 Diciembre 2010, 23:58 »

¿Sería algo parecido a las torres de Hanoi?.

Por cierto,  :xD

Código
sList = [1,1,1,1,0,2,2,2,2]
print sList
sList.reverse()
print sList

Era joda...
En línea



ace332

Desconectado Desconectado

Mensajes: 66


Ver Perfil
Re: Reto Programación
« Respuesta #10 en: 22 Diciembre 2010, 00:09 »

ajam, hay cierto parecido. En ambos problemas se tienen que realizar movimientos con ciertas restricciones  :)



Bueno como lo prometido es deuda aqui esta el código.
Código
#include <stdio.h>
 
#define MAX_ELEM 1000
 
void permutar(char *a,char *b)
{
 char temp=*a;
 *a=*b;
 *b=temp;
}
 
int main(void)
{
 int i,diravance=1,dirsalto=1,csaltos=1,saltos=1,incsaltos=1,ne,te,uesp,des=-1;
 char a[MAX_ELEM];
 /* leer la cantidad de elementos de cada tipo */
 scanf("%d",&ne);
 /* establecer la posicion inicial de los 1's y 2's */
 te=2*ne+1;
 for(i=0;i<te;i++)
   a[i]=(i<ne)?'1':'2';
 a[ne]=' ';
 a[te]='\0';
 uesp=ne;
 puts(a);
 /* efectuar los cambios en el arreglo */
 while(csaltos>=0)
 {
   permutar(&a[uesp],&a[uesp+des]);
   uesp+=des;
   puts(a);
   /* determinar siguiente movimiento */
   if(saltos)
   {
     des=dirsalto*2;
     saltos--;
   }
   else
   {
     des=diravance;
     saltos=(csaltos+=incsaltos);
     dirsalto*=-1;
     diravance*=-1;
   }
   /* hacer el ajuste necesario luego de la mitad del total de movimientos */
   if(saltos>=ne||ne==1)
   {
     incsaltos=-1;
     diravance=-diravance;
   }
 }
 return 0;
}
 

Que tengan unas felices fiestas!
Saludos  :)

EDIT: Para no hacer doble post
« Última modificación: 22 Diciembre 2010, 18:25 por BeetleJuice » En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
reto en VB6
Ingeniería Inversa
ellolo 1 729 Último mensaje 15 Abril 2005, 10:03
por UnpaCker!
Programacion full - Todo En Uno Programación « 1 2 3 »
Software
loger92 33 11,176 Último mensaje 27 Enero 2012, 05:28
por theluigy13etv
programacion web vs programacion de escritorio
Programación General
lupitapro 2 2,584 Último mensaje 29 Mayo 2010, 05:51
por Dreamaker
Reto de programacion
Programación General
dx671 3 1,126 Último mensaje 24 Junio 2011, 00:50
por Littlehorse
Reto de programacion
Programación C/C++
SXF 9 554 Último mensaje 7 Marzo 2012, 19:29
por Eternal Idol
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines