# 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.
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.
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.
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: ```