Files
jwinf/j2-Baulwuerfe/README.md
2020-11-23 22:32:42 +01:00

1.8 KiB

Verwendung

Als Argument nimmt das Programm beliebig viele Dateipfade mit Maulwurfkarten an.
z. B. ./j2 beispieldaten/karte0.txt beispieldaten/karte1.txt
Als Ausgabe erhält man:

beispieldaten/karte0.txt: 3 
beispieldaten/karte1.txt: 37 

Funktionsweise

Mein Programm verwendet eine for-Schleife, die über Zeilen iteriert.
for(char *i = textRest; (uintptr_t)i <= (uintptr_t)textRest + ((height - 4) * (width + 1)); i += width + 1) {
Für das Iterieren über die einzelen Zeichen verwende ich wieder eine for-Schleife.
for(char *j = i; (uintptr_t)j < (uintptr_t)i + width - 1; ++j) {
Um zu überprüfen, ob die vierer Zeilen eines Baulwurfhügel existieren habe ich eine Funktion geschrieben.

bool checkRow(char *row) {
	for(uint8_t i = 0; i < 4; ++i) {
		if(row[i * (width + 1)] == keinBaulwurfhuegel) return false;
	}
	return true;
}

Diese Funktion wird zweimal aufgerufen.
checkRow(j) && checkRow(j + 2)
Außerdem wird überprüft, ob in der Mitte oben und unten Maulwurfshügel vorhanden sind.
j[1] == baulwurfhuegel && j[1 + 3 * (width + 1)] == baulwurfhuegel && j[1 + 2 * (width +1)] == keinBaulwurfhuegel && j[1 + (width + 1)] == keinBaulwurfhuegel;
Wenn die Maulwurfshügelfomration vorhanden ist, dann wird ein Counter um eins erhöht. Nachdem die for-Schleifen fertig gelaufen sind wird die Anzahl der Baulwurfhügel ausgegeben.

Beispiel

Als Beispiel schauen wir uns mal karte0.txt an. An der ersten Position oben links wird gleich ein Baulwurfshügel erkannt und gezählt. Danach wird Zeichen für Zeichen und Zeile für Zeile auf Baulwurfshügel überprüft. Es wird erst wieder in Zeile 2, Zeichen 12 ein Baulwurfshügel gezählt sowie in Zeile 3, Zeichen 14. Schließlich wird das Ergebnis ausgegeben.
beispieldaten/karte0.txt: 3