Advertisement
IcaroPeretti

IA

Apr 3rd, 2022 (edited)
895
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //  0 - 3 Missionários lado esquerdo
  2. //  1 - 3 Canibais do lado esquerdo
  3. //  2 - 0 Missionários do lado direito
  4. //  3 - 0 Canibais lado direito
  5. //  4 - Lado da canoa 0 - Esq - 1 Dir
  6. let initial_state = [3, 3, 0, 0, 0];
  7.  
  8. let final_state = [0, 0, 3, 3, 1];
  9.  
  10. //  (1,0) - Atravessar 1 missionário
  11. //  (2,0) - Atravessar 2 missionários
  12. //  (1,1) - Atravessar 1 canibal e 1 missionário
  13. //  (0,2) - Atravessar 2 canibais
  14. //  (0,1) - Atravessar 1 canibal
  15. let possibilities = [
  16.   [1, 0],
  17.   [1, 1],
  18.   [2, 0],
  19.   [0, 2],
  20. ];
  21.  
  22. let visited_nodes = [];
  23.  
  24. // Deslocate boat
  25. const moveBoat = (state, qtdMissionaries, qtdCannibals) => {
  26.   if (qtdCannibals + qtdMissionaries > 2) {
  27.     console.log("Não é possível atravessar mais do que 2 pessoas");
  28.     return false;
  29.   }
  30.  
  31.   console.log(qtdCannibals, qtdMissionaries);
  32.  
  33.   if (state[4] == 0) {
  34.     missionariesOrigin = 0;
  35.     cannibalsOrigin = 1;
  36.     missionariesDest = 2;
  37.     cannibalsDest = 3;
  38.   } else {
  39.     missionariesOrigin = 2;
  40.     cannibalsOrigin = 3;
  41.     missionariesDest = 0;
  42.     cannibalsDest = 1;
  43.   }
  44.  
  45.   if (state[missionariesOrigin] == 0 && state[cannibalsOrigin] == 0) {
  46.     console.log("Não é possível atravessar nenhum missionário");
  47.     return;
  48.   }
  49.    
  50.   //Se for 0 passa a ser 1 e se for 1 passa a ser 0
  51.   state[4] = 1 - state[4];
  52.   console.log("Lado da canoa", state[4]);
  53.  
  54.   //Verifica se a qtd de canibais a serem transportados é menor que a qtd de canibais no lada direito
  55.   if (qtdMissionaries < state[missionariesOrigin]) {
  56.     // console.log("Entrei nesse missionario");
  57.     state[missionariesOrigin] -= 1;
  58.     state[missionariesDest] += 1;
  59.   }
  60.  
  61.   if (qtdCannibals < state[cannibalsOrigin]) {
  62.     // console.log("Entrei nesse canibal");
  63.     state[cannibalsOrigin] -= 1;
  64.     state[cannibalsDest] += 1;
  65.   }
  66.   // console.log(state);
  67.   return state;
  68. };
  69.  
  70. const successors = (state) => {
  71.   let successors = [];
  72.   for (let i = 0; i < possibilities.length; i++) {
  73.     var new_state = moveBoat(
  74.       [...state],
  75.       possibilities[i][0],
  76.       possibilities[i][1]
  77.     );
  78.     console.log(
  79.       "MOVE:",
  80.       moveBoat([...state], possibilities[i][0], possibilities[i][1])
  81.     );
  82.     console.log("Successor:", new_state);
  83.     console.log("Current", [...state]);
  84.     if (new_state) {
  85.       if (
  86.         (new_state[0] < new_state[1] && new_state[0] > 0) ||
  87.         (new_state[2] < new_state[3] && new_state[2] > 0)
  88.       ) {
  89.         successors.push(new_state);
  90.       }
  91.     }
  92.   }
  93.   console.log("Arr", successors);
  94.   return successors;
  95. };
  96.  
  97. successors(initial_state);
  98.  
Advertisement
RAW Paste Data Copied
Advertisement