Advertisement
techno-

Ej 2 sin acabar

Oct 6th, 2022
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.20 KB | None | 0 0
  1. package SocialDistance;
  2.  
  3. public class SocialDistance {
  4.     public static int[][] crearMatrizRodeados(char[][] layout){
  5.         int i;
  6.         int j;
  7.         int rodeados[][] = new int[layout.length][layout[0].length];
  8.         for(i = 0; i< layout.length; i++){
  9.             for(j= 0; i<layout[0].length; j++){
  10.                 rodeados[i][j]=0;
  11.             }
  12.         }
  13.         return rodeados;
  14.     }
  15.  
  16.  
  17.     public static int[][] contarRodeados(char[][] layout){
  18.         int i;
  19.         int j;
  20.         int [][] rodeados;
  21.         rodeados= crearMatrizRodeados(layout);
  22.         for(i=0; i<layout.length; i++){
  23.             for(j=0; j<layout[i].length; j++){
  24.  
  25.                     if( j>0 && layout[i][j-1]== '#'){
  26.                         rodeados[i][j]++;
  27.                     }
  28.                     if(j<layout[i].length-1  && layout[i][j+1]== '#'){
  29.                         rodeados[i][j]++;
  30.                     }
  31.                     if(i>0) {
  32.                         if (j > 0 && layout[i - 1][j - 1] == '#') {
  33.                             rodeados[i][j]++;
  34.                         }
  35.                         if (layout[i - 1][j] == '#') {
  36.                             rodeados[i][j]++;
  37.                         }
  38.                         if (j < layout[i].length - 1 && layout[i - 1][j + 1] == '#') {
  39.                             rodeados[i][j]++;
  40.                         }
  41.                     }
  42.                     if(i< layout.length-1) {
  43.  
  44.                         if (j > 0 && layout[i +1][j - 1] == '#') {
  45.                             rodeados[i][j]++;
  46.                         }
  47.                         if (layout[i + 1][j] == '#') {
  48.                             rodeados[i][j]++;
  49.                         }
  50.                         if (j < layout[i].length - 1 && layout[i + 1][j + 1] == '#') {
  51.                             rodeados[i][j]++;
  52.                         }
  53.                     }
  54.                 }
  55.             }
  56.         return rodeados;
  57.         }
  58.  
  59.  
  60.  
  61.  
  62.  
  63.     /**
  64.      * Given the layout of a class with available seats marked with an ’A’ and
  65.      * invalid sites marked with a ’. ’, returns the resulting layout with the
  66.      * sites occupied by the students marked with a ’#’ following two rules :
  67.      * - Students occupy an empty seat if there are no other adjacent students .
  68.      * - A student leaves a seat empty if he/ she has 4 or more adjacent students .
  69.      * @param layout The initial layout .
  70.      * @return The resulting layout .
  71.      * @throws IllegalArgumentException if the initial layout is invalid (is null ,
  72.      * is ragged , includes characters other than ’.’ or ’A ’)).
  73.      */
  74.     public static char [][] seatingPeople ( char [][] layout ) {
  75.         int i;
  76.         int j;
  77.         int rodeado = 0;
  78.         int rodeados[][];
  79.         boolean cambio;
  80.  
  81.  
  82.         if (layout == null) {
  83.             throw new IllegalArgumentException("Disposición nula\n");
  84.         }
  85.  
  86.         int rowLength0 = layout[0].length;
  87.         for (j = 1; j < layout.length; j++) {
  88.             if (layout[j].length != rowLength0) {
  89.                 throw new IllegalArgumentException("Ragged array\n");
  90.             }
  91.         }
  92.  
  93.         for (i = 0; i < layout.length; i++) {
  94.             for (j = 0; j < layout[i].length; j++) {
  95.                 if (layout[i][j] != 'A' && layout[i][j] != '.') {
  96.                     throw new IllegalArgumentException("Caracteres invalidos\n");
  97.                 }
  98.             }
  99.         }
  100.  
  101.         do {
  102.             cambio = false;
  103.         rodeados = contarRodeados(layout);
  104.  
  105.  
  106.         for (i = 0; i < layout.length; i++) {
  107.             for (j = 0; j < layout[i].length; j++) {
  108.                 if (layout[i][j] == 'A' && rodeados[i][j] == 0) {
  109.                     layout[i][j] = '#';
  110.                     cambio = true;
  111.                 }
  112.             }
  113.         }
  114.  
  115.         rodeados = contarRodeados(layout);
  116.  
  117.         for (i = 0; i < layout.length; i++) {
  118.             for (j = 0; j < layout[i].length; j++) {
  119.                 if (layout[i][j] == '#' && rodeados[i][j] >= 4) {
  120.                     layout[i][j] = 'A';
  121.                     cambio = true;
  122.                 }
  123.             }
  124.         }
  125.     }while(cambio==true);
  126.  
  127.  
  128.         return layout;
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement