Skip to content

Instantly share code, notes, and snippets.

@Satomaru
Last active March 9, 2017 07:51
Show Gist options
  • Save Satomaru/a5502b02a3333820fb651b42b83e8f1e to your computer and use it in GitHub Desktop.
Save Satomaru/a5502b02a3333820fb651b42b83e8f1e to your computer and use it in GitHub Desktop.
今更ながらPPAPを作ってみた。
package satomaru.quiz;
import java.util.Random;
import java.util.function.Consumer;
import java.util.function.Supplier;
public final class Ppap {
public enum Elements {
APPLE, PEN, PINEAPPLE
}
private static final Elements[] EXPECTEDS = {
Elements.PEN,
Elements.PINEAPPLE,
Elements.APPLE,
Elements.PEN
};
public static void main(String[] args) {
Random random = new Random();
Elements[] elements = Elements.values();
Ppap me = new Ppap();
me.execute(() -> elements[random.nextInt(elements.length)] , System.out::println);
}
public boolean execute(Supplier<Elements> in, Consumer<Elements> out) {
int progress = 0;
do {
Elements element = in.get();
if (element == null) {
return false;
}
out.accept(element);
if (element == EXPECTEDS[progress]) {
++progress;
} else if (progress != 0) {
progress = (element == EXPECTEDS[0]) ? 1 : 0;
}
} while (progress < EXPECTEDS.length);
return true;
}
}
package satomaru.quiz;
import static org.junit.Assert.*;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import satomaru.quiz.Ppap.Elements;
public class PpapTest {
private Ppap tested;
@Before
public void setUp() {
tested = new Ppap();
}
@Test
public void test() {
ArrayDeque<Elements> elements = new ArrayDeque<>();
elements.add(Elements.PEN);
elements.add(Elements.PINEAPPLE);
elements.add(Elements.PEN);
elements.add(Elements.PINEAPPLE);
elements.add(Elements.APPLE);
elements.add(Elements.PEN);
elements.add(Elements.PINEAPPLE);
elements.add(Elements.APPLE);
elements.add(Elements.PEN);
List<Elements> expected = Arrays.asList(
Elements.PEN,
Elements.PINEAPPLE,
Elements.PEN,
Elements.PINEAPPLE,
Elements.APPLE,
Elements.PEN
);
ArrayList<Elements> actual = new ArrayList<>();
assertTrue(tested.execute(elements::poll, actual::add));
assertEquals(expected, actual);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment