import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Truthtable {
static ArrayList<String> array = new ArrayList<String>();
static int counter = 0;
private static void printTruthTable(int n) {
double zstVorher = System.currentTimeMillis();
n *= 2;
int rows = (int) Math.pow(2, n);
String tempString = "";
for (int i = 0; i < rows; i++) {
for (int j = n - 1; j >= 0; j--) {
int temp = i / (int) Math.pow(2, j) % 2;
tempString = tempString.concat((temp == 1) ? "U" : "D");
}
if (tempString != "")
checkString(tempString);
tempString = "";
}
for (String s : array) {
System.out.println(s);
}
double zstNachher = System.currentTimeMillis();
System.out.println("\nZeit benötigt: " + ((zstNachher - zstVorher)) + " msec oder "
+ ((zstNachher - zstVorher) / 1000) + " Sekunden");
System.out.println(counter + " Möglichkeiten für n=" + n / 2 + " (" + n + " Stellen)");
}
public static void checkString(String s) {
if ((s.contains("DUDUDU") && (countDUDU(s, "DUDU") <= 1))
|| (((countDUDU(s, "DUDU") == 2)) && !(s.contains("DUDUDU")))) {
if (s.startsWith("U") && s.endsWith("D")) {
if (checkAmountDU(s)) {
if (countDUDU(s, "D") == countDUDU(s, "U")) {
counter++;
array.add(s);
}
}
}
}
}
public static int countDUDU(String s, String search) {
Pattern p = Pattern.compile(search);
Matcher m = p.matcher(s);
int count = 0;
while (m.find()) {
count += 1;
}
return count;
}
public static boolean checkAmountDU(String s) {
for (int i = 1; i <= s.length(); i++) {
if (!(countDUDU(s.substring(0, i), "D") <= countDUDU(s.substring(0, i), "U"))) {
return false;
}
}
return true;
}
public static void main(String[] args) {
// hier dein tatsächliches n angeben ! (n=5 hat 3 Möglichkeiten z.B.)
printTruthTable(9);
}
}
Comments
0 B
|👍
/👎