Commit 6763731a by Hut

many much

parent b450ff1d
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
# * Deploy built artifacts from master branch only. # * Deploy built artifacts from master branch only.
# * Shows how to use multiple jobs in test stage for verifying functionality # * Shows how to use multiple jobs in test stage for verifying functionality
# with multiple JDKs. # with multiple JDKs.
# * Uses site:stage to collect the documentation for multi-module projects. # * Uses site:stage to combineToTokens the documentation for multi-module projects.
# * Publishes the documentation for `master` branch. # * Publishes the documentation for `master` branch.
variables: variables:
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<groupId>passive.directory</groupId> <groupId>passive.directory</groupId>
<artifactId>markov</artifactId> <artifactId>markov</artifactId>
<version>1.0-SNAPSHOT</version> <version>0.2</version>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
...@@ -29,6 +29,12 @@ ...@@ -29,6 +29,12 @@
<version>1.0.0</version> <version>1.0.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -10,52 +10,51 @@ import java.util.function.Function; ...@@ -10,52 +10,51 @@ import java.util.function.Function;
public class Builder { public class Builder {
private final int prefix_length; private final int prefix_length;
private final Data data; private final Data data;
public Builder(int prefix_length, Data data) { public Builder(int prefix_length, Data data) {
super(); super();
this.prefix_length = prefix_length; this.prefix_length = prefix_length;
this.data = data; this.data = data;
} }
public Collection<Map.Entry<Prefix, Token>> random() { public Collection<Map.Entry<Prefix, Decission>> random() {
return produce(p -> nextRandom(p)); return produce(p -> nextRandom(p));
} }
public Collection<Map.Entry<Prefix, Token>> average() { public Collection<Map.Entry<Prefix, Decission>> average() {
return produce(p -> data.fetch(p).average()); return produce(p -> data.fetch(p).average());
} }
private Collection<Map.Entry<Prefix, Token>> produce( private Collection<Decission> produce(
Function<Prefix, Token> producer) { Function<Prefix, Decission> producer) {
List<Map.Entry<Prefix, Token>> result = new LinkedList<>(); List<Decission> result = new LinkedList<>();
Prefix p = initPrefix(); Prefix p = initPrefix();
Token t = Token.START; Decission d = new Decission(Token.START, 0, p, null);
for (int i = 0; i < 200; i++) { for (int i = 0; i < 1000; i++) {
if (t == Token.END) if (d.getToken() == Token.END)
break; break;
t = producer.apply(p); d = producer.apply(p);
result.add(new AbstractMap.SimpleEntry<Prefix, Token>(p, t)); result.add(new AbstractMap.SimpleEntry<>(p, d));
p = p.slide(t); p = p.slide(d.getToken(), prefix_length);
} }
return result; return result;
} }
private Prefix initPrefix() { private Prefix initPrefix() {
Token[] initToken = new Token[prefix_length]; return new Prefix(new Token[0]);
for (int i = 0; i < prefix_length; i++) { }
initToken[i] = Token.START;
} private Decission nextRandom(Prefix prefix) {
Prefix p = new Prefix(initToken); Lookup l = data.fetch(prefix);
return p; if (l == null) {
} throw new NullPointerException(String.format("could not find a lookup for %s", prefix));
}
private Token nextRandom(Prefix prefix) { return l.forRandom(nextRandomNumber());
return data.fetch(prefix).forRandom(nextRandomNumber()); }
}
private double nextRandomNumber() {
private double nextRandomNumber() { return ThreadLocalRandom.current().nextDouble();
return ThreadLocalRandom.current().nextDouble(); }
}
} }
package markov;
import java.util.Collection;
import java.util.stream.Stream;
public class Collector {
private final int prefixLength;
private final Prefix[] slider = new Prefix[]{getNewPrefix()};
private final Data data;
public Collector(int prefixLength) {
this.prefixLength = prefixLength;
this.data = new Data(prefixLength);
}
public void learn(Token token) {
data.add(slider[0], token);
slider[0] = slider[0].slide(token, this.prefixLength);
}
public void reset() {
slider[0] = getNewPrefix();
}
private Prefix getNewPrefix() {
return new Prefix(new Token[0]);
}
public int getPrefixLength() {
return prefixLength;
}
public Data getData() {
return data;
}
}
...@@ -8,52 +8,64 @@ import java.util.stream.Collectors; ...@@ -8,52 +8,64 @@ import java.util.stream.Collectors;
// FIXME rename // FIXME rename
public class Data { public class Data {
private final Map<Prefix, Lookup> data = new HashMap<>(); private final int prefixLength;
private final Map<Prefix, Lookup> data = new HashMap<>();
public void add(Prefix p, Token t) {
Lookup l = data.getOrDefault(p, new Lookup()); public Data(int prefixLength) {
l.add(t); this.prefixLength = prefixLength;
data.put(p, l); }
}
public int getPrefixLength() {
public Lookup fetch(Prefix p) { return prefixLength;
return data.get(p); }
}
public void add(Prefix p, Token t) {
public Lookup info(Token... t) { Lookup l = data.getOrDefault(p, new Lookup());
return data.get(new Prefix(t)); // System.out.println(String.format("adding %s - %s", p, t, l));
} l.add(t);
data.put(p, l);
public Lookup info(String... s) { }
return data.get(new Prefix(Arrays.stream(s).map(t -> new Token(t, Glyph.Type.word))
.collect(Collectors.toList()))); public Lookup fetch(Prefix p) {
} return data.get(p);
}
@Override
public String toString() { public Lookup info(Token... t) {
return "Data [data=" + data + "]"; return data.get(new Prefix(t));
} }
public String dumpStats() { public Lookup info(String... s) {
return "Total hits: " return data.get(new Prefix(Arrays.stream(s).map(t -> new Token(t, Glyph.Type.word))
+ data.entrySet().stream() .collect(Collectors.toList())));
.sorted((o1, }
o2) -> -1 * Integer.compare(
o1.getValue().getTotalCounts(), @Override
o2.getValue().getTotalCounts())) public String toString() {
.map(e -> String.format("%s - %d", e.getKey(), return "Data [data=" + data + "]";
e.getValue().getTotalCounts())) }
.collect(Collectors.joining(", "))
+ "\n" + "Distinct possibilities " public String dumpStats() {
+ data.entrySet().stream() return "Total hits: "
.sorted((o1, + data.entrySet().stream()
o2) -> -1 * Integer.compare( .sorted((o1,
o1.getValue().getDistinctTokens(), o2) -> -1 * Integer.compare(
o2.getValue().getDistinctTokens())) o1.getValue().getTotalCounts(),
.map(e -> String.format("%s - %d", e.getKey(), o2.getValue().getTotalCounts()))
e.getValue().getDistinctTokens())) .limit(50)
.collect(Collectors.joining(", ")); .map(e -> String.format("%s - %d", e.getKey(),
e.getValue().getTotalCounts()))
} .collect(Collectors.joining(", "))
+ "\n" + "Distinct possibilities "
+ data.entrySet().stream()
.sorted((o1,
o2) -> -1 * Integer.compare(
o1.getValue().getDistinctTokens(),
o2.getValue().getDistinctTokens()))
.limit(50)
.map(e -> String.format("%s - %d", e.getKey(),
e.getValue().getDistinctTokens()))
.collect(Collectors.joining(", "));
}
} }
package markov;
public class Decission {
private final Token token;
private final int id;
private Prefix p;
private Lookup lookup;
public Decission(Token key, int id) {
token = key;
this.id = id;
}
public void setLookup(Lookup lookup) {
this.lookup = lookup;
}
public void setP(Prefix p) {
this.p = p;
}
public Prefix getP() {
return p;
}
public Lookup getLookup() {
return lookup;
}
public Token getToken() {
return token;
}
public int getId() {
return id;
}
}
...@@ -2,12 +2,9 @@ package markov; ...@@ -2,12 +2,9 @@ package markov;
public class Glyph { public class Glyph {
public enum Type { public enum Type {
word, interpunction, control, whitespace, empty word, punctuation, control, whitespace, empty, other
} }
public static final Glyph Start = new Glyph(Type.control, "START");
public static final Glyph End = new Glyph(Type.control, "END");
private Type type; private Type type;
private String content; private String content;
......
...@@ -5,18 +5,8 @@ import java.util.Map.Entry; ...@@ -5,18 +5,8 @@ import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
// FIXME rename
public class Lookup { public class Lookup {
public static final Lookup empty = new Lookup() {
public Token forRandom(double random) {
return Token.EMPTY;
}
};
public Lookup() {
}
private final LinkedHashMap<Token, Integer> tokens = new LinkedHashMap<Token, Integer>(); private final LinkedHashMap<Token, Integer> tokens = new LinkedHashMap<Token, Integer>();
int getTotalCounts() { int getTotalCounts() {
...@@ -36,8 +26,8 @@ public class Lookup { ...@@ -36,8 +26,8 @@ public class Lookup {
tokens.put(t, i + 1); tokens.put(t, i + 1);
} }
public Token forRandom(double random) { public Decission forRandom(double random) {
if(random <0 || random >=1) { if (random < 0 || random >= 1) {
throw new IllegalArgumentException("expected double [0; 1)"); throw new IllegalArgumentException("expected double [0; 1)");
} }
int id = (int) Math.floor(random * getTotalCounts()); int id = (int) Math.floor(random * getTotalCounts());
...@@ -45,7 +35,24 @@ public class Lookup { ...@@ -45,7 +35,24 @@ public class Lookup {
for (Entry<Token, Integer> entry : tokens.entrySet()) { for (Entry<Token, Integer> entry : tokens.entrySet()) {
i += entry.getValue(); i += entry.getValue();
if (id < i) { if (id < i) {
return entry.getKey(); return new Decission(entry.getKey(), id);
}
}
throw new IllegalStateException(String.format(
"failed to find a random token with seed %d within %s", id,
this));
}
public Decission forId(int id) {
if (id < 0 || id > getTotalCounts()) {
throw new IllegalArgumentException("expected id [0; totalCount)");
}
int i = 0;
for (Entry<Token, Integer> entry : tokens.entrySet()) {
i += entry.getValue();
if (id < i) {
return new Decission(entry.getKey(), id);
} }
} }
throw new IllegalStateException(String.format( throw new IllegalStateException(String.format(
...@@ -54,14 +61,14 @@ public class Lookup { ...@@ -54,14 +61,14 @@ public class Lookup {
} }
public Token average() { public Decission average() {
return tokens return tokens
.entrySet().stream().sorted((e1, e2) -> Integer .entrySet().stream().sorted((e1, e2) -> Integer
.compare(e2.getValue(), e1.getValue())) .compare(e2.getValue(), e1.getValue()))
.findFirst().get().getKey(); .findFirst().map(e -> new Decission(e.getKey(), e.getValue())).get();
} }
public Set<Token> allPosible() { public Set<Token> allPossible() {
return this.tokens.keySet(); return this.tokens.keySet();
} }
......
package markov;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Stream;
public class Mail {
public static void main(String[] args) {
int prefixLength = 3;
Parser parser = new Parser();
File parent = new File("C:\\Users\\admin\\Desktop\\emails");
Stream<String> mails = Arrays.stream(parent.listFiles()).limit(500).map(file -> file.toPath()).map(path -> {
try {
MimeMessage m = new MimeMessage(Session.getDefaultInstance(new Properties()), Files.newInputStream(path));
//System.out.println(m.getContentType());
// return m.getContent().toString();
return m;
} catch (IOException | MessagingException e) {
throw new RuntimeException(e);
}
}).filter(mimeMessage -> {
try {
return mimeMessage.getContentType().contains("text/plain");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}).map(m -> {
try {
return m.getContent().toString();
} catch (IOException | MessagingException e) {
throw new RuntimeException(e);
}
});
Data data = Utils.parse(mails, prefixLength);
Builder b = new Builder(prefixLength, data);
Renderer r = new Renderer(data, Renderer.Options.FULL);
Renderer r1 = new Renderer(data, Renderer.Options.NONE);
Shortener shortener = new Shortener(data);
for (int i = 0; i < 10; i++) {
Collection<Map.Entry<Prefix, Decission>> sentence = b.random();
// System.out.println(r1.render(sentence));
String id = shortener.getId(sentence);
System.out.println(id);
// System.out.println(r.render(shortener.getSentence(id)));
}
// Collection<Map.Entry<Prefix, Token>> a = b.average();
// System.out.println("average: " + r.render(a));
// for (Map.Entry<Prefix, Token> e : a) {
// System.out.println(e.getKey() + " -> " + data.fetch(e.getKey()));
// }
// System.out.println(data.dumpStats());
}
}
package markov; package markov;
import java.util.Collection;
import java.util.Map;
import java.util.stream.Stream;
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) {
int prefixLength = 2;
// Data data = new Parser_first_version(prefixLength).parse(input);
Data data = Utils.parse(Stream.of(input.replace("Kai☺UWE empfiehlt ", "").split("\n")), prefixLength);
Builder b = new Builder(prefixLength, data);
Renderer r = new Renderer(data, Renderer.Options.NONE);
Renderer r2 = new Renderer(data, Renderer.Options.FULL);
Collection<Map.Entry<Prefix, Decission>> sentence = b.random();
for (int i = 0; i < 1; i++) {
System.out.println(r2.render(sentence));
}
Shortener shortener = new Shortener(data);
String id = shortener.getId(sentence);
System.out.println(id);
System.out.println(r.render(shortener.getSentence(id)));
int prefixLength = 2; // Collection<Map.Entry<Prefix, Decission>> a = b.average();
Data data = new Parser_first_version(prefixLength).parse(input); // System.out.println("average: " + r.render(a));
Builder b = new Builder(prefixLength, data); // for (Map.Entry<Prefix, Decission> e : a) {
Renderer r = new Renderer(data, Renderer.Options.FULL); // System.out.println(e.getKey() + " -> " + data.fetch(e.getKey()));
for (int i = 0; i < 25; i++) { // }
System.out.println(r.render(b.random())); // System.out.println(data.dumpStats());
} }
// Collection<Entry<Prefix, Token>> a = b.average();
// System.out.println("average: " + r.render(a));
// for (Entry<Prefix, Token> e : a) {
// System.out.println(e.getKey() + " -> " + data.fetch(e.getKey()));
// }
// System.out.println(data.dumpStats());
}
private static final String input = "Kai☺UWE empfiehlt \"langsam ist Präzise und Präzise ist schnell\" zu verinnerlichen.\n" private static final String input = "Kai☺UWE empfiehlt \"langsam ist Präzise und Präzise ist schnell\" zu verinnerlichen.\n"
+ "Kai☺UWE empfiehlt 3 Tage wach und dann mehr als nur Mitspieler abschießen.\n" + "Kai☺UWE empfiehlt 3 Tage wach und dann mehr als nur Mitspieler abschießen.\n"
+ "Kai☺UWE empfiehlt Becher die unter dem Bett gefunden werden zu spülen, bevor man kalten Glühwein daraus trinkt.\n" + "Kai☺UWE empfiehlt Becher die unter dem Bett gefunden werden zu spülen, bevor man kalten Glühwein daraus trinkt.\n"
+ "Kai☺UWE empfiehlt Betreff lesen.\n" + "Kai☺UWE empfiehlt Betreff lesen.\n"
+ "Kai☺UWE empfiehlt Bier in netter Gesellschaft zu trinken und nicht auf dem Zimmer zu versauern.\n" + "Kai☺UWE empfiehlt Bier in netter Gesellschaft zu trinken und nicht auf dem Zimmer zu versauern.\n"
+ "Kai☺UWE empfiehlt Bis zum Absturz\n" + "Kai☺UWE empfiehlt Bis zum Absturz\n"
+ "Kai☺UWE empfiehlt BlaBlaBla\n" + "Kai☺UWE empfiehlt BlaBlaBla\n"
+ "Kai☺UWE empfiehlt Blow Job mit anschließendem Orgasmus.\n" + "Kai☺UWE empfiehlt Blow Job mit anschließendem Orgasmus.\n"
+ "Kai☺UWE empfiehlt Die doofste Mütze, die man sich nur vorstellen kann, aus dem Schrank suchen und damit ins K1 zu kommen!\n" + "Kai☺UWE empfiehlt Die doofste Mütze, die man sich nur vorstellen kann, aus dem Schrank suchen und damit ins K1 zu kommen!\n"
+ "Kai☺UWE empfiehlt Ehemalige oder alte Hasen mit ins Team zu nehmen, um mehr Know-How von damals™ zu haben.\n" + "Kai☺UWE empfiehlt Ehemalige oder alte Hasen mit ins Team zu nehmen, um mehr Know-How von damals™ zu haben.\n"
+ "Kai☺UWE empfiehlt Einfich immer alles aufs erste mal richtig zu machen.\n" + "Kai☺UWE empfiehlt Einfich immer alles aufs erste mal richtig zu machen.\n"
+ "Kai☺UWE empfiehlt Einzelabstimmung\n" + "Kai☺UWE empfiehlt Einzelabstimmung\n"
+ "Kai☺UWE empfiehlt Empfehlungen nicht zu ernst zu nehmen und lieber mal wieder Frankreich auf Ketten zu besuchen.\n" + "Kai☺UWE empfiehlt Empfehlungen nicht zu ernst zu nehmen und lieber mal wieder Frankreich auf Ketten zu besuchen.\n"
+ "Kai☺UWE empfiehlt Fechten zu lernen, Schmiss sieht einfach net so richtig geil aus.\n" + "Kai☺UWE empfiehlt Fechten zu lernen, Schmiss sieht einfach net so richtig geil aus.\n"
+ "Kai☺UWE empfiehlt Fleisch\n" + "Kai☺UWE empfiehlt Fleisch\n"
+ "Kai☺UWE empfiehlt Freezemage ab- und Exodiamage anzuschaffen\n" + "Kai☺UWE empfiehlt Freezemage ab- und Exodiamage anzuschaffen\n"
+ "Kai☺UWE empfiehlt Geburtstag haben und sich reich beschenken lassen.\n" + "Kai☺UWE empfiehlt Geburtstag haben und sich reich beschenken lassen.\n"
+ "Kai☺UWE empfiehlt Gründe zu finden, warum Lena mehr trinken sollte.\n" + "Kai☺UWE empfiehlt Gründe zu finden, warum Lena mehr trinken sollte.\n"
+ "Kai☺UWE empfiehlt Hand drauf!\n" + "Kai☺UWE empfiehlt Hand drauf!\n"
+ "Kai☺UWE empfiehlt Hendrik in die Bar zu kommen um abgestochen zu werden.\n" + "Kai☺UWE empfiehlt Hendrik in die Bar zu kommen um abgestochen zu werden.\n"
+ "Kai☺UWE empfiehlt Honey zu skypen, um mal eine ehrliche Meinung zu seiner neuen Frisur zu kriegen. #gntm\n" + "Kai☺UWE empfiehlt Honey zu skypen, um mal eine ehrliche Meinung zu seiner neuen Frisur zu kriegen. #gntm\n"
+ "Kai☺UWE empfiehlt Intellektuell richtig zu schreiben, sonst kommt das penlich.\n" + "Kai☺UWE empfiehlt Intellektuell richtig zu schreiben, sonst kommt das penlich.\n"
+ "Kai☺UWE empfiehlt Jack kennen zu lernen.\n" + "Kai☺UWE empfiehlt Jack kennen zu lernen.\n"
+ "Jan☺UWE empfiehlt, nicht vergessen zu haben für morgen einzukaufen weil Feiertag!\n" + "Jan☺UWE empfiehlt, nicht vergessen zu haben für morgen einzukaufen weil Feiertag!\n"
+ "Kai☺UWE empfiehlt Jan☺UWE öfters mal was empfehlen zu lassen ;)\n" + "Kai☺UWE empfiehlt Jan☺UWE öfters mal was empfehlen zu lassen ;)\n"
+ "Kai☺UWE empfiehlt K1-Bargläser während der Gläser-Razzia nicht auf dem Zimmer zu lagern.\n" + "Kai☺UWE empfiehlt K1-Bargläser während der Gläser-Razzia nicht auf dem Zimmer zu lagern.\n"
+ "Kai☺UWE empfiehlt KAImikaze HaDiKo ~10cl für 2 Euro (Ist er zu stark bis du zu wenig KAI)\n" + "Kai☺UWE empfiehlt KAImikaze HaDiKo ~10cl für 2 Euro (Ist er zu stark bis du zu wenig KAI)\n"
+ "Kai☺UWE empfiehlt Kai☺UWE ohne Bindestrich zu schreiben, weil Kai☺UWE mit Bindestrich falsch ist und das Kai☺UWE ärgert.\n" + "Kai☺UWE empfiehlt Kai☺UWE ohne Bindestrich zu schreiben, weil Kai☺UWE mit Bindestrich falsch ist und das Kai☺UWE ärgert.\n"
+ "Kai☺UWE empfiehlt Kai☺UWE das nächste Mal ein \"Kai☺UWE empfiehlt\" zu schreiben.\n" + "Kai☺UWE empfiehlt Kai☺UWE das nächste Mal ein \"Kai☺UWE empfiehlt\" zu schreiben.\n"
+ "Kai☺UWE empfiehlt Kai☺UWE richtig zu schreiben und wenn man es nicht weiß es nachzuschlagen (https://wiki.hadiko.de/wiki/Kai☺UWE) oder nachzufragen bei ihm oder dem K1 Barteam oder unter eine der vielen HaDiKo-L Mails der K1 Bar zuschauen in denen Kai☺UWE eine Empfehlungen abgegeben hat.\n" + "Kai☺UWE empfiehlt Kai☺UWE richtig zu schreiben und wenn man es nicht weiß es nachzuschlagen (https://wiki.hadiko.de/wiki/Kai☺UWE) oder nachzufragen bei ihm oder dem K1 Barteam oder unter eine der vielen HaDiKo-L Mails der K1 Bar zuschauen in denen Kai☺UWE eine Empfehlungen abgegeben hat.\n"
+ "Kai☺UWE empfiehlt Kamikaze Hadiko - ist er zu stark, bist du zu wenig Kai☺UWE\n" + "Kai☺UWE empfiehlt Kamikaze Hadiko - ist er zu stark, bist du zu wenig Kai☺UWE\n"
+ "Kai☺UWE empfiehlt Kommt jetzt in die K1-Bar, ihr habt ja eh nix besseres zu tun\n" + "Kai☺UWE empfiehlt Kommt jetzt in die K1-Bar, ihr habt ja eh nix besseres zu tun\n"
+ "Kai☺UWE empfiehlt Kommunikation ganz abzuschaffen, denn wenn man nichts sagt, sagt man auch nichts dummes.\n" + "Kai☺UWE empfiehlt Kommunikation ganz abzuschaffen, denn wenn man nichts sagt, sagt man auch nichts dummes.\n"
+ "Kai☺UWE empfiehlt Langeweile mit spontanen Barbesuchen entgegenzuwirken.\n" + "Kai☺UWE empfiehlt Langeweile mit spontanen Barbesuchen entgegenzuwirken.\n"
+ "Kai☺UWE empfiehlt Lautstärkebeschwerden per HaDiKo-L zu machen, da sich mehr Personen daran erfreuen.\n" + "Kai☺UWE empfiehlt Lautstärkebeschwerden per HaDiKo-L zu machen, da sich mehr Personen daran erfreuen.\n"
+ "Kai☺UWE empfiehlt Leinwände zu kaufen, die 4K können, da 1080p fast schon Steinzeit ist.\n" + "Kai☺UWE empfiehlt Leinwände zu kaufen, die 4K können, da 1080p fast schon Steinzeit ist.\n"
+ "Kai☺UWE empfiehlt Mach heute eine Probe Schicht in der K1 Bar! Gerne auch Leute die noch nie ein Bier gezapft haben!\n" + "Kai☺UWE empfiehlt Mach heute eine Probe Schicht in der K1 Bar! Gerne auch Leute die noch nie ein Bier gezapft haben!\n"
+ "Kai☺UWE empfiehlt Max dafür danken, dass er uns Fleischkäse und Brötchen gegeben hat\n" + "Kai☺UWE empfiehlt Max dafür danken, dass er uns Fleischkäse und Brötchen gegeben hat\n"
+ "Kai☺UWE empfiehlt Mein Licht ist aus, Ich geh in die Bar.\n" + "Kai☺UWE empfiehlt Mein Licht ist aus, Ich geh in die Bar.\n"
+ "Kai☺UWE empfiehlt Mindestens ein Kubik-Philipp Bier vernichten.\n" + "Kai☺UWE empfiehlt Mindestens ein Kubik-Philipp Bier vernichten.\n"
+ "Kai☺UWE empfiehlt Mit aggresivem Blick Menschen die in schwarzen T-Shirts die Insignie der Wichtigkeit zur Schau tragen nach dem Weg zum Klo fragen.\n" + "Kai☺UWE empfiehlt Mit aggresivem Blick Menschen die in schwarzen T-Shirts die Insignie der Wichtigkeit zur Schau tragen nach dem Weg zum Klo fragen.\n"
+ "Kai☺UWE empfiehlt Mortal Kombat X, Ultra Street Fighter, Evolve oder Starcraft zu lernen, da darf Team YP noch mitspielen.\n" + "Kai☺UWE empfiehlt Mortal Kombat X, Ultra Street Fighter, Evolve oder Starcraft zu lernen, da darf Team YP noch mitspielen.\n"
+ "Kai☺UWE empfiehlt Mundschutze mitzubringen, bei den Models geht ein Virus um!\n" + "Kai☺UWE empfiehlt Mundschutze mitzubringen, bei den Models geht ein Virus um!\n"
+ "Kai☺UWE empfiehlt Musik zu hören im Loope.\n" + "Kai☺UWE empfiehlt Musik zu hören im Loope.\n"
+ "Kai☺UWE empfiehlt Männern ihre feminine Seite zu zeigen.\n" + "Kai☺UWE empfiehlt Männern ihre feminine Seite zu zeigen.\n"
+ "Kai☺UWE empfiehlt NEIN\n" + "Kai☺UWE empfiehlt NEIN\n"
+ "Kai☺UWE empfiehlt Netfilx nicht in 4k euer Bildschirm kann das sowieso net\n" + "Kai☺UWE empfiehlt Netfilx nicht in 4k euer Bildschirm kann das sowieso net\n"
+ "Kai☺UWE empfiehlt Orginal Chupa Chups Lutscher\n" + "Kai☺UWE empfiehlt Orginal Chupa Chups Lutscher\n"
+ "Kai☺UWE empfiehlt Pangalaktischer Donnergurgler\n" + "Kai☺UWE empfiehlt Pangalaktischer Donnergurgler\n"
+ "Kai☺UWE empfiehlt Pokémon in Team Rot zu spielen.\n" + "Kai☺UWE empfiehlt Pokémon in Team Rot zu spielen.\n"
+ "Kai☺UWE empfiehlt Pornos Nachmittags saugen, man kann die speichern\n" + "Kai☺UWE empfiehlt Pornos Nachmittags saugen, man kann die speichern\n"
+ "Kai☺UWE empfiehlt Protokolle zu schreiben, um sich an Dinge erinnern zu können\n" + "Kai☺UWE empfiehlt Protokolle zu schreiben, um sich an Dinge erinnern zu können\n"
+ "Kai☺UWE empfiehlt Rocket League im Real Live zu spielen.\n" + "Kai☺UWE empfiehlt Rocket League im Real Live zu spielen.\n"
+ "Kai☺UWE empfiehlt SPECIAL: Nuggl empfiehlt deine Mudda mit Bauschaum.\n" + "Kai☺UWE empfiehlt SPECIAL: Nuggl empfiehlt deine Mudda mit Bauschaum.\n"
+ "Kai☺UWE empfiehlt Sammy mit Handschlag zu begrüßen.\n" + "Kai☺UWE empfiehlt Sammy mit Handschlag zu begrüßen.\n"
+ "Kai☺UWE empfiehlt Sammy mit Handschlag zu begrüßen.\n" + "Kai☺UWE empfiehlt Sammy mit Handschlag zu begrüßen.\n"
+ "Kai☺UWE empfiehlt Save the Frames, kill the Animals!\n" + "Kai☺UWE empfiehlt Save the Frames, kill the Animals!\n"
+ "Kai☺UWE empfiehlt Sci-Fi-Raumschiffe im Massstab 1:1 zu drucken.\n" + "Kai☺UWE empfiehlt Sci-Fi-Raumschiffe im Massstab 1:1 zu drucken.\n"
+ "Kai☺UWE empfiehlt Senf mitzubringen, denn es gibt selbstgemachte Bratwürste zum probieren (nur so lange der Vorrat reicht)\n" + "Kai☺UWE empfiehlt Senf mitzubringen, denn es gibt selbstgemachte Bratwürste zum probieren (nur so lange der Vorrat reicht)\n"
+ "Kai☺UWE empfiehlt Spieltiefe über Pokemons zu setzen und sich mal Ingress anzuschauen Kappa.\n" + "Kai☺UWE empfiehlt Spieltiefe über Pokemons zu setzen und sich mal Ingress anzuschauen Kappa.\n"
+ "Kai☺UWE empfiehlt Spätschicht in der K2-Bar zu machen, weil von denen mal wieder keiner Lust hat.\n" + "Kai☺UWE empfiehlt Spätschicht in der K2-Bar zu machen, weil von denen mal wieder keiner Lust hat.\n"
+ "Kai☺UWE empfiehlt Stegonographie zu lernen\n" + "Kai☺UWE empfiehlt Stegonographie zu lernen\n"
+ "Kai☺UWE empfiehlt Subwoofer auch anzuschliesen und sie nicht nur als Deko zu verwenden.\n" + "Kai☺UWE empfiehlt Subwoofer auch anzuschliesen und sie nicht nur als Deko zu verwenden.\n"
+ "Kai☺UWE empfiehlt Sven gratulieren\n" + "Kai☺UWE empfiehlt Sven gratulieren\n"
+ "Kai☺UWE empfiehlt TTOG wählen. It´s good for you!\n" + "Kai☺UWE empfiehlt TTOG wählen. It´s good for you!\n"
+ "Kai☺UWE empfiehlt Tee so lange der Vorrat reicht. Kikkis Ponyhof ist fast leer, also kommt schnell!\n" + "Kai☺UWE empfiehlt Tee so lange der Vorrat reicht. Kikkis Ponyhof ist fast leer, also kommt schnell!\n"
+ "Kai☺UWE empfiehlt Tee: Sternenglanz (Geschmacksrichtung: Gebrannte Mandeln)\n" + "Kai☺UWE empfiehlt Tee: Sternenglanz (Geschmacksrichtung: Gebrannte Mandeln)\n"
+ "Kai☺UWE empfiehlt The Elder Scrolls III: Morrowind; All Main Quests in 38 min\n" + "Kai☺UWE empfiehlt The Elder Scrolls III: Morrowind; All Main Quests in 38 min\n"
+ "Kai☺UWE empfiehlt Vanille-Schoko-Erdbeereis mit Sahne, Streuseln, Waffel und Bailey's und mit nem Milkshake nachspülen.\n" + "Kai☺UWE empfiehlt Vanille-Schoko-Erdbeereis mit Sahne, Streuseln, Waffel und Bailey's und mit nem Milkshake nachspülen.\n"
+ "Kai☺UWE empfiehlt Wasserstoff Uboot #danke sei Koni für die Idee\n" + "Kai☺UWE empfiehlt Wasserstoff Uboot #danke sei Koni für die Idee\n"
+ "Kai☺UWE empfiehlt alle 7 One Direction Mitglieder zu kennen.\n" + "Kai☺UWE empfiehlt alle 7 One Direction Mitglieder zu kennen.\n"
+ "Kai☺UWE empfiehlt anzufangen vorzugühen für Sammstag.\n" + "Kai☺UWE empfiehlt anzufangen vorzugühen für Sammstag.\n"
+ "Kai☺UWE empfiehlt auch Barteamshirts zu halbieren\n" + "Kai☺UWE empfiehlt auch Barteamshirts zu halbieren\n"
+ "Kai☺UWE empfiehlt auch mal bei einer Burlesque Show mitzumachen.\n" + "Kai☺UWE empfiehlt auch mal bei einer Burlesque Show mitzumachen.\n"
+ "Kai☺UWE empfiehlt auch mal mit seinem Pömpel Gassi zu gehen.\n" + "Kai☺UWE empfiehlt auch mal mit seinem Pömpel Gassi zu gehen.\n"
+ "Kai☺UWE empfiehlt auf den Kopf zu ziehlen.\n" + "Kai☺UWE empfiehlt auf den Kopf zu ziehlen.\n"
+ "Kai☺UWE empfiehlt auf jeden Fall wählen zu gehen.\n" + "Kai☺UWE empfiehlt auf jeden Fall wählen zu gehen.\n"
+ "Kai☺UWE empfiehlt aufzuhören weniger zu trinken, um es ertragen zu können.\n" + "Kai☺UWE empfiehlt aufzuhören weniger zu trinken, um es ertragen zu können.\n"
+ "Kai☺UWE empfiehlt aus der dunklen Höhle hervor zu kriechen, der 3-tägige Kater ist beendet.\n" + "Kai☺UWE empfiehlt aus der dunklen Höhle hervor zu kriechen, der 3-tägige Kater ist beendet.\n"
+ "Kai☺UWE empfiehlt ausschlaffen wird überbewertet.\n" + "Kai☺UWE empfiehlt ausschlaffen wird überbewertet.\n"
+ "Kai☺UWE empfiehlt beim Starten lassen von Raketen die Arschbacken nicht zusammen zu kneifen!\n" + "Kai☺UWE empfiehlt beim Starten lassen von Raketen die Arschbacken nicht zusammen zu kneifen!\n"
+ "Kai☺UWE empfiehlt beim aktuellen Wetter Bier und Cocktails gegen Dehydrierung zu trinken.\n" + "Kai☺UWE empfiehlt beim aktuellen Wetter Bier und Cocktails gegen Dehydrierung zu trinken.\n"
+ "Kai☺UWE empfiehlt beim nächten mal früher einen Karte zu kaufen, da es schon Lans gab die am Donnerstag davor ausverkauft waren. \n" + "Kai☺UWE empfiehlt beim nächten mal früher einen Karte zu kaufen, da es schon Lans gab die am Donnerstag davor ausverkauft waren. \n"
+ "Kai☺UWE empfiehlt beim tauchen nicht durch die Nase zu atmen.\n" + "Kai☺UWE empfiehlt beim tauchen nicht durch die Nase zu atmen.\n"
+ "Kai☺UWE empfiehlt bewegliche Kleinteile im Auge zu behalten.\n" + "Kai☺UWE empfiehlt bewegliche Kleinteile im Auge zu behalten.\n"
+ "Kai☺UWE empfiehlt bis um 00.00Uhr zu bleiben.\n" + "Kai☺UWE empfiehlt bis um 00.00Uhr zu bleiben.\n"
+ "Kai☺UWE empfiehlt bis zum Jahresende jeden Tag eine HaDiKo Bar zu besuchen.\n" + "Kai☺UWE empfiehlt bis zum Jahresende jeden Tag eine HaDiKo Bar zu besuchen.\n"
+ "Kai☺UWE empfiehlt bunte Bälle!\n" + "Kai☺UWE empfiehlt bunte Bälle!\n"
+ "Kai☺UWE empfiehlt dabei mit Julian einen Shot zu trinken, da der seinen Bachlerarbeit abgeschickt hat.\n" + "Kai☺UWE empfiehlt dabei mit Julian einen Shot zu trinken, da der seinen Bachlerarbeit abgeschickt hat.\n"
+ "Kai☺UWE empfiehlt das Abendessen ausfallen zu lassen und sich was vom Grill zu sichern.\n" + "Kai☺UWE empfiehlt das Abendessen ausfallen zu lassen und sich was vom Grill zu sichern.\n"
+ "Kai☺UWE empfiehlt das Studium zu schmeißen und gegen Bezahlung dürre Frauen mit Dreck zu bewerfen.\n" + "Kai☺UWE empfiehlt das Studium zu schmeißen und gegen Bezahlung dürre Frauen mit Dreck zu bewerfen.\n"
+ "Kai☺UWE empfiehlt den \"The Elder Scroll IV: Oblivion Any% No-Out of Bounds\" run in 40min (einfach nur wie????) am Donnerstag, die \"Tetris: The Grand Master 8-way 100% race\" und \"Tetris: The Grand Master 2-player 1-controler race\" runs am Freitag (ja man kann Tetris durchspielen) und natürlich save the Frames/ kill the animals.\n" + "Kai☺UWE empfiehlt den \"The Elder Scroll IV: Oblivion Any% No-Out of Bounds\" run in 40min (einfach nur wie????) am Donnerstag, die \"Tetris: The Grand Master 8-way 100% race\" und \"Tetris: The Grand Master 2-player 1-controler race\" runs am Freitag (ja man kann Tetris durchspielen) und natürlich save the Frames/ kill the animals.\n"
+ "Kai☺UWE empfiehlt den Bereich unter der K2 Eingangstreppe genauer zu erforschen.\n" + "Kai☺UWE empfiehlt den Bereich unter der K2 Eingangstreppe genauer zu erforschen.\n"
+ "Kai☺UWE empfiehlt den Betreff zu lesen. \n" + "Kai☺UWE empfiehlt den Betreff zu lesen. \n"
+ "Kai☺UWE empfiehlt den Degen auszupacken und sich der K6-Bar anzuschließen.\n" + "Kai☺UWE empfiehlt den Degen auszupacken und sich der K6-Bar anzuschließen.\n"
+ "Kai☺UWE empfiehlt den Koffeeinmangel im Schlaf intravenös mit Bier auszugleichen.\n" + "Kai☺UWE empfiehlt den Koffeeinmangel im Schlaf intravenös mit Bier auszugleichen.\n"
+ "Kai☺UWE empfiehlt den Schlauch zu reparieren, dass Sammy nicht verhungert.\n" + "Kai☺UWE empfiehlt den Schlauch zu reparieren, dass Sammy nicht verhungert.\n"
+ "Kai☺UWE empfiehlt den Straßenverkehr nicht aus den Augen zu verlieren.\n" + "Kai☺UWE empfiehlt den Straßenverkehr nicht aus den Augen zu verlieren.\n"
+ "Kai☺UWE empfiehlt den Winterparka auszupacken und im K1 einzumarschieren.\n" + "Kai☺UWE empfiehlt den Winterparka auszupacken und im K1 einzumarschieren.\n"
+ "Kai☺UWE empfiehlt den anstehen Vorlesungen ein Friedensangebot zu machen und eine Friedensgießkanne zu trinken.\n" + "Kai☺UWE empfiehlt den anstehen Vorlesungen ein Friedensangebot zu machen und eine Friedensgießkanne zu trinken.\n"
+ "Kai☺UWE empfiehlt den gebrochenen Fluch zu feiern.\n" + "Kai☺UWE empfiehlt den gebrochenen Fluch zu feiern.\n"
+ "Kai☺UWE empfiehlt der Prevent Cancer Foundation all dein Money zu spenden.\n" + "Kai☺UWE empfiehlt der Prevent Cancer Foundation all dein Money zu spenden.\n"
+ "Kai☺UWE empfiehlt der Schicht die französische Nationalhymne vorzusingen und dafür sich einen Gratis Shot* geben zu lass.\n" + "Kai☺UWE empfiehlt der Schicht die französische Nationalhymne vorzusingen und dafür sich einen Gratis Shot* geben zu lass.\n"
+ "Kai☺UWE empfiehlt der Was-soll--ganze-Scheiß-Shot\n" + "Kai☺UWE empfiehlt der Was-soll--ganze-Scheiß-Shot\n"
+ "Kai☺UWE empfiehlt die Bar-Mail nicht zu vergessen.\n" + "Kai☺UWE empfiehlt die Bar-Mail nicht zu vergessen.\n"
+ "Kai☺UWE empfiehlt die Barmail selbst zu schreiben, weil sonst so n Scheiß hier dabei rauskommt.\n" + "Kai☺UWE empfiehlt die Barmail selbst zu schreiben, weil sonst so n Scheiß hier dabei rauskommt.\n"
+ "Kai☺UWE empfiehlt die Ginflut in der K1 Bar einzuleiten.\n" + "Kai☺UWE empfiehlt die Ginflut in der K1 Bar einzuleiten.\n"
+ "Kai☺UWE empfiehlt die Haare nicht abzuschneiden.\n" + "Kai☺UWE empfiehlt die Haare nicht abzuschneiden.\n"
+ "Kai☺UWE empfiehlt die K1 Bar weil obwohl beim Singstar Amateure singen trotzdem qualitativ bessere Musik geboten wird.\n" + "Kai☺UWE empfiehlt die K1 Bar weil obwohl beim Singstar Amateure singen trotzdem qualitativ bessere Musik geboten wird.\n"
+ "Kai☺UWE empfiehlt die Musikauswahl zu loben.\n" + "Kai☺UWE empfiehlt die Musikauswahl zu loben.\n"
+ "Kai☺UWE empfiehlt die Reste Gin Gray zu vernichten.\n" + "Kai☺UWE empfiehlt die Reste Gin Gray zu vernichten.\n"
+ "Kai☺UWE empfiehlt die drei Untermenschen, die gegen ihn als Barteamsprecher gestimmt haben, mit Mistgablen und Fackeln vom HaDiKo-Gelände zu jagen, ewiges Hausverbot auszusprechen und alle Reche in der SV sofortig zu entziehen!\n" + "Kai☺UWE empfiehlt die drei Untermenschen, die gegen ihn als Barteamsprecher gestimmt haben, mit Mistgablen und Fackeln vom HaDiKo-Gelände zu jagen, ewiges Hausverbot auszusprechen und alle Reche in der SV sofortig zu entziehen!\n"
+ "Kai☺UWE empfiehlt die kurzen Hosen rauszulegen, den bald ist Halloween, dass heißt es ist quasi Weihnachten, was bedeutet der Sommer steht vor der Tür.\n" + "Kai☺UWE empfiehlt die kurzen Hosen rauszulegen, den bald ist Halloween, dass heißt es ist quasi Weihnachten, was bedeutet der Sommer steht vor der Tür.\n"
+ "Kai☺UWE empfiehlt die letzte Email der K1-Bar zu lesen um alle aktuellen Angebote zu kennen.\n" + "Kai☺UWE empfiehlt die letzte Email der K1-Bar zu lesen um alle aktuellen Angebote zu kennen.\n"
+ "Kai☺UWE empfiehlt diese Email Sonntag Abend zu lesen.\n" + "Kai☺UWE empfiehlt diese Email Sonntag Abend zu lesen.\n"
+ "Kai☺UWE empfiehlt durch geschickte Schachzüge unter die Top10 zu kommen.\n" + "Kai☺UWE empfiehlt durch geschickte Schachzüge unter die Top10 zu kommen.\n"
+ "Kai☺UWE empfiehlt ein eigenes Foto mitzubringen, denn er hat heute leider keines für euch!\n" + "Kai☺UWE empfiehlt ein eigenes Foto mitzubringen, denn er hat heute leider keines für euch!\n"
+ "Kai☺UWE empfiehlt ein gewaschenes Unifestshirt in die Bar zu tragen.\n" + "Kai☺UWE empfiehlt ein gewaschenes Unifestshirt in die Bar zu tragen.\n"
+ "Kai☺UWE empfiehlt ein kleines Aquarium Met.\n" + "Kai☺UWE empfiehlt ein kleines Aquarium Met.\n"
+ "Kai☺UWE empfiehlt ein wahrer Biernazi zu sein und das Reinheitsgebot zitieren zu können und zu wissen, warum Friedrich Barbarossa ein viel größerer Held war als Kai☺UWE jemals sein wird.\n" + "Kai☺UWE empfiehlt ein wahrer Biernazi zu sein und das Reinheitsgebot zitieren zu können und zu wissen, warum Friedrich Barbarossa ein viel größerer Held war als Kai☺UWE jemals sein wird.\n"
+ "Kai☺UWE empfiehlt ein weißes T-Shirt anzuziehen!\n" + "Kai☺UWE empfiehlt ein weißes T-Shirt anzuziehen!\n"
+ "Kai☺UWE empfiehlt eine 3D-gedruckte Figur von sich selbst mitzubringen, Fotos sind voll out.\n" + "Kai☺UWE empfiehlt eine 3D-gedruckte Figur von sich selbst mitzubringen, Fotos sind voll out.\n"
+ "Kai☺UWE empfiehlt eine Haarspange mit roter Fliege und schwarz-rot-goldenen Strähnen.\n" + "Kai☺UWE empfiehlt eine Haarspange mit roter Fliege und schwarz-rot-goldenen Strähnen.\n"
+ "Kai☺UWE empfiehlt eine Sonnenbrille mit zu bringen da wir wieder Licht haben und man sonst diese komsichen Gestalten in der Bar erkennt könnte.\n" + "Kai☺UWE empfiehlt eine Sonnenbrille mit zu bringen da wir wieder Licht haben und man sonst diese komsichen Gestalten in der Bar erkennt könnte.\n"
+ "Kai☺UWE empfiehlt eine Waffe dabei zu haben, falls Hendrik nicht einsichtig sein sollte.\n" + "Kai☺UWE empfiehlt eine Waffe dabei zu haben, falls Hendrik nicht einsichtig sein sollte.\n"
+ "Kai☺UWE empfiehlt eine groessere Selena Gomez-Sammlung zu haben als A1!\n" + "Kai☺UWE empfiehlt eine groessere Selena Gomez-Sammlung zu haben als A1!\n"
+ "Kai☺UWE empfiehlt einen Glitzerpulli zu tragen.\n" + "Kai☺UWE empfiehlt einen Glitzerpulli zu tragen.\n"
+ "Kai☺UWE empfiehlt einen Haargummi mit in die Bar zu nehmen und sich die Haare zu einem Zopf flechten zu lassen.\n" + "Kai☺UWE empfiehlt einen Haargummi mit in die Bar zu nehmen und sich die Haare zu einem Zopf flechten zu lassen.\n"
+ "Kai☺UWE empfiehlt einen Katzen-Entspannungskalender fuers neue Jahr zu erwerben.\n" + "Kai☺UWE empfiehlt einen Katzen-Entspannungskalender fuers neue Jahr zu erwerben.\n"
+ "Kai☺UWE empfiehlt einen Schneemann zu bauen ;)\n" + "Kai☺UWE empfiehlt einen Schneemann zu bauen ;)\n"
+ "Kai☺UWE empfiehlt einen Kai☺UWE Lebensweisheit: Fals man keinen Lust zum kochen hat, kann man seinen Käse auch mit dem Bunsenbrenner schmelzen.\n" + "Kai☺UWE empfiehlt einen Kai☺UWE Lebensweisheit: Fals man keinen Lust zum kochen hat, kann man seinen Käse auch mit dem Bunsenbrenner schmelzen.\n"
+ "Kai☺UWE empfiehlt einfach auf den Kopf klicken.\n" + "Kai☺UWE empfiehlt einfach auf den Kopf klicken.\n"
+ "Kai☺UWE empfiehlt einfach mal Prinzessin zu sein.\n" + "Kai☺UWE empfiehlt einfach mal Prinzessin zu sein.\n"
+ "Kai☺UWE empfiehlt einfach mal anders als auf dem Bildungsweg erfolgreich sein zu wollen.\n" + "Kai☺UWE empfiehlt einfach mal anders als auf dem Bildungsweg erfolgreich sein zu wollen.\n"
+ "Kai☺UWE empfiehlt einfach mal auf minecraft.hadiko.de vorbei zu schaun, wer dafür keine Zeit hat, darf gerne Abschreiben üben.\n" + "Kai☺UWE empfiehlt einfach mal auf minecraft.hadiko.de vorbei zu schaun, wer dafür keine Zeit hat, darf gerne Abschreiben üben.\n"
+ "Kai☺UWE empfiehlt einfach mal nichts sagen.\n" + "Kai☺UWE empfiehlt einfach mal nichts sagen.\n"
+ "Kai☺UWE empfiehlt einfach mal so die Bar aufzumachen, für mehr Abwechselung.\n" + "Kai☺UWE empfiehlt einfach mal so die Bar aufzumachen, für mehr Abwechselung.\n"
+ "Kai☺UWE empfiehlt einfach mal vorbeizukommen und reinzuschauen.\n" + "Kai☺UWE empfiehlt einfach mal vorbeizukommen und reinzuschauen.\n"
+ "Kai☺UWE empfiehlt es nicht nur bei einem Skandal zu belassen: http://bit.ly/2su7pO3\n" + "Kai☺UWE empfiehlt es nicht nur bei einem Skandal zu belassen: http://bit.ly/2su7pO3\n"
+ "Kai☺UWE empfiehlt etwas schneller zu trinken, um die verlorene Zeit von der Zeitumstellung wieder aufzuhohlen.\n" + "Kai☺UWE empfiehlt etwas schneller zu trinken, um die verlorene Zeit von der Zeitumstellung wieder aufzuhohlen.\n"
+ "Kai☺UWE empfiehlt eure Liebe lieber warm als kalt zu teilen.\n" + "Kai☺UWE empfiehlt eure Liebe lieber warm als kalt zu teilen.\n"
+ "Kai☺UWE empfiehlt eurer Mutter zum Muddertag zu gratulieren!\n" + "Kai☺UWE empfiehlt eurer Mutter zum Muddertag zu gratulieren!\n"
+ "Kai☺UWE empfiehlt früher anfangen zu trinken, denn der Tag hat nur 24 Stunden und das ist um ein Getränk wie Bier zu ehren eigentlich viel zu wenig.\n" + "Kai☺UWE empfiehlt früher anfangen zu trinken, denn der Tag hat nur 24 Stunden und das ist um ein Getränk wie Bier zu ehren eigentlich viel zu wenig.\n"
+ "Kai☺UWE empfiehlt früher schlafen zu gehen um jetzt schon wieder wach zu sein\n" + "Kai☺UWE empfiehlt früher schlafen zu gehen um jetzt schon wieder wach zu sein\n"
+ "Kai☺UWE empfiehlt ganz viel Alkohol mit Asli zu trinken!\n" + "Kai☺UWE empfiehlt ganz viel Alkohol mit Asli zu trinken!\n"
+ "Kai☺UWE empfiehlt ganz viele tolle Dinge.\n" + "Kai☺UWE empfiehlt ganz viele tolle Dinge.\n"
+ "Kai☺UWE empfiehlt gegen das schwüle Wetter eine kaltes Bier zu trinken.\n" + "Kai☺UWE empfiehlt gegen das schwüle Wetter eine kaltes Bier zu trinken.\n"
+ "Kai☺UWE empfiehlt grow the Fuck up and play some videogames!\n" + "Kai☺UWE empfiehlt grow the Fuck up and play some videogames!\n"
+ "Kai☺UWE empfiehlt grundsätzlich Bier zu wählen, aber zur Sicherheit auch einen Fake-Schnorres mit einzupacken.\n" + "Kai☺UWE empfiehlt grundsätzlich Bier zu wählen, aber zur Sicherheit auch einen Fake-Schnorres mit einzupacken.\n"
+ "Kai☺UWE empfiehlt gute laune auf 90er mitzubringen\n" + "Kai☺UWE empfiehlt gute laune auf 90er mitzubringen\n"
+ "Kai☺UWE empfiehlt heute Joster-Shots!\n" + "Kai☺UWE empfiehlt heute Joster-Shots!\n"
+ "Kai☺UWE empfiehlt heute mal so richtig die Puppen tanzen zu lassen.\n" + "Kai☺UWE empfiehlt heute mal so richtig die Puppen tanzen zu lassen.\n"
+ "Kai☺UWE empfiehlt heute schon schonmal ein kühles Bier zu trinken da es morgen warm wird.\n" + "Kai☺UWE empfiehlt heute schon schonmal ein kühles Bier zu trinken da es morgen warm wird.\n"
+ "Kai☺UWE empfiehlt heute viel zu trinken als Vorkurs für die O-Phase.\n" + "Kai☺UWE empfiehlt heute viel zu trinken als Vorkurs für die O-Phase.\n"
+ "Kai☺UWE empfiehlt ihm auf Twitter zu folgen für die tägliche Dosis \"Kai☺UWE empfiehlt\". https://twitter.com/KaiUweEmpfiehlt\n" + "Kai☺UWE empfiehlt ihm auf Twitter zu folgen für die tägliche Dosis \"Kai☺UWE empfiehlt\". https://twitter.com/KaiUweEmpfiehlt\n"
+ "Kai☺UWE empfiehlt ihm auf Twitter zu folgen.\n" + "Kai☺UWE empfiehlt ihm auf Twitter zu folgen.\n"
+ "Kai☺UWE empfiehlt ihn nicht alleine zu lassen, damit er Jemanden zum Umarmen hat\n" + "Kai☺UWE empfiehlt ihn nicht alleine zu lassen, damit er Jemanden zum Umarmen hat\n"
+ "Kai☺UWE empfiehlt ihn nicht für andere Bars als Werbung zu missbrauchen. \n" + "Kai☺UWE empfiehlt ihn nicht für andere Bars als Werbung zu missbrauchen. \n"
+ "Kai☺UWE empfiehlt ihn ohne \"-\" zu schreiben.\n" + "Kai☺UWE empfiehlt ihn ohne \"-\" zu schreiben.\n"
+ "Kai☺UWE empfiehlt ihn richtig zu schrieben, selbst wenn man ein Geist ist, sonst holt er die Ghostbusters.\n" + "Kai☺UWE empfiehlt ihn richtig zu schrieben, selbst wenn man ein Geist ist, sonst holt er die Ghostbusters.\n"
+ "Kai☺UWE empfiehlt immer einen Plan B zu haben.\n" + "Kai☺UWE empfiehlt immer einen Plan B zu haben.\n"
+ "Kai☺UWE empfiehlt in Zukunft einen einfallsreicheren Kai☺UWE die Empfehlung schreiben zu lassen.\n" + "Kai☺UWE empfiehlt in Zukunft einen einfallsreicheren Kai☺UWE die Empfehlung schreiben zu lassen.\n"
+ "Kai☺UWE empfiehlt in der Bar prokrastinieren\n" + "Kai☺UWE empfiehlt in der Bar prokrastinieren\n"
+ "Kai☺UWE empfiehlt in die K1-Bar zu kommen um Glühwein zu trinken und Weihnachtslieder zu singen.\n" + "Kai☺UWE empfiehlt in die K1-Bar zu kommen um Glühwein zu trinken und Weihnachtslieder zu singen.\n"
+ "Kai☺UWE empfiehlt in die K1-Bar zu kommen und euch nicht von den merkwürdigen Barteamern verwirren zu lassen.\n" + "Kai☺UWE empfiehlt in die K1-Bar zu kommen und euch nicht von den merkwürdigen Barteamern verwirren zu lassen.\n"
+ "Kai☺UWE empfiehlt innige Mensch-Maschine Interaktionen.\n" + "Kai☺UWE empfiehlt innige Mensch-Maschine Interaktionen.\n"
+ "Kai☺UWE empfiehlt ins Klo und sonst nirgends zu kotzen.\n" + "Kai☺UWE empfiehlt ins Klo und sonst nirgends zu kotzen.\n"
+ "Kai☺UWE empfiehlt irgendeinen Unsinn.\n" + "Kai☺UWE empfiehlt irgendeinen Unsinn.\n"
+ "Kai☺UWE empfiehlt irgentwas tolles\n" + "Kai☺UWE empfiehlt irgentwas tolles\n"
+ "Kai☺UWE empfiehlt jedem, sich eine Frisur wie Heidi Klum zuzulegen.\n" + "Kai☺UWE empfiehlt jedem, sich eine Frisur wie Heidi Klum zuzulegen.\n"
+ "Kai☺UWE empfiehlt jung zu bleiben weil Älterwerden sucked...\n" + "Kai☺UWE empfiehlt jung zu bleiben weil Älterwerden sucked...\n"
+ "Kai☺UWE empfiehlt keine Angst vor Marvin am Kicker zu haben, der blutet wie jeder ander Mensch und es gibt mehr als einen Weg zu gewinnen. 😈.\n" + "Kai☺UWE empfiehlt keine Angst vor Marvin am Kicker zu haben, der blutet wie jeder ander Mensch und es gibt mehr als einen Weg zu gewinnen. 😈.\n"
+ "Kai☺UWE empfiehlt keine Bananen auf A4 zu werfen!\n" + "Kai☺UWE empfiehlt keine Bananen auf A4 zu werfen!\n"
+ "Kai☺UWE empfiehlt keine milliarden Grapefruitlimo zu verkaufen.\n" + "Kai☺UWE empfiehlt keine milliarden Grapefruitlimo zu verkaufen.\n"
+ "Kai☺UWE empfiehlt keinen Angst zu haben und einfach eine Schicht zu machen.\n" + "Kai☺UWE empfiehlt keinen Angst zu haben und einfach eine Schicht zu machen.\n"
+ "Kai☺UWE empfiehlt keinen Biergarten zu planen, wenn es regnen soll.\n" + "Kai☺UWE empfiehlt keinen Biergarten zu planen, wenn es regnen soll.\n"
+ "Kai☺UWE empfiehlt keinen Cocktail des Monats zu bestellen bis Die Schicht weiss welchen es gibt. \n" + "Kai☺UWE empfiehlt keinen Cocktail des Monats zu bestellen bis Die Schicht weiss welchen es gibt. \n"
+ "Kai☺UWE empfiehlt keinen ÄRas zu töten, es sei denn, man möchte das Amt übernehmen. [Bester Zeitpunkt für eine feindliche Übernahme?????]\n" + "Kai☺UWE empfiehlt keinen ÄRas zu töten, es sei denn, man möchte das Amt übernehmen. [Bester Zeitpunkt für eine feindliche Übernahme?????]\n"
+ "Kai☺UWE empfiehlt kleine Cocktails zu bestellen.\n" + "Kai☺UWE empfiehlt kleine Cocktails zu bestellen.\n"
+ "Kai☺UWE empfiehlt kleine Umfragegruppen zu wählen\n" + "Kai☺UWE empfiehlt kleine Umfragegruppen zu wählen\n"
+ "Kai☺UWE empfiehlt kreative Lösungen für hausgemachte Problem zu finden.\n" + "Kai☺UWE empfiehlt kreative Lösungen für hausgemachte Problem zu finden.\n"
+ "Kai☺UWE empfiehlt kurz fassen;\n" + "Kai☺UWE empfiehlt kurz fassen;\n"
+ "Kai☺UWE empfiehlt laut für SlowaKai zu jubeln.\n" + "Kai☺UWE empfiehlt laut für SlowaKai zu jubeln.\n"
+ "Kai☺UWE empfiehlt lieber schon mal bei CS vorzuglühen, damit GNTM einfacher anzusehen ist.\n" + "Kai☺UWE empfiehlt lieber schon mal bei CS vorzuglühen, damit GNTM einfacher anzusehen ist.\n"
+ "Kai☺UWE empfiehlt mehr Gin Grey zu trinken, damit wir Platz haben noch mehr Vormische zu machen 💪\n" + "Kai☺UWE empfiehlt mehr Gin Grey zu trinken, damit wir Platz haben noch mehr Vormische zu machen 💪\n"
+ "Kai☺UWE empfiehlt mehr Mühe in Mails zu stecken.\n" + "Kai☺UWE empfiehlt mehr Mühe in Mails zu stecken.\n"
+ "Kai☺UWE empfiehlt mehr Werbung für \"Kai☺UWE empfiehlt\" zu machen, da \"Kai☺UWE empfiehlt\" auf Twitter [https://twitter.com/kaiuweempfiehlt?lang=de] nur 42 Follower hat und das wird einer Legende wie Kai☺UWE, der das Leben im HaDiKo mit seinen Lebensweisenheiten in kurzen und kopakten Empfehlungen erst lohneswert macht, nicht würdig.\n" + "Kai☺UWE empfiehlt mehr Werbung für \"Kai☺UWE empfiehlt\" zu machen, da \"Kai☺UWE empfiehlt\" auf Twitter [https://twitter.com/kaiuweempfiehlt?lang=de] nur 42 Follower hat und das wird einer Legende wie Kai☺UWE, der das Leben im HaDiKo mit seinen Lebensweisenheiten in kurzen und kopakten Empfehlungen erst lohneswert macht, nicht würdig.\n"
+ "Kai☺UWE empfiehlt meine neuestes \"Kai☺UWE empfiehlt\" zu empfehlen.\n" + "Kai☺UWE empfiehlt meine neuestes \"Kai☺UWE empfiehlt\" zu empfehlen.\n"
+ "Kai☺UWE empfiehlt mit Bier befüllte begehbare Kühlschränke einzurichten.\n" + "Kai☺UWE empfiehlt mit Bier befüllte begehbare Kühlschränke einzurichten.\n"
+ "Kai☺UWE empfiehlt mit dem Far Cry 2 training zu beginnen, da Unsterblich_II in dem Spiel garnicht so unsterblich ist.\n" + "Kai☺UWE empfiehlt mit dem Far Cry 2 training zu beginnen, da Unsterblich_II in dem Spiel garnicht so unsterblich ist.\n"
+ "Kai☺UWE empfiehlt mit den Regentänzen aufzuhören und lieber beim Biertrinken die Sonne anzubeten.\n" + "Kai☺UWE empfiehlt mit den Regentänzen aufzuhören und lieber beim Biertrinken die Sonne anzubeten.\n"
+ "Kai☺UWE empfiehlt mit diesem einfachen Trick 8 Gramm mehr in der Hose zu haben.\n" + "Kai☺UWE empfiehlt mit diesem einfachen Trick 8 Gramm mehr in der Hose zu haben.\n"
+ "Kai☺UWE empfiehlt mit einem kühlen Cosmopolitan ins Wochenende zu starten.\n" + "Kai☺UWE empfiehlt mit einem kühlen Cosmopolitan ins Wochenende zu starten.\n"
+ "Kai☺UWE empfiehlt mit so viel Fan-Bemalung wie möglich zu kommen und die Vuvuzela nicht zu vergessen.\n" + "Kai☺UWE empfiehlt mit so viel Fan-Bemalung wie möglich zu kommen und die Vuvuzela nicht zu vergessen.\n"
+ "Kai☺UWE empfiehlt mit viel Gefühl tief in die Fugen zu bohren.\n" + "Kai☺UWE empfiehlt mit viel Gefühl tief in die Fugen zu bohren.\n"
+ "Kai☺UWE empfiehlt morgen Einkaufen zu gehen, weil Donnerstag Feiertag ist.\n" + "Kai☺UWE empfiehlt morgen Einkaufen zu gehen, weil Donnerstag Feiertag ist.\n"
+ "Kai☺UWE empfiehlt möglichst schnell zu kommen, denn es wird viel zu wenig getrunken!\n" + "Kai☺UWE empfiehlt möglichst schnell zu kommen, denn es wird viel zu wenig getrunken!\n"
+ "Kai☺UWE empfiehlt möglichst wenig Prüfungen zu haben, damit man mehr feiern kann. Oder es einfach trotzdem zu tun.\n" + "Kai☺UWE empfiehlt möglichst wenig Prüfungen zu haben, damit man mehr feiern kann. Oder es einfach trotzdem zu tun.\n"
+ "Kai☺UWE empfiehlt müsst ihr in heute selbst fragen.\n" + "Kai☺UWE empfiehlt müsst ihr in heute selbst fragen.\n"
+ "Kai☺UWE empfiehlt neue Sprachen zu lernen, zum Beispiel frei nach RFC5321\n" + "Kai☺UWE empfiehlt neue Sprachen zu lernen, zum Beispiel frei nach RFC5321\n"
+ "Kai☺UWE empfiehlt nicht am Kabel zu wackeln.\n" + "Kai☺UWE empfiehlt nicht am Kabel zu wackeln.\n"
+ "Kai☺UWE empfiehlt nicht auf Kai☺UWE zu hören.\n" + "Kai☺UWE empfiehlt nicht auf Kai☺UWE zu hören.\n"
+ "Kai☺UWE empfiehlt nicht aus dem Stiefel zu trinken!\n" + "Kai☺UWE empfiehlt nicht aus dem Stiefel zu trinken!\n"
+ "Kai☺UWE empfiehlt nicht gegen NaVi auf Dust 2 zu spielen.\n" + "Kai☺UWE empfiehlt nicht gegen NaVi auf Dust 2 zu spielen.\n"
+ "Kai☺UWE empfiehlt nichts, da er schon am Trainieren ist.\n" + "Kai☺UWE empfiehlt nichts, da er schon am Trainieren ist.\n"
+ "Kai☺UWE empfiehlt nie was zu empfehlen.\n" + "Kai☺UWE empfiehlt nie was zu empfehlen.\n"
+ "Kai☺UWE empfiehlt nächste Woche nach Dinkelsbühl zu fahren, damit es sicher nicht mit der Masterarbeit vorran geht, weil das HaDiKo einfach einen Kai☺UWE braucht.\n" + "Kai☺UWE empfiehlt nächste Woche nach Dinkelsbühl zu fahren, damit es sicher nicht mit der Masterarbeit vorran geht, weil das HaDiKo einfach einen Kai☺UWE braucht.\n"
+ "Kai☺UWE empfiehlt nächstes Jahr beim Tag der offenen Tür mitzuhelfen!\n" + "Kai☺UWE empfiehlt nächstes Jahr beim Tag der offenen Tür mitzuhelfen!\n"
+ "Kai☺UWE empfiehlt rabimmelrabammelrabumm\n" + "Kai☺UWE empfiehlt rabimmelrabammelrabumm\n"
+ "Kai☺UWE empfiehlt sanfte Schläge auf den Hinterkopf nach heute Abend zu vermeiden, irgendwann ist da nix mehr zu retten.\n" + "Kai☺UWE empfiehlt sanfte Schläge auf den Hinterkopf nach heute Abend zu vermeiden, irgendwann ist da nix mehr zu retten.\n"
+ "Kai☺UWE empfiehlt schonmal eine neue Sendung zu überlegen, die man total overhyped in der Bar schauen kann!\n" + "Kai☺UWE empfiehlt schonmal eine neue Sendung zu überlegen, die man total overhyped in der Bar schauen kann!\n"
+ "Kai☺UWE empfiehlt schwarz/weiß-karierte Ganzkörperkondome mitzubringen um dem aktuellen Topmodel Style gerecht zu werden.\n" + "Kai☺UWE empfiehlt schwarz/weiß-karierte Ganzkörperkondome mitzubringen um dem aktuellen Topmodel Style gerecht zu werden.\n"
+ "Kai☺UWE empfiehlt seine Zuneigung nach Wahl der Genießbarkeit des Shots zu bewerten\n" + "Kai☺UWE empfiehlt seine Zuneigung nach Wahl der Genießbarkeit des Shots zu bewerten\n"
+ "Kai☺UWE empfiehlt sich Rechtsklick auch auf Linksklick zu binden, damit man nicht in Versuchung kommt.\n" + "Kai☺UWE empfiehlt sich Rechtsklick auch auf Linksklick zu binden, damit man nicht in Versuchung kommt.\n"
+ "Kai☺UWE empfiehlt sich auch irgendwas gutes.\n" + "Kai☺UWE empfiehlt sich auch irgendwas gutes.\n"
+ "Kai☺UWE empfiehlt sich auf in 6Tagen 4Stunden 56Minuten und 08 Sekunden zu freuen.\n" + "Kai☺UWE empfiehlt sich auf in 6Tagen 4Stunden 56Minuten und 08 Sekunden zu freuen.\n"
+ "Kai☺UWE empfiehlt sich bei Entscheidungsproblemen an die 0721 9881 8418 zu wenden.\n" + "Kai☺UWE empfiehlt sich bei Entscheidungsproblemen an die 0721 9881 8418 zu wenden.\n"
+ "Kai☺UWE empfiehlt sich bei einem Barteam eine Probeschicht zu sichern und vielleicht einem Barteam beizutreten, damit auch noch an den nächsten 214 Tagen immer eine Bar offen hat.\n" + "Kai☺UWE empfiehlt sich bei einem Barteam eine Probeschicht zu sichern und vielleicht einem Barteam beizutreten, damit auch noch an den nächsten 214 Tagen immer eine Bar offen hat.\n"
+ "Kai☺UWE empfiehlt sich die Achselhaare gründlich zu rasieren.\n" + "Kai☺UWE empfiehlt sich die Achselhaare gründlich zu rasieren.\n"
+ "Kai☺UWE empfiehlt sich die Aufzeichnung der letzten TASBots anzusehen.\n" + "Kai☺UWE empfiehlt sich die Aufzeichnung der letzten TASBots anzusehen.\n"
+ "Kai☺UWE empfiehlt sich die Nippel abzukleben. Vor lauter heißer Luft wirds windig werden!\n" + "Kai☺UWE empfiehlt sich die Nippel abzukleben. Vor lauter heißer Luft wirds windig werden!\n"
+ "Kai☺UWE empfiehlt sich diese famose Veranstaltung nicht entgehen zu lassen und sich am besten gleich einen Wecker zu stellen\n" + "Kai☺UWE empfiehlt sich diese famose Veranstaltung nicht entgehen zu lassen und sich am besten gleich einen Wecker zu stellen\n"
+ "Kai☺UWE empfiehlt sich diese fantastische Show auf keine Fall entgehen zu lassen.\n" + "Kai☺UWE empfiehlt sich diese fantastische Show auf keine Fall entgehen zu lassen.\n"
+ "Kai☺UWE empfiehlt sich ein Bier zu kaufen und das mit nem Item Duplication Glitch zu verdoppeln.\n" + "Kai☺UWE empfiehlt sich ein Bier zu kaufen und das mit nem Item Duplication Glitch zu verdoppeln.\n"
+ "Kai☺UWE empfiehlt sich einen Einkaufswagen voller Kuscheltiere anzuschaffen.\n" + "Kai☺UWE empfiehlt sich einen Einkaufswagen voller Kuscheltiere anzuschaffen.\n"
+ "Kai☺UWE empfiehlt sich für die Blumen zu bedanken\n" + "Kai☺UWE empfiehlt sich für die Blumen zu bedanken\n"
+ "Kai☺UWE empfiehlt sich für heute Nacht auf ca 5 Uhr einen Wecker zu stellen um den tollen 30 sec Kampf (das ist nur eine Schätzung) von \"Mayweather vs. McGregor\" anzusehen.\n" + "Kai☺UWE empfiehlt sich für heute Nacht auf ca 5 Uhr einen Wecker zu stellen um den tollen 30 sec Kampf (das ist nur eine Schätzung) von \"Mayweather vs. McGregor\" anzusehen.\n"
+ "Kai☺UWE empfiehlt sich im Vorraus Gesprächsthemen zu überlegen um Marvin abzulenken. \n" + "Kai☺UWE empfiehlt sich im Vorraus Gesprächsthemen zu überlegen um Marvin abzulenken. \n"
+ "Kai☺UWE empfiehlt sich mehr Mühe mit Mails an HaDiKo-L zu geben.\n" + "Kai☺UWE empfiehlt sich mehr Mühe mit Mails an HaDiKo-L zu geben.\n"
+ "Kai☺UWE empfiehlt sich mit kühlen Getränken in der K1 Bar abzukühlen\n" + "Kai☺UWE empfiehlt sich mit kühlen Getränken in der K1 Bar abzukühlen\n"
+ "Kai☺UWE empfiehlt sich mit viel Alkohol im Blut daruf vorzubereiten, dass sich nächste Woche alle über Schneesturm aufregen werden.\n" + "Kai☺UWE empfiehlt sich mit viel Alkohol im Blut daruf vorzubereiten, dass sich nächste Woche alle über Schneesturm aufregen werden.\n"
+ "Kai☺UWE empfiehlt sich nicht die Augenbrauen abzurasieren.\n" + "Kai☺UWE empfiehlt sich nicht die Augenbrauen abzurasieren.\n"
+ "Kai☺UWE empfiehlt sich nicht mit der Malerrolle zu schminken und mit den nervigen Empfehlungen aufzuhören...\n" + "Kai☺UWE empfiehlt sich nicht mit der Malerrolle zu schminken und mit den nervigen Empfehlungen aufzuhören...\n"
+ "Kai☺UWE empfiehlt sich nicht mit der Zeit anzulegen.\n" + "Kai☺UWE empfiehlt sich nicht mit der Zeit anzulegen.\n"
+ "Kai☺UWE empfiehlt sich nicht tiefer mit seiner letzten Empfelung zu beschäftigen.\n" + "Kai☺UWE empfiehlt sich nicht tiefer mit seiner letzten Empfelung zu beschäftigen.\n"
+ "Kai☺UWE empfiehlt sich nicht von den gefälschten Empfelungen der K2 Bar verarschen zu lassen.\n" + "Kai☺UWE empfiehlt sich nicht von den gefälschten Empfelungen der K2 Bar verarschen zu lassen.\n"
+ "Kai☺UWE empfiehlt sich nicht von seinem Barteam zur Schau stellen zu lassen.\n" + "Kai☺UWE empfiehlt sich nicht von seinem Barteam zur Schau stellen zu lassen.\n"
+ "Kai☺UWE empfiehlt sich nicht zu sehr um den eigenen offensichtlichen Alkoholismus zu sorgen, laut Definition ist jeder Alkoholiker, der jedes Silvester ein Glas Sekt trinkt...\n" + "Kai☺UWE empfiehlt sich nicht zu sehr um den eigenen offensichtlichen Alkoholismus zu sorgen, laut Definition ist jeder Alkoholiker, der jedes Silvester ein Glas Sekt trinkt...\n"
+ "Kai☺UWE empfiehlt sich sein Krönchen fortan selbst im 3D-Drucker zu drucken.\n" + "Kai☺UWE empfiehlt sich sein Krönchen fortan selbst im 3D-Drucker zu drucken.\n"
+ "Kai☺UWE empfiehlt sich stempeln zu lassen!\n" + "Kai☺UWE empfiehlt sich stempeln zu lassen!\n"
+ "Kai☺UWE empfiehlt sich vor der Telematikklausur morgen noch ein Feierabendbier zu gönnen.\n" + "Kai☺UWE empfiehlt sich vor der Telematikklausur morgen noch ein Feierabendbier zu gönnen.\n"
+ "Kai☺UWE empfiehlt sich warm anzuziehen, es wird eisig!\n" + "Kai☺UWE empfiehlt sich warm anzuziehen, es wird eisig!\n"
+ "Kai☺UWE empfiehlt sich zu verabschieden.\n" + "Kai☺UWE empfiehlt sich zu verabschieden.\n"
+ "Kai☺UWE empfiehlt so auch im Straßenverkehr zu fahren, was sollte schon schief gehen?\n" + "Kai☺UWE empfiehlt so auch im Straßenverkehr zu fahren, was sollte schon schief gehen?\n"
+ "Kai☺UWE empfiehlt ttögliche Hilfe beim Dekorieren.\n" + "Kai☺UWE empfiehlt ttögliche Hilfe beim Dekorieren.\n"
+ "Kai☺UWE empfiehlt viel zu trinken, um das schiefe Gejaule ertragen zu können.\n" + "Kai☺UWE empfiehlt viel zu trinken, um das schiefe Gejaule ertragen zu können.\n"
+ "Kai☺UWE empfiehlt viele viele vieeeeele kleine Cocktails zu bestellen, weil Sofia ihre erste Schicht macht.\n" + "Kai☺UWE empfiehlt viele viele vieeeeele kleine Cocktails zu bestellen, weil Sofia ihre erste Schicht macht.\n"
+ "Kai☺UWE empfiehlt voll aufzudrehen, damit die rechte Box angeht. \n" + "Kai☺UWE empfiehlt voll aufzudrehen, damit die rechte Box angeht. \n"
+ "Kai☺UWE empfiehlt vorbeikommen, jackbox.tv aufrufen, mitmachen!\n" + "Kai☺UWE empfiehlt vorbeikommen, jackbox.tv aufrufen, mitmachen!\n"
+ "Kai☺UWE empfiehlt vorbeizukommen und beim HaDiKo Duell ein Team zu stellen.\n" + "Kai☺UWE empfiehlt vorbeizukommen und beim HaDiKo Duell ein Team zu stellen.\n"
+ "Kai☺UWE empfiehlt vorbeizuschauen und pink zu tragen.\n" + "Kai☺UWE empfiehlt vorbeizuschauen und pink zu tragen.\n"
+ "Kai☺UWE empfiehlt vorher The Human Centipede zu gucken, um so richtig in Stimmung für heute Abend zu kommen.\n" + "Kai☺UWE empfiehlt vorher The Human Centipede zu gucken, um so richtig in Stimmung für heute Abend zu kommen.\n"
+ "Kai☺UWE empfiehlt vorher eine gute Grundlage zu schaffen.\n" + "Kai☺UWE empfiehlt vorher eine gute Grundlage zu schaffen.\n"
+ "Kai☺UWE empfiehlt vorher nochmal das eigene Antlitz in der nächstbesten spiegelnden Oberfläche zu überprüfen, das eigene Aussehen ist heute sehr sehr wichtig\n" + "Kai☺UWE empfiehlt vorher nochmal das eigene Antlitz in der nächstbesten spiegelnden Oberfläche zu überprüfen, das eigene Aussehen ist heute sehr sehr wichtig\n"
+ "Kai☺UWE empfiehlt weniger Drogen bei Blizzard zu verteilen.\n" + "Kai☺UWE empfiehlt weniger Drogen bei Blizzard zu verteilen.\n"
+ "Kai☺UWE empfiehlt weniger Kleidung, dann kommt das Outfit einfach besser an.\n" + "Kai☺UWE empfiehlt weniger Kleidung, dann kommt das Outfit einfach besser an.\n"
+ "Kai☺UWE empfiehlt weniger böllern dann hat man mehr Geld für Gingray.\n" + "Kai☺UWE empfiehlt weniger böllern dann hat man mehr Geld für Gingray.\n"
+ "Kai☺UWE empfiehlt weniger verpeilt zu sein...\n" + "Kai☺UWE empfiehlt weniger verpeilt zu sein...\n"
+ "Kai☺UWE empfiehlt wenn das Licht aus ist nicht nach Hause, sondern in die K1 Bar zu gehen!\n" + "Kai☺UWE empfiehlt wenn das Licht aus ist nicht nach Hause, sondern in die K1 Bar zu gehen!\n"
+ "Kai☺UWE empfiehlt wenn einem die Wirklichkeit nicht gefällt, sich seine eigene Realität zu schaffen.\n" + "Kai☺UWE empfiehlt wenn einem die Wirklichkeit nicht gefällt, sich seine eigene Realität zu schaffen.\n"
+ "Kai☺UWE empfiehlt wer ist Anika und was hat der DC damit zu tuen?\n" + "Kai☺UWE empfiehlt wer ist Anika und was hat der DC damit zu tuen?\n"
+ "Kai☺UWE empfiehlt wieder mit trinken anzufang, das man den Vorsatz weniger zu trinken 15 Stunden durchgehalten hat sollte doch eingeltich reichen für das Jahr\n" + "Kai☺UWE empfiehlt wieder mit trinken anzufang, das man den Vorsatz weniger zu trinken 15 Stunden durchgehalten hat sollte doch eingeltich reichen für das Jahr\n"
+ "Kai☺UWE empfiehlt zu kommen, weitere 500 Jahre dürften die wenigsten von euch überleben, auch wenn Alkohol konserviert.\n" + "Kai☺UWE empfiehlt zu kommen, weitere 500 Jahre dürften die wenigsten von euch überleben, auch wenn Alkohol konserviert.\n"
+ "Kai☺UWE empfiehlt zu schauen, ob auch wirklich alle dicht.\n" + "Kai☺UWE empfiehlt zu schauen, ob auch wirklich alle dicht.\n"
+ "Kai☺UWE empfiehlt zur Not alleine zum Bier Trinken vorbei zu kommen, da mit Freunden, die in einer Beziehung sind heute eh nichts anzufangen ist.\n" + "Kai☺UWE empfiehlt zur Not alleine zum Bier Trinken vorbei zu kommen, da mit Freunden, die in einer Beziehung sind heute eh nichts anzufangen ist.\n"
+ "Kai☺UWE empfiehlt zur erscheinen, sonst müssen wir weinen!\n" + "Kai☺UWE empfiehlt zur erscheinen, sonst müssen wir weinen!\n"
+ "Kai☺UWE empfiehlt Ära-Killer für 4,50 Euro und fals du Ära bist oder warst nur 4 Euro.\n" + "Kai☺UWE empfiehlt Ära-Killer für 4,50 Euro und fals du Ära bist oder warst nur 4 Euro.\n"
+ "Kai☺UWE empfiehlt ärgert den barteamer nicht, der euch mit getränken versorgt...\n" + "Kai☺UWE empfiehlt ärgert den barteamer nicht, der euch mit getränken versorgt...\n"
+ "Kai☺UWE empfiehlt übrigens, Mails zu schreiben.\n" + "Kai☺UWE empfiehlt übrigens, Mails zu schreiben.\n"
+ "Kai☺UWE empfiehlt ギガ ドリル ブレイク!!!"; + "Kai☺UWE empfiehlt ギガ ドリル ブレイク!!!";
} }
package markov; package markov;
public interface Parser { import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Parser {
public Map<Integer, Data> parse(Stream<Stream<Token>> input, Collection<Integer> prefixes) {
Collection<Collector> collectors = new ArrayList<>();
for (Integer i : prefixes) {
collectors.add(new Collector(i));
}
input.forEachOrdered(tokenStream -> {
tokenStream.forEachOrdered(token -> {
for (Collector c : collectors) {
c.learn(token);
}
});
for (Collector c : collectors) {
c.reset();
}
});
return collectors.stream().collect(Collectors.toMap(c -> c.getPrefixLength(), c -> c.getData()));
}
} }
package markov;
public class Parser_first_version {
private final int prefix_length;
public Parser_first_version(int prefix_length) {
super();
this.prefix_length = prefix_length;
}
public Data parse(String input) {
Data data = new Data();
for (String line : input.split("\n")) {
line = line.replace("Kai☺UWE empfiehlt ", "");
Token[] tokens = tokenize(line);
for (int i = 0 + prefix_length; i < tokens.length; i++) {
Prefix p = getPrefix(tokens, i);
Token t = getToken(tokens, i);
data.add(p, t);
}
}
return data;
}
private Token[] tokenize(String line) {
String[] strings = line.split(" ");
Token[] tokens = new Token[strings.length + prefix_length + 1];
int i = 0;
for (; i < prefix_length; i++) {
tokens[i] = Token.START;
}
for (; i < strings.length + prefix_length; i++) {
tokens[i] = new Token(strings[i - prefix_length], Glyph.Type.word);
}
tokens[i] = Token.END;
return tokens;
}
private Prefix getPrefix(Token[] tokens, int index) {
Token[] prefixTokens = new Token[prefix_length];
System.arraycopy(tokens, index - prefix_length + 1, prefixTokens, 0, prefix_length);
// for (int i = 0; i < prefix_length; i++) {
// prefixTokens[i] = tokens[index - prefix_length + i];
// }
return new Prefix(prefixTokens);
}
private Token getToken(Token[] tokens, int i) {
return tokens[i];
}
}
...@@ -18,24 +18,31 @@ public class Prefix { ...@@ -18,24 +18,31 @@ public class Prefix {
} }
public Prefix slide(Token newToken) { public Prefix slide(Token newToken) {
return slide(newToken, this.tokens.size());
}
public Prefix slide(Token newToken, int maxLength) {
List<Token> newTokens = new ArrayList<>(this.tokens); List<Token> newTokens = new ArrayList<>(this.tokens);
newTokens.remove(0);
newTokens.add(newToken); newTokens.add(newToken);
while(newTokens.size() > maxLength) {
newTokens.remove(0);
}
return new Prefix(newTokens); return new Prefix(newTokens);
} }
private List<Token> compressLeadingStarts(List<Token> tokens) { private List<Token> compressLeadingStarts(List<Token> tokens) {
if (tokens.size() > 1 && tokens.get(0) == Token.START) {
Iterator<Token> iterator = tokens.iterator();
for (Token t = iterator.next(); iterator.hasNext(); t = iterator.next()) {
if (t == Token.START) {
iterator.remove();
} else {
break;
}
}
}
return tokens; return tokens;
// if (tokens.size() > 1 && tokens.get(0) == Token.START) {
// Iterator<Token> iterator = tokens.iterator();
// for (Token t = iterator.next(); iterator.hasNext(); t = iterator.next()) {
// if (t == Token.START) {
// iterator.remove();
// } else {
// break;
// }
// }
// }
// return tokens;
} }
@Override @Override
......
...@@ -4,76 +4,85 @@ import java.util.Collection; ...@@ -4,76 +4,85 @@ import java.util.Collection;
import java.util.Map.Entry; import java.util.Map.Entry;
public class Renderer { public class Renderer {
public static class Options { public static class Options {
private final boolean propability; private final boolean propability;
private final boolean possibilities; private final boolean possibilities;
private final boolean recomends;
private final boolean specialToken;
private final String prefix;
public Options(boolean propability, boolean possibilities) { public Options(boolean propability, boolean possibilities, boolean recomends, boolean specialToken, String prefix) {
super(); this.propability = propability;
this.propability = propability; this.possibilities = possibilities;
this.possibilities = possibilities; this.recomends = recomends;
} this.specialToken = specialToken;
this.prefix = prefix;
}
public static final Options NONE = new Options(false, false); public static final Options NONE = new Options(false, false, false, false, "");
public static final Options FULL = new Options(true, true); public static final Options FULL = new Options(true, true, true, true, "");
public static final Options TOKEN = new Options(true, false, false, true, "");
} }
private final Data data; private final Data data;
private final Options options; private final Options options;
public Renderer(Data data) { public Renderer(Data data) {
super(); super();
this.data = data; this.data = data;
this.options = Options.NONE; this.options = Options.NONE;
} }
public Renderer(Data data, Options options) { public Renderer(Data data, Options options) {
super(); super();
this.data = data; this.data = data;
this.options = options; this.options = options;
} }
public String render(Collection<Entry<Prefix, Token>> collection) { public String render(Collection<Entry<Prefix, Decission>> sentence) {
double p = 1;
StringBuilder sb = new StringBuilder();
if (options.recomends)
sb.append("KAI-uwe empfiehlt");
for (Entry<Prefix, Decission> t : sentence) {
Lookup lookup = data.fetch(t.getKey());
int possibilities = lookup.getDistinctTokens();
p *= (double) lookup.getAmount(t.getValue().getToken())
/ (double) lookup.getTotalCounts();
if (options.possibilities) {
if (possibilities <= 1) {
sb.append("-");
} else if (possibilities <= 2) {
sb.append("--");
} else if (possibilities <= 3) {
sb.append("---");
} else if (possibilities <= 5) {
sb.append("_");
} else if (possibilities <= 10) {
sb.append("__");
} else if (possibilities <= 20) {
sb.append("___");
} else if (possibilities <= 50) {
sb.append("*");
} else if (possibilities <= 100) {
sb.append("**");
} else if (possibilities <= 200) {
sb.append("***");
} else {
sb.append(" ");
}
}
sb.append(t.getValue().getToken().render(options.prefix));
}
if (options.propability) {
sb.append(" - " + p);
}
return sb.toString();
}
double p = 1;
StringBuilder sb = new StringBuilder();
sb.append("KAI-uwe empfiehlt");
for (Entry<Prefix, Token> t : collection) {
Lookup lookup = data.fetch(t.getKey());
int possibilities = lookup.getDistinctTokens();
p *= (double) lookup.getAmount(t.getValue())
/ (double) lookup.getTotalCounts();
if (options.possibilities) {
if (possibilities <= 1) {
sb.append("-");
} else if (possibilities <= 2) {
sb.append("--");
} else if (possibilities <= 3) {
sb.append("---");
} else if (possibilities <= 5) {
sb.append("_");
} else if (possibilities <= 10) {
sb.append("__");
} else if (possibilities <= 20) {
sb.append("___");
} else if (possibilities <= 50) {
sb.append("*");
} else if (possibilities <= 100) {
sb.append("**");
} else if (possibilities <= 200) {
sb.append("***");
} else {
sb.append(" ");
}
}
sb.append(t.getValue().render(" "));
}
if (options.propability) {
sb.append(" - " + p);
}
return sb.toString();
}
} }
package markov;
import java.nio.charset.Charset;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Shortener {
private final Data data;
public Shortener(Data data) {
this.data = data;
}
public String getId(Collection<Map.Entry<Prefix, Decission>> sentence) {
return fromInts(sentence.stream()
.map(d -> d.getValue().getId()));
}
String fromInts(Stream<Integer> ints) {
String cps = ints.map(i -> {
System.out.println(i);
return new String(Character.toChars(i));
}).collect(Collectors.joining());
return Base64.getEncoder().encodeToString(cps.getBytes());
}
Stream<Integer> toInts(String hash) {
return new String(Base64.getDecoder().decode(hash.getBytes())).codePoints().boxed();
}
public Collection<Map.Entry<Prefix, Decission>> getSentence(String hash) {
Integer[] ids = toInts(hash).toArray(Integer[]::new);
Collection<Map.Entry<Prefix, Decission>> sentence = new ArrayList<>();
Prefix prefix = new Prefix(new Token[0]);
for (int id : ids) {
Lookup lookup = data.fetch(prefix);
Decission d = lookup.forId(id);
sentence.add(new AbstractMap.SimpleEntry<>(prefix, d));
prefix = prefix.slide(d.getToken(), data.getPrefixLength());
}
return sentence;
}
}
package markov; package markov;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
public class ParserStreamStyle { public class Tokenizer {
public Stream<Token> collect(Stream<Glyph> glyphs) {
Data data = new Data();
public Stream<Stream<Token>> tokenizeCombined(Stream<Stream<String>> input) {
return input.map(stringStream -> putMarkers(combineToTokens(stringStream.flatMap(s -> s.codePoints().boxed().map(integer -> glyphFromCodePoint(integer))))));
}
public Stream<Stream<Token>> tokenize(Stream<String> input) {
return input.map(s -> putMarkers(combineToTokens(s.codePoints().boxed().map(integer -> glyphFromCodePoint(integer)))));
}
private Glyph glyphFromCodePoint(int codePoint) {
Glyph.Type type = Glyph.Type.other;
if (Character.isWhitespace(codePoint)) {
type = Glyph.Type.whitespace;
} else if (Character.isAlphabetic(codePoint)) {
type = Glyph.Type.word;
} else if (Arrays.asList(Character.START_PUNCTUATION, Character.END_PUNCTUATION, Character.INITIAL_QUOTE_PUNCTUATION, Character.FINAL_QUOTE_PUNCTUATION,
Character.OTHER_PUNCTUATION).contains(Character.getType(codePoint))) {
type = Glyph.Type.punctuation;
}
String value = new String(Character.toChars(codePoint));
return new Glyph(type, value);
}
private Stream<Token> putMarkers(Stream<Token> input) {
return Stream.concat(Stream.of(Token.START), Stream.concat(input, Stream.of(Token.END)));
}
public Stream<Token> combineToTokens(Stream<Glyph> glyphs) {
final Container[] previous = new Container[]{null}; final Container[] previous = new Container[]{null};
return glyphs.map(g -> { return Stream.concat(glyphs, Stream.of(new Glyph(Glyph.Type.empty, "")))
Container o = new Container(g); .map(g -> {
o.p = previous[0]; Container o = new Container(g);
previous[0] = o; o.p = previous[0];
return o; previous[0] = o;
}).flatMap(go -> { return o;
if (go.p != null && go.p.self != null && !go.self.getType().equals(go.p.self.getType())) { }).flatMap(go -> {
List<Glyph> containers = new ArrayList<>(); if (go.p != null && go.p.self != null && !go.self.getType().equals(go.p.self.getType())) {
Container c = go; List<Glyph> tokenGlyphs = new ArrayList<>();
do { Container c = go;
c = c.p; do {
containers.add(0, c.self); c = c.p;
} tokenGlyphs.add(0, c.self);
while (c != null && c.p != null && c.p.self != null && }
c.self.getType().equals(c.p.self.getType())); while (c != null && c.p != null && c.p.self != null &&
return Stream.<List<Glyph>>builder().add(containers).build(); c.self.getType().equals(c.p.self.getType()));
} else { go.p = null; // memory optimization
return Stream.empty(); return Stream.<List<Glyph>>builder().add(tokenGlyphs).build();
} } else {
}).map(l -> { return Stream.empty();
String content = l.stream().map(glyph -> glyph.getContent()).collect(Collectors.joining()); }
Glyph.Type type = l.get(0).getType(); }).map(l -> getTokenFromGlyphs(l));
return new Token(content, type); }
});
private Token getTokenFromGlyphs(List<Glyph> l) {
String content = l.stream().map(glyph -> glyph.getContent()).collect(Collectors.joining());
Glyph.Type type = l.get(0).getType();
return new Token(content, type);
} }
private static class Container { private static class Container {
...@@ -45,6 +75,4 @@ public class ParserStreamStyle { ...@@ -45,6 +75,4 @@ public class ParserStreamStyle {
final Glyph self; final Glyph self;
Container p; Container p;
} }
;
} }
package markov;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.stream.Stream;
public class Utils {
public static byte[] toByteArray(int value) {
return ByteBuffer.allocate(4).putInt(value).array();
}
public static int fromByteArray(byte[] bytes) {
return ByteBuffer.wrap(bytes).getInt();
}
public static Data parse(Stream<String> input, int prefixLength) {
Collection<Integer> collectionDummy = new ArrayList<>();
collectionDummy.add(prefixLength);
return new Parser().parse(new Tokenizer().tokenize(input), collectionDummy).values()
.stream().findFirst().get();
}
}
...@@ -12,11 +12,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue; ...@@ -12,11 +12,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
public class DataTests { public class DataTests {
private static final int prefixLength = 0;
Data data; Data data;
@Test @Test
public void isInstantiatedWithNew() { public void isInstantiatedWithNew() {
data = new Data(); data = new Data(prefixLength);
} }
@Nested @Nested
...@@ -27,17 +28,17 @@ public class DataTests { ...@@ -27,17 +28,17 @@ public class DataTests {
@BeforeEach @BeforeEach
public void create() { public void create() {
data = new Data(); data = new Data(prefixLength);
data.add(pa, ta); data.add(pa, ta);
} }
@Test @Test
public void canReceieve() { public void canReceieve() {
assertTrue(data.fetch(pa).allPosible().contains(new Token("a"))); assertTrue(data.fetch(pa).allPossible().contains(new Token("a")));
assertEquals(1, data.fetch(pa).allPosible().size()); assertEquals(1, data.fetch(pa).allPossible().size());
data.add(pa, new Token("b")); data.add(pa, new Token("b"));
assertTrue(data.fetch(pa).allPosible().contains(new Token("b"))); assertTrue(data.fetch(pa).allPossible().contains(new Token("b")));
assertEquals(2, data.fetch(pa).allPosible().size()); assertEquals(2, data.fetch(pa).allPossible().size());
} }
@Test @Test
......
...@@ -16,11 +16,11 @@ class GlyphTest { ...@@ -16,11 +16,11 @@ class GlyphTest {
assertEquals(a, a2); assertEquals(a, a2);
assertNotEquals(a, w); assertNotEquals(a, w);
assertNotEquals(a, c); assertNotEquals(a, c);
assertNotEquals(Glyph.End, c); // assertNotEquals(Glyph.End, c);
assertNotEquals(Glyph.Start, c); // assertNotEquals(Glyph.Start, c);
assertNotEquals(Glyph.Start, Glyph.End); // assertNotEquals(Glyph.Start, Glyph.End);
assertEquals(Glyph.Start, Glyph.Start); // assertEquals(Glyph.Start, Glyph.Start);
assertEquals(Glyph.End, Glyph.End); // assertEquals(Glyph.End, Glyph.End);
} }
} }
\ No newline at end of file
...@@ -25,14 +25,14 @@ public class LookupTests { ...@@ -25,14 +25,14 @@ public class LookupTests {
@Test @Test
public void add() { public void add() {
lookup.add(new Token("b")); lookup.add(new Token("b"));
assertTrue(lookup.allPosible().contains(new Token("b"))); assertTrue(lookup.allPossible().contains(new Token("b")));
assertTrue(lookup.allPosible().contains(new Token("a"))); assertTrue(lookup.allPossible().contains(new Token("a")));
} }
@Test @Test
public void forRandom() { public void forRandom() {
assertEquals(lookup.forRandom(0), new Token("a")); assertEquals(lookup.forRandom(0).getToken(), new Token("a"));
assertEquals(lookup.forRandom(0.5d), new Token("a")); assertEquals(lookup.forRandom(0.5d).getToken(), new Token("a"));
// assertEquals(lookup.forRandom(1), new Token("a")); // assertEquals(lookup.forRandom(1), new Token("a"));
assertThrows(IllegalArgumentException.class, () -> lookup.forRandom(1)); assertThrows(IllegalArgumentException.class, () -> lookup.forRandom(1));
assertThrows(IllegalArgumentException.class, () -> lookup.forRandom(-1)); assertThrows(IllegalArgumentException.class, () -> lookup.forRandom(-1));
...@@ -40,14 +40,14 @@ public class LookupTests { ...@@ -40,14 +40,14 @@ public class LookupTests {
assertThrows(IllegalArgumentException.class, () -> lookup.forRandom(2)); assertThrows(IllegalArgumentException.class, () -> lookup.forRandom(2));
lookup.add(new Token("b")); lookup.add(new Token("b"));
Token a = lookup.forRandom(0); Decission a = lookup.forRandom(0);
Token b = lookup.forRandom(0.9d); Decission b = lookup.forRandom(0.9d);
assertNotEquals(a, b); assertNotEquals(a, b);
lookup.add(new Token("c")); lookup.add(new Token("c"));
a = lookup.forRandom(0); a = lookup.forRandom(0);
b = lookup.forRandom(0.51d); b = lookup.forRandom(0.51d);
Token c = lookup.forRandom(0.9d); Decission c = lookup.forRandom(0.9d);
assertNotEquals(a, b); assertNotEquals(a, b);
assertNotEquals(a, c); assertNotEquals(a, c);
assertNotEquals(b, c); assertNotEquals(b, c);
...@@ -55,30 +55,30 @@ public class LookupTests { ...@@ -55,30 +55,30 @@ public class LookupTests {
@Test @Test
public void average() { public void average() {
assertEquals(lookup.average(), new Token("a")); assertEquals(lookup.average().getToken(), new Token("a"));
lookup.add(new Token("b")); lookup.add(new Token("b"));
Token token = lookup.average(); Token token = lookup.average().getToken();
assertTrue(() -> token.equals(new Token("a")) || token.equals(new Token("b"))); assertTrue(() -> token.equals(new Token("a")) || token.equals(new Token("b")));
lookup.add(new Token("a")); lookup.add(new Token("a"));
assertEquals(lookup.average(), new Token("a")); assertEquals(lookup.average().getToken(), new Token("a"));
lookup.add(new Token("b")); lookup.add(new Token("b"));
lookup.add(new Token("b")); lookup.add(new Token("b"));
assertEquals(lookup.average(), new Token("b")); assertEquals(lookup.average().getToken(), new Token("b"));
} }
@Test @Test
public void allPossible() { public void allPossible() {
assertIterableEquals(lookup.allPosible(), assertIterableEquals(lookup.allPossible(),
Arrays.asList(new Token("a"))); Arrays.asList(new Token("a")));
lookup.add(new Token("b")); lookup.add(new Token("b"));
assertIterableEquals(lookup.allPosible(), assertIterableEquals(lookup.allPossible(),
Arrays.asList(new Token("a"), new Token("b"))); Arrays.asList(new Token("a"), new Token("b")));
lookup.add(new Token("c")); lookup.add(new Token("c"));
assertIterableEquals(lookup.allPosible(), assertIterableEquals(lookup.allPossible(),
Arrays.asList(new Token("a"), new Token("b"), new Token("c"))); Arrays.asList(new Token("a"), new Token("b"), new Token("c")));
lookup.add(new Token("a")); lookup.add(new Token("a"));
assertIterableEquals(lookup.allPosible(), assertIterableEquals(lookup.allPossible(),
Arrays.asList(new Token("a"), new Token("b"), new Token("c"))); Arrays.asList(new Token("a"), new Token("b"), new Token("c")));
} }
......
...@@ -7,26 +7,34 @@ import java.util.Arrays; ...@@ -7,26 +7,34 @@ import java.util.Arrays;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
class ParserStreamStyleTest { public class ParserStreamStyleTest {
@Test @Test
void tests() { void tests() {
ParserStreamStyle parserStreamStyle = new ParserStreamStyle(); // Collector parserStreamStyle = new Collector(1);
Assertions.assertIterableEquals( // Assertions.assertIterableEquals(
Arrays.asList( // Arrays.asList(
new Token(Glyph.Start.getContent(), Glyph.Type.control), // new Token(Glyph.Start.getContent(), Glyph.Type.control),
new Token("ab"), // new Token("ab"),
new Token(" ", Glyph.Type.whitespace), // new Token(" ", Glyph.Type.whitespace),
new Token("c"), // new Token("c"),
new Token(Glyph.End.getContent(), Glyph.Type.control)), // new Token(Glyph.End.getContent(), Glyph.Type.control)),
parserStreamStyle.collect(Stream.of(Glyph.Start, // parserStreamStyle.combineToTokens(Stream.of(Glyph.Start,
new Glyph(Glyph.Type.word, "a"), // new Glyph(Glyph.Type.word, "a"),
new Glyph(Glyph.Type.word, "b"), // new Glyph(Glyph.Type.word, "b"),
new Glyph(Glyph.Type.whitespace, " "), // new Glyph(Glyph.Type.whitespace, " "),
new Glyph(Glyph.Type.word, "c"), // new Glyph(Glyph.Type.word, "c"),
Glyph.End, new Glyph(Glyph.Type.empty, "EMPTY"))) // Glyph.End, new Glyph(Glyph.Type.empty, "EMPTY")))
.collect(Collectors.toList())); // .collect(Collectors.toList()));
} }
// @Test
// void test2() {
// Collector parserStreamStyle = new Collector(2);
// Data data = parserStreamStyle.learn(Stream.<String>builder().add("a bc a d_e ").build());
// System.out.println(data.dumpStats());
// System.out.println(data.fetch(new Prefix(Arrays.asList(new Token("e")))).allPossible());
// }
} }
\ No newline at end of file
...@@ -18,26 +18,6 @@ public class PrefixTests { ...@@ -18,26 +18,6 @@ public class PrefixTests {
assertEquals(new Prefix(Arrays.asList(new Token("a"))), prefix); assertEquals(new Prefix(Arrays.asList(new Token("a"))), prefix);
} }
// FIXME
@Test
public void testStartCompression() {
prefix = new Prefix(Arrays.asList(Token.START));
assertEquals(new Prefix(Arrays.asList(Token.START)), prefix);
assertEquals(new Prefix(Arrays.asList(Token.START, Token.START, Token.START)), prefix);
prefix = new Prefix(Arrays.asList(Token.START, Token.START));
assertEquals(new Prefix(Arrays.asList(Token.START)), prefix);
prefix = new Prefix(Arrays.asList(Token.START, new Token("")));
assertEquals(new Prefix(Arrays.asList(Token.START, new Token(""))), prefix);
prefix = new Prefix(Arrays.asList(Token.START, new Token(""), new Token("")));
assertEquals(new Prefix(Arrays.asList(Token.START, new Token(""), new Token(""))), prefix);
assertEquals(new Prefix(Arrays.asList(Token.START, Token.START, Token.START, new Token(""), new Token(""))),
prefix);
prefix = new Prefix(Arrays.asList(Token.START, Token.START, new Token(""), new Token("")));
assertEquals(new Prefix(Arrays.asList(Token.START, new Token(""), new Token(""))), prefix);
}
@Test @Test
public void testSlide() { public void testSlide() {
prefix = new Prefix(Arrays.asList(new Token("a"))); prefix = new Prefix(Arrays.asList(new Token("a")));
...@@ -49,5 +29,12 @@ public class PrefixTests { ...@@ -49,5 +29,12 @@ public class PrefixTests {
assertEquals(new Prefix(Arrays.asList(new Token("b"), new Token("c"))), p2); assertEquals(new Prefix(Arrays.asList(new Token("b"), new Token("c"))), p2);
} }
@Test
public void testFancySlide() {
prefix = new Prefix(Arrays.asList(new Token("a")));
Prefix p2 = prefix.slide(new Token("b"),2);
assertEquals(new Prefix(Arrays.asList(new Token("a"), new Token("b"))), p2);
}
} }
\ No newline at end of file
package markov;
import org.junit.jupiter.api.Test;
import java.util.Base64;
import java.util.stream.Stream;
class ShortenerTest {
@Test
void shortenerTest() {
String hash = new Shortener(null).fromInts(Stream.of(561,0,64,0));
System.out.println(Base64.getEncoder().encodeToString("\0\0@\0\0".getBytes()));
System.out.println(hash);
System.out.println(hash.length());
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment