76 lines
2.6 KiB
Java
76 lines
2.6 KiB
Java
package io.rudefox.burrow;
|
|
|
|
import java.util.Scanner;
|
|
import java.util.regex.Pattern;
|
|
|
|
public class InteractiveDice8EntropyGenerator extends InteractiveEntropyGenerator {
|
|
|
|
public InteractiveDice8EntropyGenerator(int targetBitsOfEntropy, Scanner inputScanner, boolean ansiColorOutput) {
|
|
super(inputScanner, ansiColorOutput, targetBitsOfEntropy, 3);
|
|
}
|
|
|
|
@Override
|
|
protected String readNextEventSetString() {
|
|
|
|
StringBuilder eventSetBuffer = new StringBuilder();
|
|
int remainingEvents = eventsPerEventSet;
|
|
Pattern eventSetPattern = Pattern.compile("[1-8]+");
|
|
|
|
while (remainingEvents > 0) {
|
|
|
|
System.out.printf("Input %d x 8-sided dice rolls [1-8]: ", remainingEvents);
|
|
|
|
String nextInput = inputScanner.next();
|
|
|
|
if (!eventSetPattern.matcher(nextInput).matches()) {
|
|
System.out.printf(
|
|
"Invalid input! Enter %d-digit sequence of digits from 1 to 8 (for example, 8765375812)" + System.lineSeparator(),
|
|
remainingEvents);
|
|
continue;
|
|
}
|
|
|
|
eventSetBuffer.append(nextInput);
|
|
remainingEvents -= nextInput.length();
|
|
}
|
|
|
|
if (remainingEvents < 0)
|
|
System.out.printf("NOTE: Discarding the %d extra dice roll(s) entered" + System.lineSeparator(), -remainingEvents);
|
|
|
|
return eventSetBuffer.substring(0, eventsPerEventSet);
|
|
}
|
|
|
|
@Override
|
|
protected String getEventValueFormatString(int eventIndexWithinSet) {
|
|
return eventIndexWithinSet == bitsPerEvent || eventIndexWithinSet == 7 ? " %d |" : " %d |";
|
|
}
|
|
|
|
@Override
|
|
protected int toZeroBasedInteger(int eventDecimalValue) {
|
|
return eventDecimalValue - 1;
|
|
}
|
|
|
|
@Override
|
|
protected void outputEventValuesLine(StringBuilder eventValuesLine) {
|
|
System.out.println(eventValuesLine);
|
|
}
|
|
|
|
@Override
|
|
protected StringBuilder getInitialBitsLine() {
|
|
return new StringBuilder("|");
|
|
}
|
|
|
|
@Override
|
|
protected void padBitsLine(StringBuilder eventSetBitsLine, int bitIndexWithinEventSet, int bitIndexWithinEntropy) {
|
|
if (bitIndexWithinEventSet == BITS_PER_EVENT_SET - 1)
|
|
eventSetBitsLine.append("|");
|
|
else if (bitIndexWithinEventSet % bitsPerEvent == bitsPerEvent - 1)
|
|
eventSetBitsLine.append(styleBit(" ", bitIndexWithinEntropy, bitIndexWithinEventSet));
|
|
else if (bitIndexWithinEventSet % BITS_PER_WORD == BITS_PER_WORD - 1)
|
|
eventSetBitsLine.append(" | ");
|
|
}
|
|
|
|
@Override
|
|
protected String getSeedWordLineFormatString() {
|
|
return "|%-15s|%-17s|%-15s|";
|
|
}
|
|
} |