Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- class Langford {
- private static char[] empty(int length) {
- char[] chars = new char[length];
- Arrays.fill(chars, '#');
- return chars;
- }
- private static int alphabetPosition(char c) {
- c = Character.toUpperCase(c);
- return c - 64;
- }
- private static char letterValue(int n) {
- return (char) (n + 64);
- }
- private static List<char[]> blank(int order, char letter) {
- char[] blank = empty(2 * order);
- return potentialPosition(blank, letter);
- }
- private static List<char[]> potentialPosition(char[] langford, char letter) {
- final int LENGTH = langford.length;
- List<char[]> langfords = new ArrayList<>();
- int v = alphabetPosition(letter);
- for (int i = 0; i < LENGTH - v - 1; i++) {
- int left = i;
- int right = i + v + 1;
- if (!Character.isLetter(langford[left]) && !Character.isLetter(langford[right])) {
- char[] temp = langford.clone();
- temp[left] = letter;
- temp[right] = letter;
- langfords.add(temp);
- }
- }
- return langfords;
- }
- public static void langfordStrings(int order) {
- boolean isValidOrder = (order % 4 == 0 || order % 4 == 3);
- if (!isValidOrder) {
- throw new IllegalArgumentException("Order must be a multiple of 4 or one less than a multiple of 4");
- }
- List<char[]> squareOne = blank(order, 'A');
- List<char[]> temp = new ArrayList<>();
- for (char c = letterValue(order); c >= 'B'; c--) {
- for (char[] C : squareOne) {
- temp.addAll(potentialPosition(C, c));
- }
- squareOne.clear();
- squareOne.addAll(temp);
- temp.clear();
- }
- for (char[] C : squareOne) {
- System.out.println(String.valueOf(C));
- }
- }
- }
- class Main {
- public static void main(String args[]) {
- Langford.langfordStrings(8);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement