package com.plectix.simulator.smiles; import java.util.Arrays; import java.util.List; public class FusedRingsCreator { private static final String[] AGENT_NAMES = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" }; private static final String[] SITE_NAMES = { "x", "y", "z" }; private static int linkcounter = 0; public static void main(String[] args) { int count = 0; for (int i = 2; i < 9; i++) { count += createFusedRings(i); } // System.out.println("\nThere are " + count + " fused rings"); } private static int createFusedRings(int quantity) { StringBuffer ccomp = new StringBuffer(); int count = 0; linkcounter = 0; int numberOfAgentsName = 10; for (int j = 5; j < 13; j++) { for (int i = 0; i < quantity; i++) { ccomp.append(addRing(i, j, quantity, numberOfAgentsName)); } count++; // System.out.println(ccomp.substring(0, ccomp.length() - 1)); ccomp = null; ccomp = new StringBuffer(); } return count; } private static String createAgent(int n, List<Integer> links) { StringBuffer sb = new StringBuffer("("); for (int i = 0; i < links.size(); i++) { sb.append(SITE_NAMES[i] + "!" + links.get(i)); sb.append((i == links.size() - 1) ? ")," : ","); } return AGENT_NAMES[n] + sb.toString(); } private static String addRing(int number, int vertices, int quantity, int numberOfAgentsName) { StringBuffer ring = new StringBuffer(); if (number == 0) { linkcounter = 0; for (int i = 0; i < vertices - 2; i++) { ring.append(createAgent(linkcounter % numberOfAgentsName, Arrays.asList(linkcounter, ++linkcounter))); } ring.append(createAgent(linkcounter % numberOfAgentsName, Arrays .asList(linkcounter, ++linkcounter, linkcounter + 1))); ring.append(createAgent(linkcounter % numberOfAgentsName, Arrays .asList(0, linkcounter, linkcounter + 2))); } else if (number < quantity - 1) { for (int i = 0; i < vertices - 4; i++) { ring.append(createAgent(linkcounter % numberOfAgentsName, Arrays.asList(++linkcounter, linkcounter + 2))); } ring.append(createAgent(linkcounter % numberOfAgentsName, Arrays .asList(++linkcounter, linkcounter + 2, linkcounter + 3))); ring.append(createAgent(linkcounter % numberOfAgentsName, Arrays .asList(++linkcounter, ++linkcounter, linkcounter + 2))); } else if (number == quantity - 1) { ring.append(createAgent(linkcounter % numberOfAgentsName, Arrays .asList(++linkcounter, linkcounter + 2))); ++linkcounter; for (int i = 1; i < vertices - 3; i++) { ring.append(createAgent(linkcounter % numberOfAgentsName, Arrays.asList(++linkcounter, linkcounter + 1))); } ring.append(createAgent(linkcounter % numberOfAgentsName, Arrays .asList(++linkcounter, linkcounter - vertices + 3))); } return ring.toString(); } }