125 lines
3.1 KiB
Markdown
125 lines
3.1 KiB
Markdown
# 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
|
|
|
|
```
|
|
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:
|
|
```
|