SaveText.Ru

Без имени
  1. package com.javarush.task.task20.task2027;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. /*
  7. Кроссворд
  8. */
  9. public class Solution {
  10.     public static void main(String[] args) {
  11.         int[][] crossword = new int[][]{
  12.                 {'f', 'f', 'f', 'f', 'f', 'f'},    // 0
  13.                 {'f', 'f', 's', 'x', 's', 'f'},    // 1
  14.                 {'f', 'f', 's', 'e', 'x', 'f'},    // 2
  15.                 {'f', 'f', 'x', 's', 'x', 'f'},    // 3
  16.                 {'f', 'f', 'f', 'f', 'f', 'f'}
  17.         };
  18.         detectAllWords(crossword, "home", "same", "sex").forEach(System.out::println);
  19.         /*
  20. Ожидаемый результат
  21. home - (5, 3) - (2, 0)
  22. same - (1, 1) - (4, 1)
  23.          */
  24.     }
  25.  
  26.     public static List<Word> detectAllWords(int[][] crossword, String... words) {
  27.         List<Word> list = new ArrayList<Word>();
  28.         for(int m = 0; m < words.length; m++) {
  29.             String s = words[m];
  30.             String[] ss = s.split("");
  31.             if(s.length() > 1) {
  32.                 for (int j = 0; j < crossword.length; j++) {
  33.                     for (int i = 0; i < crossword[0].length; i++) {
  34.  
  35.                         if (String.valueOf((char) crossword[j][i]).equals(ss[0])) {
  36.                             boolean flag = true;
  37.                             try {
  38.                                 for (int f = 1; f < s.length(); f++) {
  39.                                     if (!String.valueOf((char) crossword[j][i + f]).equals(ss[f])) {
  40.                                         flag = false;
  41.                                     }
  42.                                 }
  43.                             } catch (Exception e) {
  44.                                 flag = false;
  45.                             }
  46.                             if (flag) {
  47.                                 Word word = new Word(s);
  48.                                 word.setStartPoint(i, j);
  49.                                 word.setEndPoint(i + (s.length() - 1), j);
  50.                                 list.add(word);
  51.                             }
  52.                         }
  53.                     }
  54.                 }
  55.                 for (int j = 0; j < 5; j++) {
  56.                     for (int i = 0; i < 6; i++) {
  57.  
  58.                         if (String.valueOf((char) crossword[j][i]).equals(ss[0])) {
  59.                             boolean flag = true;
  60.                             try {
  61.                                 for (int f = 1; f < s.length(); f++) {
  62.                                     if (!String.valueOf((char) crossword[j][i - f]).equals(ss[f])) {
  63.                                         flag = false;
  64.                                     }
  65.                                 }
  66.                             } catch (Exception e) {
  67.                                 flag = false;
  68.                             }
  69.                             if (flag) {
  70.                                 Word word = new Word(s);
  71.                                 word.setStartPoint(i, j);
  72.                                 word.setEndPoint(i - (s.length() - 1), j);
  73.                                 list.add(word);
  74.                             }
  75.                         }
  76.                     }
  77.                 }
  78.                 for (int j = 0; j < 5; j++) {
  79.                     for (int i = 0; i < 6; i++) {
  80.  
  81.                         if (String.valueOf((char) crossword[j][i]).equals(ss[0])) {
  82.                             boolean flag = true;
  83.                             try {
  84.                                 for (int f = 1; f < s.length(); f++) {
  85.                                     if (!String.valueOf((char) crossword[j + f][i]).equals(ss[f])) {
  86.                                         flag = false;
  87.                                     }
  88.                                 }
  89.                             } catch (Exception e) {
  90.                                 flag = false;
  91.                             }
  92.                             if (flag) {
  93.                                 Word word = new Word(s);
  94.                                 word.setStartPoint(i, j);
  95.                                 word.setEndPoint(i, j + (s.length() - 1));
  96.                                 list.add(word);
  97.                             }
  98.                         }
  99.                     }
  100.                 }
  101.                 for (int j = 0; j < 5; j++) {
  102.                     for (int i = 0; i < 6; i++) {
  103.  
  104.                         if (String.valueOf((char) crossword[j][i]).equals(ss[0])) {
  105.                             boolean flag = true;
  106.                             try {
  107.                                 for (int f = 1; f < s.length(); f++) {
  108.                                     if (!String.valueOf((char) crossword[j - f][i]).equals(ss[f])) {
  109.                                         flag = false;
  110.                                     }
  111.                                 }
  112.                             } catch (Exception e) {
  113.                                 flag = false;
  114.                             }
  115.                             if (flag) {
  116.                                 Word word = new Word(s);
  117.                                 word.setStartPoint(i, j);
  118.                                 word.setEndPoint(i, j - (s.length() - 1));
  119.                                 list.add(word);
  120.                             }
  121.                         }
  122.                     }
  123.                 }
  124.                 for (int j = 0; j < 5; j++) {
  125.                     for (int i = 0; i < 6; i++) {
  126.  
  127.                         if (String.valueOf((char) crossword[j][i]).equals(ss[0])) {
  128.                             boolean flag = true;
  129.                             try {
  130.                                 for (int f = 1; f < s.length(); f++) {
  131.                                     if (!String.valueOf((char) crossword[j - f][i + f]).equals(ss[f])) {
  132.                                         flag = false;
  133.                                     }
  134.                                 }
  135.                             } catch (Exception e) {
  136.                                 flag = false;
  137.                             }
  138.                             if (flag) {
  139.                                 Word word = new Word(s);
  140.                                 word.setStartPoint(i, j);
  141.                                 word.setEndPoint(i + (s.length() - 1), j - (s.length() - 1));
  142.                                 list.add(word);
  143.                             }
  144.                         }
  145.                     }
  146.                 }
  147.                 for (int j = 0; j < 5; j++) {
  148.                     for (int i = 0; i < 6; i++) {
  149.  
  150.                         if (String.valueOf((char) crossword[j][i]).equals(ss[0])) {
  151.                             boolean flag = true;
  152.                             try {
  153.                                 for (int f = 1; f < s.length(); f++) {
  154.                                     if (!String.valueOf((char) crossword[j + f][i + f]).equals(ss[f])) {
  155.                                         flag = false;
  156.                                     }
  157.                                 }
  158.                             } catch (Exception e) {
  159.                                 flag = false;
  160.                             }
  161.                             if (flag) {
  162.                                 Word word = new Word(s);
  163.                                 word.setStartPoint(i, j);
  164.                                 word.setEndPoint(i + (s.length() - 1), j + (s.length() - 1));
  165.                                 list.add(word);
  166.                             }
  167.                         }
  168.                     }
  169.                 }
  170.                 for (int j = 0; j < 5; j++) {
  171.                     for (int i = 0; i < 6; i++) {
  172.  
  173.                         if (String.valueOf((char) crossword[j][i]).equals(ss[0])) {
  174.                             boolean flag = true;
  175.                             try {
  176.                                 for (int f = 1; f < s.length(); f++) {
  177.                                     if (!String.valueOf((char) crossword[j + f][i - f]).equals(ss[f])) {
  178.                                         flag = false;
  179.                                     }
  180.                                 }
  181.                             } catch (Exception e) {
  182.                                 flag = false;
  183.                             }
  184.                             if (flag) {
  185.                                 Word word = new Word(s);
  186.                                 word.setStartPoint(i, j);
  187.                                 word.setEndPoint(i - (s.length() - 1), j + (s.length() - 1));
  188.                                 list.add(word);
  189.                             }
  190.                         }
  191.                     }
  192.                 }
  193.                 for (int j = 0; j < 5; j++) {
  194.                     for (int i = 0; i < 6; i++) {
  195.  
  196.                         if (String.valueOf((char) crossword[j][i]).equals(ss[0])) {
  197.                             boolean flag = true;
  198.                             try {
  199.                                 for (int f = 1; f < s.length(); f++) {
  200.                                     if (!String.valueOf((char) crossword[j - f][i - f]).equals(ss[f])) {
  201.                                         flag = false;
  202.                                     }
  203.                                 }
  204.                             } catch (Exception e) {
  205.                                 flag = false;
  206.                             }
  207.                             if (flag) {
  208.                                 Word word = new Word(s);
  209.                                 word.setStartPoint(i, j);
  210.                                 word.setEndPoint(i - (s.length() - 1), j - (s.length() - 1));
  211.                                 list.add(word);
  212.                             }
  213.                         }
  214.                     }
  215.                 }
  216.             }
  217.             if(s.length() == 1) {
  218.                 for (int j = 0; j < crossword.length; j++) {
  219.                     for (int i = 0; i < crossword[0].length; i++) {
  220.                         if (String.valueOf((char) crossword[j][i]).equals(s)) {
  221.                             Word word = new Word(s);
  222.                             word.setStartPoint(i, j);
  223.                             word.setEndPoint(i , j);
  224.                             list.add(word);
  225.                         }
  226.                     }
  227.                 }
  228.             }
  229.         }
  230.  
  231.  
  232.         return list;
  233.     }
  234.  
  235.     public static class Word {
  236.         private String text;
  237.         private int startX;
  238.         private int startY;
  239.         private int endX;
  240.         private int endY;
  241.  
  242.         public Word(String text) {
  243.             this.text = text;
  244.         }
  245.  
  246.         public void setStartPoint(int i, int j) {
  247.             startX = i;
  248.             startY = j;
  249.         }
  250.  
  251.         public void setEndPoint(int i, int j) {
  252.             endX = i;
  253.             endY = j;
  254.         }
  255.  
  256.         @Override
  257.         public String toString() {
  258.             return String.format("%s - (%d, %d) - (%d, %d)", text, startX, startY, endX, endY);
  259.         }
  260.     }
  261. }
  262.  

Share with your friends:

Print