Last active
March 9, 2017 07:51
-
-
Save Satomaru/a5502b02a3333820fb651b42b83e8f1e to your computer and use it in GitHub Desktop.
今更ながらPPAPを作ってみた。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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