a2 Quelltext Dokumentation
This commit is contained in:
187
a1-Schiebeparkplatz/README.md
Normal file
187
a1-Schiebeparkplatz/README.md
Normal file
@ -0,0 +1,187 @@
|
||||
# Schiebeparkplatz
|
||||
|
||||
## Lösungsidee
|
||||
|
||||
Für jede normale Textdatei wird ASCII encoding verwendet bzw. ein Encoding
|
||||
Standart welcher auf ASCII basiert und zusätzliche Sonderzeichen enthält,
|
||||
wobei die Werte die bereits in ASCII enthalten übernommen wurden.
|
||||
Die ASCII codes für die Buchstaben sind entsprechend des Alphabets
|
||||
hintereinander angeordnet. Dies ist sehr nützlich, da somit eine Liste der
|
||||
Buchstaben und deren Position im Alphabet nicht benötigt wird.<br>
|
||||
Zur Lösung des Parkplatzproblems werden die Autos wenn möglich nach links bzw.
|
||||
rechts verschoben bis die Parklücke frei ist. Je nachdem in welche Richtung
|
||||
weniger Autos verschoben werden müssen, wird die Verschiebungsrichtung gewählt.
|
||||
|
||||
## Umsetzung
|
||||
|
||||
Da die Lösung des Problem keine besondere Library benötigt wird und die Anforderungen
|
||||
an die Ausführungsgeschwindigkeit gering sind, hätte man fast jede Progmiersprache
|
||||
wählen können. Ich habe mich für Go entschieden.<br>
|
||||
Das Programm akzeptiert als Argumente eine beliebige Anzahl an Pfaden zu Parkplatzdatein.
|
||||
Für das Iterieren über die Argumente wird eine for-Schleife benutzt.
|
||||
Innerhalb der Schleife wird die Eingabedatei ausgelesen. Anhand des ersten und letzten
|
||||
Buchstaben der Autos auf den normalen Parkplätzen wird die die Anzahl an Parkplätzen
|
||||
bestimmt. Anschließend wird eine Slice (ein dynamisch vergrößerbares Array in Go)
|
||||
mit den Buchstaben der quer parkenden Autos befüllt an den Indexen an denen sie die
|
||||
normalen Parkplätze blockieren.<br>
|
||||
In einer for-Schleife wird die "move"-Funktion je Index der Parkplätze doppelt
|
||||
für beide Verschiebungsrichtungen aufgerufen.
|
||||
In der "move"-Funktion wird ein Auto verschoben, wenn nicht das Ende des
|
||||
Parkplatzes erreicht ist. Die Funktion ruft sich recursive auf um weitere Autos zu
|
||||
verschieben. Je nachdem in welche Richtung weniger Autos verschoben werden müssen
|
||||
oder, wenn es gleich viele sind, wo die Anzahl der verschobenen Plätze aller Autos
|
||||
geringer ist, wird sich für das Verschieben in diese Richtung entschieden.
|
||||
|
||||
## Beispiele
|
||||
|
||||
Zunächst wird das Programm mit den bereitgestellten Beispieldaten getestet.
|
||||
|
||||
```
|
||||
parkplatz0.txt:
|
||||
A:
|
||||
B:
|
||||
C: H 1 rechts
|
||||
D: H 1 links
|
||||
E:
|
||||
F: H 1 links, I 2 links
|
||||
G: I 1 links
|
||||
parkplatz1.txt:
|
||||
A:
|
||||
B: O 1 rechts, P 1 rechts
|
||||
C: O 1 links
|
||||
D: P 1 rechts
|
||||
E: O 1 links, P 1 links
|
||||
F:
|
||||
G: Q 1 rechts
|
||||
H: Q 1 links
|
||||
I:
|
||||
J:
|
||||
K: R 1 rechts
|
||||
L: R 1 links
|
||||
M:
|
||||
N:
|
||||
parkplatz2.txt:
|
||||
A:
|
||||
B:
|
||||
C: O 1 rechts
|
||||
D: O 1 links
|
||||
E:
|
||||
F: O 1 links, P 2 links
|
||||
G: P 1 links
|
||||
H: Q 1 rechts, R 1 rechts
|
||||
I: P 1 links, Q 1 links
|
||||
J: R 1 rechts
|
||||
K: P 1 links, Q 1 links, R 1 links
|
||||
L:
|
||||
M: P 1 links, Q 1 links, R 1 links, S 2 links
|
||||
N: S 1 links
|
||||
parkplatz3.txt:
|
||||
A:
|
||||
B: O 1 rechts
|
||||
C: O 1 links
|
||||
D:
|
||||
E: P 1 rechts
|
||||
F: P 1 links
|
||||
G:
|
||||
H:
|
||||
I: Q 2 links
|
||||
J: Q 1 links
|
||||
K: Q 2 links, R 2 links
|
||||
L: Q 1 links, R 1 links
|
||||
M: Q 2 links, R 2 links, S 2 links
|
||||
N: Q 1 links, R 1 links, S 1 links
|
||||
parkplatz4.txt:
|
||||
A: Q 1 rechts, R 1 rechts
|
||||
B: Q 2 rechts, R 2 rechts
|
||||
C: R 1 rechts
|
||||
D: R 2 rechts
|
||||
E:
|
||||
F:
|
||||
G: S 1 rechts
|
||||
H: S 1 links
|
||||
I:
|
||||
J:
|
||||
K: T 1 rechts
|
||||
L: T 1 links
|
||||
M:
|
||||
N: U 1 rechts
|
||||
O: U 1 links
|
||||
P:
|
||||
parkplatz5.txt:
|
||||
A:
|
||||
B:
|
||||
C: P 2 links
|
||||
D: P 1 links
|
||||
E: Q 1 rechts
|
||||
F: Q 2 rechts
|
||||
G:
|
||||
H:
|
||||
I: R 1 rechts
|
||||
J: R 1 links
|
||||
K:
|
||||
L:
|
||||
M: S 1 rechts
|
||||
N: S 1 links
|
||||
O:
|
||||
```
|
||||
|
||||
Außerdem habe ich noch weitere Testfälle erstellt, die sich im Ordner "testdaten"
|
||||
befinden. Als Erstes habe ich getestet, ob das Programm auch mit dem Verschieben
|
||||
sehr vieler Autos klarkommt. Es gibt 26 Parkplätze, wovon alle außer die ersten
|
||||
beiden mit quer parkenden Autos blockiert sind. Für die quer parkenden Autos
|
||||
wurde Kleinbuchstaben verwendet, da alle Großbuchstaben schon belegt sind.
|
||||
|
||||
```
|
||||
test0.txt:
|
||||
A:
|
||||
B:
|
||||
C: a 2 links
|
||||
D: a 1 links
|
||||
E: a 2 links, b 2 links
|
||||
F: a 1 links, b 1 links
|
||||
G: a 2 links, b 2 links, c 2 links
|
||||
H: a 1 links, b 1 links, c 1 links
|
||||
I: a 2 links, b 2 links, c 2 links, d 2 links
|
||||
J: a 1 links, b 1 links, c 1 links, d 1 links
|
||||
K: a 2 links, b 2 links, c 2 links, d 2 links, e 2 links
|
||||
L: a 1 links, b 1 links, c 1 links, d 1 links, e 1 links
|
||||
M: a 2 links, b 2 links, c 2 links, d 2 links, e 2 links, f 2 links
|
||||
N: a 1 links, b 1 links, c 1 links, d 1 links, e 1 links, f 1 links
|
||||
O: a 2 links, b 2 links, c 2 links, d 2 links, e 2 links, f 2 links, g 2 links
|
||||
P: a 1 links, b 1 links, c 1 links, d 1 links, e 1 links, f 1 links, g 1 links
|
||||
Q: a 2 links, b 2 links, c 2 links, d 2 links, e 2 links, f 2 links, g 2 links, h 2 links
|
||||
R: a 1 links, b 1 links, c 1 links, d 1 links, e 1 links, f 1 links, g 1 links, h 1 links
|
||||
S: a 2 links, b 2 links, c 2 links, d 2 links, e 2 links, f 2 links, g 2 links, h 2 links, i 2 links
|
||||
T: a 1 links, b 1 links, c 1 links, d 1 links, e 1 links, f 1 links, g 1 links, h 1 links, i 1 links
|
||||
U: a 2 links, b 2 links, c 2 links, d 2 links, e 2 links, f 2 links, g 2 links, h 2 links, i 2 links, j 2 links
|
||||
V: a 1 links, b 1 links, c 1 links, d 1 links, e 1 links, f 1 links, g 1 links, h 1 links, i 1 links, j 1 links
|
||||
W: a 2 links, b 2 links, c 2 links, d 2 links, e 2 links, f 2 links, g 2 links, h 2 links, i 2 links, j 2 links, k 2 links
|
||||
X: a 1 links, b 1 links, c 1 links, d 1 links, e 1 links, f 1 links, g 1 links, h 1 links, i 1 links, j 1 links, k 1 links
|
||||
Y: a 2 links, b 2 links, c 2 links, d 2 links, e 2 links, f 2 links, g 2 links, h 2 links, i 2 links, j 2 links, k 2 links, l 2 links
|
||||
Z: a 1 links, b 1 links, c 1 links, d 1 links, e 1 links, f 1 links, g 1 links, h 1 links, i 1 links, j 1 links, k 1 links, l 1 links
|
||||
```
|
||||
|
||||
Die Autos wurden abwechselend jeweils ein oder zwei Parkplätze verschoben,
|
||||
je nachdem ob das ausfahrende Auto hinter der linke oder rechten Hälfe des quer
|
||||
stehenden Autos steht.<br>
|
||||
Die Bezeichner der Autos müssen auch nicht bei A beginnen; der Beginn bei
|
||||
anderen Buchstaben ist möglich. Dies zeigt das folgende Beispiel an der
|
||||
Eingabedatei "parkplatz3.txt" mit veränderten Bezeichnern.
|
||||
|
||||
```
|
||||
test1.txt:
|
||||
C:
|
||||
D: X 1 rechts
|
||||
E: X 1 links
|
||||
F:
|
||||
G: Y 1 rechts
|
||||
H: Y 1 links
|
||||
I:
|
||||
J:
|
||||
K: Q 2 links
|
||||
L: Q 1 links
|
||||
M: Q 2 links, R 2 links
|
||||
N: Q 1 links, R 1 links
|
||||
O: Q 2 links, R 2 links, S 2 links
|
||||
P: Q 1 links, R 1 links, S 1 links
|
||||
```
|
||||
Reference in New Issue
Block a user