Kolejki priorytetowe

W katalogu structures znajduje się implementacja kolejki priorytetowej bazującej na kopcach parowalnych. Włożenie elementu do kolejki zwraca referencję na ten element, tak aby później za pomocą tej referencji można było zmniejszać jego priorytet.

Dylemat więźnia

Arena i przykładowi gracze. Uwaga! W interfejsie IPlayer pojawiła się nowa metoda:
public void newGame();
która jest wołana po zakończeniu sekwencji rozgrywek z danym przeciwnikiem (tj. przy zmianie przeciwnika). Metoda ta została dodana po to, aby nie trzeba było tworzyć nowej instancji gracza na każda kolejną serię rozgrywek.

Kanały i procesy

Należy napisać klasę implementującą interfejs:
public interface IChannel<T> {
	public T get();
	public void put(T val);
}
Metoda:
public void put(T val);
służy do wkłdania wartości do kanału, a matoda:
public T get();
do odebrania wartości z kanału. Wątek, który chce włożyć wartość do kanału ma być blokowany tak długo, aż pojawi się wątek chcący odebrać wartość z kanału; i odwrotnie - wątek chcący odebrać wartość z kanału ma być blokowany tak długo, aż pojawi się wątek wkładający wartość do kanału. Należy uwzględnić scenariusz, w którym wiele wątków chce wkładać/odbierać wartości z kanału. Należy zwrócić uwagę na to, aby żaden wątek nie mógł zostać zagłodzony.

Zadanie bonusowe (z bardzo dużym bonusem) polega na napisaniu dodatkowej klasy implementującej powyższy interfejs:
public class ParallelChannel<T> implements IChannel<T> {
	public ParallelChannel(IChannel<T> channelA, IChannel<T> channelB) {
		// ...
	}
	public T get() {
		// ...
	}
	public void put() {
		// ...		
	}
}
która w konstruktorze będzie przyjmowała dwa kanały i tworzyła z nich kanał równoległy. Wątki chcące włożyć/odebrać wartość do takiego równoległego kanału mają mieć możliwość włożenia/odebrania wartości do dowolnego z dwóch kanałów podanych w konstruktorze. Należy zwrócić szczególną uwagę na kwestię niezagładzania wątków i bycia fair (równomiernego obsługiwania czekających wątków). W implementacji można założyć, że interfejs:
IChannel<T>
implementowany jest tylko przez dwie zdefiniowane przez nas klasy.

Automaty i wyrażenia regularne

Przykładowa implementacja automatu niedeterministycznego.

Warunkowiany

Zabawa w warunkowiany .

2-3 Drzewa

Nietestowana implementacja 2-3 drzew bez równoważenia.

Generatory

Notka na temat różnych typów generatorów spotykanych w językach programowania wraz z przykładowymi implementacjami w (starej) Javie. Kod źródłowy interfejsów i przykładowych klas znajduje się w katalogu utp .