Foros del Web » Programación para mayores de 30 ;) » Java »

Programa de los caníbales en Java

Estas en el tema de Programa de los caníbales en Java en el foro de Java en Foros del Web. Hola a todos, mi problema es el siguiente ya que tengo que prepararlo para dar particular, encontré un código del problema de los misioneros y ...
  #1 (permalink)  
Antiguo 18/07/2019, 22:37
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 419
Antigüedad: 8 años, 4 meses
Puntos: 6
Programa de los caníbales en Java

Hola a todos, mi problema es el siguiente ya que tengo que prepararlo para dar particular, encontré un código del problema de los misioneros y canibales en Python pero intento traducirlo en Java y no lo logro el de validar pero el resto no, pongo el código:

Estado.py

Código Python:
Ver original
  1. import copy
  2.  
  3.  
  4. class Estado:
  5.     def __init__(self, estado, canoa):
  6.         self.estado = estado
  7.         self.canoa = canoa
  8.         if not self.es_valido():
  9.             raise ValueError("estado no válido")
  10.  
  11.     def es_valido(self):
  12.         """Verifica si el estado es válido."""
  13.         # evitamos un número inválido de personas
  14.         for gente in self.estado:
  15.             for persona in gente:
  16.                 if persona > 3 or persona < 0:
  17.                     return False
  18.         # los canibales nunca pueden superar a los misioneros
  19.         for mis, can in self.estado:
  20.             if mis and can > mis:
  21.                 return False
  22.         return True
  23.  
  24.     def viaja(self, gente):
  25.         """
  26.             Genera un nuevo estado basado en el actual y aplicando un
  27.             viaje como parámetro.
  28.        """
  29.         estado = copy.deepcopy(self.estado)
  30.         canoa = self.canoa
  31.         estado[canoa][0] -= gente[0]
  32.         estado[canoa][1] -= gente[1]
  33.         canoa = 0 if canoa else 1
  34.         estado[canoa][0] += gente[0]
  35.         estado[canoa][1] += gente[1]
  36.         return Estado(estado, canoa)
  37.  
  38.     def __str__(self):
  39.         """Muestra el estado como una representación en texto."""
  40.         return "M: %d C: %d | %s\\___/%s | M: %d C: %d" % (
  41.             self.estado[0][0],
  42.             self.estado[0][1],
  43.             "~" * 8 * self.canoa,
  44.             "~" * (8 - 8 * self.canoa),
  45.             self.estado[1][0],
  46.             self.estado[1][1],
  47.         )
  48.  
  49.     def __eq__(self, other):
  50.         return self.estado == other.estado and self.canoa == other.canoa
  51.  
  52.     def __ne__(self, other):
  53.         return not self.__eq__(other)

cuerpo.py

Código Python:
Ver original
  1. from Estado import Estado
  2. import os
  3.  
  4. """
  5.    Código de: https://blackshell.usebox.net/archive/misioneros-y-canibales-en-python.html
  6.    
  7.    6. Implementar el juego de los misionarios y canibales
  8. """
  9.  
  10.  
  11. def main():
  12.     os.system("clear")
  13.     # donde empezamos
  14.     inicio = Estado([[3, 3], [0, 0]], 0)
  15.     # a donde queremos llegar
  16.     final = Estado([[0, 0], [3, 3]], 1)
  17.  
  18.     # los viaje posibles (legales)
  19.     viajes = [[1, 0], [0, 1], [1, 1], [2, 0], [0, 2]]
  20.  
  21.     # los viajes que probamos desde cada estado
  22.     viajes_posibles = list(viajes)
  23.  
  24.     # guardamos el recorrido y las opciones que no hemos usado
  25.     # para poder 'volver atrás' si hay problemas (backtracking)
  26.     recorrido = []
  27.     viajes_restantes = []
  28.  
  29.     while inicio != final and viajes_posibles:
  30.         while viajes_posibles:
  31.             # probamos un viaje cualquiera
  32.             viaje = viajes_posibles.pop()
  33.  
  34.             try:
  35.                 nuevo = inicio.viaja(viaje)
  36.  
  37.                 # si no hemos estado nunca allÃ*
  38.                 if nuevo not in recorrido:
  39.                     # guarda el estado y las opciones restantes
  40.                     recorrido.append(inicio)
  41.                     viajes_restantes.append(viajes_posibles)
  42.  
  43.                     # continuamos desde la nueva posición
  44.                     inicio = nuevo
  45.                     viajes_posibles = list(viajes)
  46.             except ValueError:
  47.                 # no es válido, probamos el siguiente
  48.                 pass
  49.  
  50.         # si no hemos encontrado nada, backtracking
  51.         if not viajes_posibles and recorrido:
  52.             inicio = recorrido.pop()
  53.             viajes_posibles = viajes_restantes.pop()
  54.  
  55.     if inicio == final:
  56.         print("Tenemos un resultado!")
  57.         for estado in recorrido:
  58.             print(estado)
  59.         print(inicio)
  60.     else:
  61.         # no va a pasar ;)
  62.         print("No hemos encontrado un resultado :(")
  63.  
  64.  
  65. if __name__ == "__main__":
  66.     main()

Necesito su ayuda por favor, espero sus respuestas y saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias
  #2 (permalink)  
Antiguo 22/07/2019, 08:39
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.506
Antigüedad: 11 años
Puntos: 188
Respuesta: Programa de los canibales en JAva

Puede que hasta tengas una solución disponible en github si usas google ;)
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}



La zona horaria es GMT -6. Ahora son las 11:41.