Takuzu

Je kent ongetwijfeld de Binairo puzzels. In deze opgave zul je een vereenvoudigde versie van een Binairo puzzel implementeren, genaamd de Takuzu1-puzzel. Het verschil met de bekende Binairo puzzels, is dat bij een Binairo geen 2 kolommen en rijen hetzelfde mogen zijn, bij een Takuzu is dit niet vereist.

Regels

Opgave - Deel 1

Schrijf een Java-klasse Takuzu. Deze klasse stelt een puzzel voor en moet volgende constructor en minstens volgende methoden bevatten. Je bent volledig vrij om de nodige instantievariabelen te kiezen en het is ook toegelaten (en aangeraden!) om extra methodes toe te voegen, dit kan je helpen bij het zoeken naar fouten.

Constructor

De constructor heeft 1 argument:

public Takuzu(int size)

Methodes

Je klasse moet minstens onderstaande methoden hebben. Deze zijn gerangschikt in alfabetische volgorde, niet volgens moeilijkheid.

getCell()

public String getCell(int row, int column)

Deze methode vraagt de waarde van de cel op rij row, kolom column op. Merk op dat zowel de rij als de kolom waarden tussen 1 en size aannemen (en dus niet van 0 tot size-1). Indien de cel leeg is, moet de methode null teruggeven.

getColumn()

public String[] getColumn(int column)

Deze methode geeft een array van alle waarden in kolom column terug, van boven naar onder. Merk op dat column steeds een waarde tussen 1 en size is. Voor cellen die nog geen waarde hebben, moet de array null bevatten.

getRow()

public String[] getRow(int row)

Deze methode geeft een array van alle waarden in rij row terug, van links naar rechts. Merk op dat row steeds een waarde tussen 1 en size is. Voor cellen die nog geen waarde hebben, moet de array null bevatten.

isCompleted()

public boolean isCompleted()

Deze methode bepaalt of de puzzel volledig is ingevuld. Wanneer er geen lege vakjes meer zijn, geeft de puzzel true terug, anders false.

isEmpty()

public boolean isEmpty(int row, int column)

Deze methode controleert of de cel op rij row, kolom column een waarde bevat. Merk op dat zowel de rij als de kolom waarden tussen 1 en size aannemen (en dus niet van 0 tot size-1). Indien de cel leeg is, moet de methode true teruggeven, anders false.

setCell()

public boolean setCell(int row, int column, String value)

Deze methode vult de waarde value in op rij row, kolom column in. Indien dit lukt, geeft de methode true terug, anders false. Het mag enkel mogelijk zijn om de waarde in te vullen als al volgende voorwaarden voldaan zijn:

toString()

public String toString()

Deze methode zet de puzzel om naar een string. Een voorbeeld van hoe deze string eruit moet zien, kan je vinden in de onderstaande voorbeelduitvoer (je kan dit simpelweg kopiëren en plakken).

Opgave - Deel 2

Nu je alle regels hebt geïmplementeerd, kan je het effectieve verloop implementeren. Schrijf hiervoor een main-methode, waarin je volgende pseudocode implementeert:

public static void main(String[] args) {
    // lees de grootte van de puzzel in met een Scanner.
    // maak een nieuwe instantie van de puzzel aan met de opgegeven grootte.
    // zolang de puzzel niet ingevuld is {
           // lees het volgende vakje in met een Scanner.
           // lees de volgende waarde in met een Scanner.
           // vul het vakje in met de gekozen waarde via de setCell methode.
           // print de puzzel
    // }
}

Voorbeelduitvoer

De tekst in het rood stelt invoer van de gebruiker voor en wordt logischerwijs niet uitgeprint door je programma.

Geef de grootte in:
2
Kies een vakje (rij,kolom).
1,1
Kies een cijfer (0 of 1).
0
╔══╗
║0.║
║..║
╚══╝
Kies een vakje (rij,kolom).
1,2
Kies een cijfer (0 of 1).
1
╔══╗
║01║
║..║
╚══╝
Kies een vakje (rij,kolom).
2,2
Kies een cijfer (0 of 1).
0
╔══╗
║01║
║.0║
╚══╝
Kies een vakje (rij,kolom).
2,1
Kies een cijfer (0 of 1).
1
╔══╗
║01║
║10║
╚══╝

Opmerkingen en tips