Advertisement
Guest User

Untitled

a guest
Jul 26th, 2015
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.07 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. class Langford {
  4.     private static char[] empty(int length) {
  5.         char[] chars = new char[length];
  6.         Arrays.fill(chars, '#');
  7.         return chars;
  8.     }
  9.  
  10.     private static int alphabetPosition(char c) {
  11.         c = Character.toUpperCase(c);
  12.         return c - 64;
  13.     }
  14.  
  15.     private static char letterValue(int n) {
  16.         return (char) (n + 64);
  17.     }
  18.  
  19.     private static List<char[]> blank(int order, char letter) {
  20.         char[] blank = empty(2 * order);
  21.         return potentialPosition(blank, letter);
  22.     }
  23.  
  24.     private static List<char[]> potentialPosition(char[] langford, char letter) {
  25.  
  26.         final int LENGTH = langford.length;
  27.  
  28.         List<char[]> langfords = new ArrayList<>();
  29.         int v = alphabetPosition(letter);
  30.  
  31.         for (int i = 0; i < LENGTH - v - 1; i++) {
  32.             int left = i;
  33.             int right = i + v + 1;
  34.             if (!Character.isLetter(langford[left]) && !Character.isLetter(langford[right])) {
  35.                 char[] temp = langford.clone();
  36.                 temp[left] = letter;
  37.                 temp[right] = letter;
  38.                 langfords.add(temp);
  39.             }
  40.         }
  41.         return langfords;
  42.     }
  43.  
  44.     public static void langfordStrings(int order) {
  45.         boolean isValidOrder = (order % 4 == 0 || order % 4 == 3);
  46.         if (!isValidOrder) {
  47.             throw new IllegalArgumentException("Order must be a multiple of 4 or one less than a multiple of 4");
  48.         }
  49.  
  50.         List<char[]> squareOne = blank(order, 'A');
  51.         List<char[]> temp = new ArrayList<>();
  52.         for (char c = letterValue(order); c >= 'B'; c--) {
  53.             for (char[] C : squareOne) {
  54.                 temp.addAll(potentialPosition(C, c));
  55.             }
  56.             squareOne.clear();
  57.             squareOne.addAll(temp);
  58.             temp.clear();
  59.         }
  60.         for (char[] C : squareOne) {
  61.             System.out.println(String.valueOf(C));
  62.         }
  63.     }
  64. }
  65.  
  66. class Main {
  67.     public static void main(String args[]) {
  68.         Langford.langfordStrings(8);
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement