import java.util.*;
import java.util.zip.*;
import java.util.List;
import java.util.regex.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
import java.util.concurrent.locks.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.table.*;
import java.io.*;
import java.net.*;
import java.lang.reflect.*;
import java.lang.ref.*;
import java.lang.management.*;
import java.security.*;
import java.security.spec.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.math.*;
import java.text.NumberFormat;
import java.text.*;
import java.util.TimeZone;
import javax.swing.undo.UndoManager;
import java.text.SimpleDateFormat;
import java.awt.datatransfer.StringSelection;
class main {
static PatternMaker1 test_PatternMaker1() {
PatternMaker1 pm = test_PatternMaker1_1();
pm.counterexamplesText += "\n" + "Ist das Licht im Flur an?";
pm.makeStrategy = () -> new PatternMaker1_Strategy2(pm);
pm.think();
assertNempty(print("Solution", pm.simplestFullSolution));
mmo2_simplePatternCheck(pm.examplesText, pm.counterexamplesText, pm.simplestFullSolution);
return pm;
}
// This one is solved
static PatternMaker1 test_PatternMaker1_1() {
String examples = "\r\n Mache das licht im wohnzimmer nicht an\r\n Mache das Licht an\r\n Mache das Licht im Wohnzimmer aus\r\n Mache\r\n An\r\n Aus\r\n Mache das licht an\r\n Mache das Licht im flur aus\r\n Flur aus\r\n Mache an\r\n Mache das Licht im flur an\r\n Licht an\r\n Mache das licht aus\r\n licht im flur an\r\n Mache das licht im flur an und das licht im wohnzimmer aus\r\n Wohnzimmer an\r\n ";
String counterexamples = "\r\n Licht\r\n nicht\r\n Im Wohnzimmer\r\n Licht im Flur\r\n Im Flur\r\n Wohnzimmer\r\n Flur\r\n ";
PatternMaker1 pm = new PatternMaker1(examples, counterexamples);
pm.think();
assertEqualsIC(tok_sortCommaListCI("Mache, an, aus"), tok_sortCommaListCI(pm.simplestFullSolution));
mmo2_simplePatternCheck(examples, counterexamples, pm.simplestFullSolution);
return pm;
}
static A assertNempty(A a) {
return assertNempty("empty", a);
}
static A assertNempty(String msg, A a) {
if (empty(a)) throw fail(msg + ": " + a);
return a;
}
static volatile StringBuffer local_log = new StringBuffer(); // not redirected
static volatile Appendable print_log = local_log; // might be redirected, e.g. to main bot
// in bytes - will cut to half that
static volatile int print_log_max = 1024*1024;
static volatile int local_log_max = 100*1024;
static boolean print_silent = false; // total mute if set
static Object print_byThread_lock = new Object();
static volatile ThreadLocal