import java.util.*; public class Solution { public static void main(String[] args) { (new Test()).test(); } static class TetrominoBag { private LinkedList tetrominos = new LinkedList<>(); private Random randomizer; public TetrominoBag() { this.randomizer = new Random(); } public TetrominoBag(long randomSeed) { this.randomizer = new Random(randomSeed); } private void refillBag() { assert(tetrominos.isEmpty()); tetrominos.add('I'); tetrominos.add('T'); tetrominos.add('S'); tetrominos.add('Z'); tetrominos.add('O'); tetrominos.add('L'); tetrominos.add('J'); Collections.shuffle(tetrominos, randomizer); } public Character nextTetromino() { if (tetrominos.isEmpty()) { refillBag(); } return tetrominos.poll(); } } static class Test { private TetrominoBag bag; public void test() { bag = new TetrominoBag(1); testTetromino('Z'); testTetromino('I'); testTetromino('L'); testTetromino('T'); testTetromino('S'); testTetromino('J'); testTetromino('O'); testTetromino('L'); } private void testTetromino(char expected) { final Character actual = bag.nextTetromino(); if (actual == expected) { System.out.println("OK Tetromino " + actual + " was expected."); } else { System.out.println("FAIL Expected: " + expected + ", Actual: " + actual); } } } }