Advertisement
techno-

EJ 2 DS FINAL

Oct 6th, 2022
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.13 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; j<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 rodeados[][];
  78.         boolean cambio;
  79.  
  80.  
  81.         if (layout == null) {
  82.             throw new IllegalArgumentException("Disposición nula\n");
  83.         }
  84.  
  85.         int rowLength0 = layout[0].length;
  86.         for (j = 1; j < layout.length; j++) {
  87.             if (layout[j].length != rowLength0) {
  88.                 throw new IllegalArgumentException("Ragged array\n");
  89.             }
  90.         }
  91.  
  92.         for (i = 0; i < layout.length; i++) {
  93.             for (j = 0; j < layout[i].length; j++) {
  94.                 if (layout[i][j] != 'A' && layout[i][j] != '.') {
  95.                     throw new IllegalArgumentException("Caracteres invalidos\n");
  96.                 }
  97.             }
  98.         }
  99.  
  100.         do {
  101.             cambio = false;
  102.             rodeados = contarRodeados(layout);
  103.  
  104.  
  105.             for (i = 0; i < layout.length; i++) {
  106.                 for (j = 0; j < layout[i].length; j++) {
  107.                     if (layout[i][j] == 'A' && rodeados[i][j] == 0) {
  108.                         layout[i][j] = '#';
  109.                         cambio = true;
  110.                     }
  111.                 }
  112.             }
  113.  
  114.             rodeados = contarRodeados(layout);
  115.  
  116.             for (i = 0; i < layout.length; i++) {
  117.                 for (j = 0; j < layout[i].length; j++) {
  118.                     if (layout[i][j] == '#' && rodeados[i][j] >= 4) {
  119.                         layout[i][j] = 'A';
  120.                         cambio = true;
  121.                     }
  122.                 }
  123.             }
  124.         }while(cambio==true);
  125.  
  126.  
  127.         return layout;
  128.     }
  129. }
  130.  
  131.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement