Programmieren Sie den Becherstapelroboter

36

Ich bin mir sicher, dass jeder zuvor gesehen hat, dass Tassen in Pyramiden (und andere Formen) gestapelt werden können:

           A    
        A A A   
 A     A A A A  
A A A A A A A A

Ja, Aist definitiv ein adäquater Charakter, um eine Tasse darzustellen.

Neue Becher können entweder auf dem Boden rechts von der Struktur oder auf zwei benachbarten Bechern hinzugefügt werden. Hier ist nochmal die obige Struktur, aber alle verfügbaren Plätze für neue Tassen sind markiert mit _:

         _ A         
        A A A        
 A _ _ A A A A       
A A A A A A A A _ _ _

Nehmen wir an, wir wollen einen Roboter bauen, der diese Tassenstapel zusammenbauen kann. Der Roboter versteht zwei einfache Anweisungen zum Manipulieren einer solchen Struktur:

  • a: Eine neue Tasse in der ersten verfügbaren Stelle in von links nach rechts hinzufügen Lesereihenfolge (das heißt, scannen die Zeilen von oben nach unten, von links nach rechts , bis Sie eine verfügbaren Stelle finden, dann die Schale legt dort). Das obige Beispiel würde lauten:

             A A   
            A A A  
     A     A A A A 
    A A A A A A A A
    
  • r: Entfernen Sie die erste Tasse in der Reihenfolge von links nach rechts. Das obige Beispiel würde lauten:

            A A A  
     A     A A A A 
    A A A A A A A A
    

Es stellt sich heraus, dass jede Struktur mit nur diesen beiden Operationen von Grund auf neu aufgebaut werden kann. Z.B

      A
 A   A A
A A A A A

Kann mit der Abfolge von Anweisungen gebaut werden

aaaaaaaaaaaarrrrraa

Das größere Beispiel oben kann mit erstellt werden

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrraaaaaaarr

Hier ist eine noch größere:

    A
   A A                   A
  A A A     A   A       A A
 A A A A   A A A A     A A A A
A A A A A A A A A A   A A A A A

was mit gebaut werden kann

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrraaaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrraaaaaaaaaaaaaarrrrrrrrrrraaaaaaaa

Hinweis: Wenn durch Anweisungen zum Entfernen Flecken auf dem Boden freigesetzt werden, werden diese wiederverwendet, bevor die Tassen rechts von allen vorhandenen Tassen platziert werden. Z.B

aaaarrra

wird nachgeben

A   A

nicht

    A A

Sie können sich den Boden als eine halb unendliche Reihe von Bechern vorstellen.

Die Herausforderung

Bei einer gegebenen Struktur von gestapelten Bechern geben Sie eine Sequenz zurück, die die Anweisungen zum Aufbau dieser Struktur darstellt. Ihre primäre Punktzahl ist die Summe der Anweisungen für die unten angegebenen Testfälle. Im Falle eines Gleichstands (was wahrscheinlich ist, weil ich davon überzeugt bin, dass eine effiziente optimale Lösung möglich ist) gewinnt die kürzeste Lösung.

Hier einige Details zu den Regeln:

  • Sie können davon ausgehen, dass in der unteren Reihe der Eingabe keine führenden Leerzeichen vorhanden sind, sodass immer der am weitesten links liegende Bodenpunkt für eine Tasse verwendet wird.
  • Sie können von einer angemessenen Anzahl von nachgestellten Leerzeichen ausgehen (keine Leerzeichen, ein Leerzeichen, aufgefüllt mit einem Rechteck, aufgefüllt mit einem einzelnen nachgestellten Leerzeichen).
  • Optional können Sie davon ausgehen, dass die Eingabe in einer einzelnen nachgestellten Zeile endet.
  • Anstelle von können Sie zwei beliebige druckbare ASCII-Zeichen (0x20 bis 0x7E, einschließlich) auswählen A und Leerzeichen (die Regeln für Leerzeichen werden dann auf das von Ihnen ausgewählte Zeichen übertragen).
  • Ihre Ausgabe sollte nur zwei unterschiedliche Zeichen enthalten, die die Operationen darstellen (Sie können auch andere Zeichen als aund auswählen)r ). Sie können optional eine einzelne nachgestellte Zeile drucken.
  • Ihr Code muss in der Lage sein, einen der folgenden Testfälle in weniger als einer Minute zu lösen auf einem vernünftigen Desktop-PC (wenn es bei mir zwei Minuten dauert, gebe ich Ihnen den Vorteil des Zweifels, aber wenn es zehn Minuten dauert, habe ich gewonnen Ich glaube, ein optimaler Algorithmus ist möglich, der jeden von ihnen in weniger als einer Sekunde löst.
  • Sie dürfen Ihren Code nicht für einzelne Testfälle optimieren (z. B. durch Hardcodierung). Wenn ich den Verdacht habe, dass jemand dies tut, behalte ich mir das Recht vor, die Testfälle zu ändern.

Sie können dieses CJam-Skript für den umgekehrten Vorgang verwenden: Es nimmt eine Reihe von Bauanweisungen entgegen und druckt den resultierenden Tassenstapel. (Vielen Dank an Dennis, der das Snippet neu geschrieben und deutlich beschleunigt hat.)

Sp3000 stellte freundlicherweise dieses alternative Python-Skript für denselben Zweck zur Verfügung.

Testfälle

Nach jedem Testfall gibt es eine Zahl, die die optimale Anzahl von Anweisungen gemäß Ell's Antwort angibt.

                                       A
                                      A A
                                     A A A
                                    A A A A
                                   A A A A A
                                  A A A A A A
                                 A A A A A A A
                                A A A A A A A A
                               A A A A A A A A A
                              A A A A A A A A A A
                             A A A A A A A A A A A
                            A A A A A A A A A A A A
                           A A A A A A A A A A A A A
                          A A A A A A A A A A A A A A
                         A A A A A A A A A A A A A A A
                        A A A A A A A A A A A A A A A A
                       A A A A A A A A A A A A A A A A A
                      A A A A A A A A A A A A A A A A A A
                     A A A A A A A A A A A A A A A A A A A
                    A A A A A A A A A A A A A A A A A A A A
                   A A A A A A A A A A A A A A A A A A A A A
                  A A A A A A A A A A A A A A A A A A A A A A
                 A A A A A A A A A A A A A A A A A A A A A A A
                A A A A A A A A A A A A A A A A A A A A A A A A
               A A A A A A A A A A A A A A A A A A A A A A A A A
              A A A A A A A A A A A A A A A A A A A A A A A A A A
             A A A A A A A A A A A A A A A A A A A A A A A A A A A
            A A A A A A A A A A A A A A A A A A A A A A A A A A A A
           A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
          A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
         A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
        A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
       A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
      A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
     A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
    A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
   A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
  A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

820
                                             A
                                            A A
                                           A A A
                                          A A A A
                                         A A A A A
                                        A A A A A A
                                       A A A A A A A
                                      A A A A A A A A
                     A               A A A A A A A A A
                    A A             A A A A A A A A A A
                   A A A           A A A A A A A A A A A
                  A A A A         A A A A A A A A A A A A
         A       A A A A A       A A A A A A A A A A A A A
        A A     A A A A A A     A A A A A A A A A A A A A A
   A   A A A   A A A A A A A   A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

1946

               A
              A A
             A A A
            A A A A
           A A A A A
          A A A A A A
         A A A A A A A
        A A A A A A A A
       A A A A A A A A A               A
      A A A A A A A A A A             A A
     A A A A A A A A A A A           A A A
    A A A A A A A A A A A A         A A A A
   A A A A A A A A A A A A A       A A A A A       A
  A A A A A A A A A A A A A A     A A A A A A     A A
 A A A A A A A A A A A A A A A   A A A A A A A   A A A   A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

2252

                                                         A A
                                                      A A A A
                                                   A A A A A A
                                                A A A A A A A A
                                             A A A A A A A A A A
                                          A A A A A A A A A A A A
                                       A A A A A A A A A A A A A A
                                    A A A A A A A A A A A A A A A A
                                 A A A A A A A A A A A A A A A A A A
                              A A A A A A A A A A A A A A A A A A A A
                           A A A A A A A A A A A A A A A A A A A A A A
                        A A A A A A A A A A A A A A A A A A A A A A A A
                     A A A A A A A A A A A A A A A A A A A A A A A A A A
                  A A A A A A A A A A A A A A A A A A A A A A A A A A A A
               A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
            A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
         A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
      A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
   A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

9958

                   A A
                  A A A A
                 A A A A A A
                A A A A A A A A
               A A A A A A A A A A
              A A A A A A A A A A A A
             A A A A A A A A A A A A A A
            A A A A A A A A A A A A A A A A
           A A A A A A A A A A A A A A A A A A
          A A A A A A A A A A A A A A A A A A A A
         A A A A A A A A A A A A A A A A A A A A A A
        A A A A A A A A A A A A A A A A A A A A A A A A
       A A A A A A A A A A A A A A A A A A A A A A A A A A
      A A A A A A A A A A A A A A A A A A A A A A A A A A A A
     A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
    A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
   A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
  A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

5540

A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A

10280

 A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

10320

   A       A       A       A       A       A       A       A       A       A
  A A     A A     A A     A A     A A     A A     A A     A A     A A     A A
 A A A   A A A   A A A   A A A   A A A   A A A   A A A   A A A   A A A   A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

5794

              A
             A A
            A A A
           A A A A                                               A
          A A A A A                                             A A
         A A A A A A A                                         A A A
        A A A A A A A A               A                       A A A A
       A A A A A A A A A             A A             A       A A A A A   A
      A A A A A A A A A A           A A A           A A     A A A A A A A A
     A A A A A A A A A A A         A A A A         A A A   A A A A A A A A A
    A A A A A A A A A A A A       A A A A A       A A A A A A A A A A A A A A
 A A A A A A A A A A A A A A     A A A A A A     A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A   A A A A A A A   A A A A A A A A A A A A A A A A

3297

                                                   A A
                                                  A A A
                                                 A A A A
                                                A A A A A
                                               A A A A A A
                                              A A A A A A A
                                             A A A A A A A A
                                            A A A A A A A A A
                                           A A A A A A A A A A     A
                                          A A A A A A A A A A A   A A
                                       A A A A A A A A A A A A A A A A
                                      A A A A A A A A A A A A A A A A A
                                     A A A A A A A A A A A A A A A A A A
      A                             A A A A A A A A A A A A A A A A A A A
     A A                           A A A A A A A A A A A A A A A A A A A A
    A A A             A A         A A A A A A A A A A A A A A A A A A A A A
   A A A A           A A A       A A A A A A A A A A A A A A A A A A A A A A
  A A A A A         A A A A     A A A A A A A A A A A A A A A A A A A A A A A
 A A A A A A     A A A A A A   A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A   A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A

4081

                      A
                     A A       A                     A
                    A A A     A A                   A A A                 A
             A     A A A A   A A A A               A A A A     A         A A
  A         A A   A A A A A A A A A A         A   A A A A A   A A       A A A
 A A       A A A A A A A A A A A A A A       A A A A A A A A A A A     A A A A
A A A   A A A A A A A A A A A A A A A A     A A A A A A A A A A A A   A A A A A

4475

                                                             A              
      A           A                       A                 A A A   A       A
     A A         A A   A         A A     A A A   A         A A A A A A     A A
A   A A A A A   A A A A A   A   A A A   A A A A A A   A   A A A A A A A   A A A

5752

Das heißt, die bestmögliche Punktzahl liegt bei 64.515 Anweisungen.

Martin Ender
quelle

Antworten:

32

Python 2, 64,515

import sys

input = map(str.rstrip, sys.stdin.readlines())
width = (len(input[-1]) + 1) / 2
for i in range(len(input)):
    indent = len(input) - i - 1
    input[i] = [c != " " for c in input[i][indent::2]]
    input[i] += [False] * (width - indent - len(input[i]))
input = [[False] * n for n in range(width - len(input) + 1)] + input
working_area = [[False] * n for n in range(width + 1)]

def add():
    sys.stdout.write("a")
    for row in range(width + 1):
        for i in range(row):
            if not working_area[row][i] and (
                row == width or
                (working_area[row + 1][i] and working_area[row + 1][i + 1])
            ):
                working_area[row][i] = True
                return
def remove():
    sys.stdout.write("r")
    for row in range(width + 1):
        if True in working_area[row]:
            working_area[row][working_area[row].index(True)] = False
            return

for row in range(width, -1, -1):
    r = input[row]; R = working_area[row]
    for i in range(len(r) - 1, -1, -1):
        if r[i]:
            while not R[i]: add()
        else:
            while R[i]: remove()

Ergebnisse

Test 1 Nr. 1 - 820 Nr. 2 - 1.946 Nr. 3 - 2.252 Nr. 4 - 9.958 Nr. 5 - 5.540 Nr. 6 - 10.280 Nr. 7 - 10.320 Nr. 8 - 5.794 Nr. 9 - 3.297 Nr. 10 - 4.081 Nr. 11 - 4.475 Nr. 12Test 2 Test 3
Test 4 Test 5 Test 6
Test 7 Test 8 Test 9
Test 10 Test 11 Test 12 - 5.752

Gesamt 64.515

Erläuterung

Wir beginnen mit einem leeren "Arbeitsbereich". Wir scannen die Eingabe in umgekehrter Reihenfolge Lesereihenfolge, dh von rechts nach links und von unten nach oben. Wenn am aktuellen Ort eine Abweichung zwischen dem Eingang und dem Arbeitsbereich besteht (dh, ein Becher befindet sich im Eingang, aber nicht im Arbeitsbereich oder umgekehrt), werden dem Arbeitsbereich Becher hinzugefügt oder daraus entfernt An diesem Punkt fahren wir mit dem nächsten Ort fort, bis die Nichtübereinstimmung behoben ist.

Richtigkeit

Um zu zeigen, dass diese Methode korrekt ist, dh, dass die resultierende Sequenz die Eingabestruktur generiert, reicht es aus, zu zeigen, dass wir niemals Orte ändern (dh Tassen hinzufügen oder entfernen), die wir bereits besucht haben (seitdem an jedem Ort, den wir besuchen) Wir stellen sicher, dass der Arbeitsbereich mit der Eingabe übereinstimmt.) Dies ist eine einfache Folge der Tatsache, dass wir in umgekehrter Reihenfolge arbeiten, in der Tassen hinzugefügt und entfernt werden:

  • Eine Tasse an der Stelle L wird immer vor einer Tasse an einem Ort entfernt werden, der erfolgreich ist l in Leserichtung , und daher , dass vorausgeht l in Scan - Reihenfolge, daher gibt es keine Gefahr , eine Tasse zu entfernen wir schon besucht haben.
  • In ähnlicher Weise eine Schale an der Stelle L wird immer vor einer Tasse hinzugefügt werden , dass es vorangeht , in Scan - Reihenfolge, da es bereits zwei Tassen darunter (oder dass es an der Unterseite ist); Da wir jedoch diese Orte bereits besucht haben und daher die erforderlichen Tassen hinzugefügt haben und, wie oben erwähnt, keine Gefahr besteht, dass diese Tassen später entfernt werden, ist diese Bedingung erfüllt und es besteht keine Gefahr, dass bei eine Tasse hinzugefügt wird Ein Ort, den wir bereits besucht haben.

Optimalität

Beachten Sie, dass die Auswirkung des Hinzufügens oder Entfernens eines Bechers aus einer Struktur nicht von der Abfolge der zum Generieren der Struktur verwendeten Vorgänge abhängt, sondern nur von ihrer aktuellen Konfiguration. Infolgedessen ist bei einer optimalen Folge S n = { s 1 , ..., s n } von Operationen, die eine bestimmte Struktur erzeugen, jedes Anfangssegment von S n , dh jede Folge S m = { s 1 , .... ., s m }, wobei mn ist , ist auch eine optimale Sequenz für die entsprechende Struktur, die sie erzeugt, oder es würde eine kürzere Sequenz als S geben n geben, erzeugen die gleiche Struktur.

Wir können zeigen, dass unsere Methode durch Induktion der Länge der optimalen Erzeugungssequenz optimal ist: Unsere Methode erzeugt eindeutig eine optimale Sequenz für jede Struktur, deren optimale Erzeugungssequenz leer ist (es gibt nur eine solche Struktur - die leere Struktur) Verfahren erzeugt eine optimale Sequenz für alle Strukturen, deren optimale Sequenz (oder Sequenzen) die Länge n hat , und betrachtet eine durch eine optimale Sequenz S n + 1 erzeugte Struktur . Wir wollen zeigen, dass unsere Methode aufgrund der von S n +1 als Eingabe erzeugten Struktur dieselbe Sequenz (oder zumindest eine Sequenz mit derselben Länge) erzeugt.

Wie oben erwähnt, S n ist auch eine optimale Sequenz, und so, durch Hypothese erzeugt unser Verfahren eine optimale Abfolge der Struktur erzeugt gegeben durch S n als Eingabe. Angenommen, S n ist ohne Einschränkung der Allgemeinheit die durch unser Verfahren erzeugte Folge (falls dies nicht der Fall ist, können wir die ersten n Elemente von S n + 1 immer durch die genannte Folge ersetzen und eine Folge der Länge n + erhalten 1, der die gleiche Struktur erzeugt.) Es sei l die Lage durch die letzte Operation in modifizierte seine S n + 1 ( das heißt, s n + 1 ) , und seiS msein , das Anfangssegment von S n , dass unser Programm, sobald es produziert hat erreicht l (jedoch vor der Verarbeitung l ). Beachten Sie, dass, da die erzeugten Strukturen von S n und S n + 1 an allen Standorten zustimmen , die folgen l , um beim Lesen, S m ist die gleiche Struktur , entweder als Eingabe gegeben.

Wenn s n + 1 ist a(dh Tasse zusätzlich) ist , dann muss es keine Stelle vorhergehenden seine l , in Lesereihenfolge, in der ein Becher an die Struktur durch erzeugt hinzugefügt werden kann S n . Infolgedessen muss die Folge von S n, die auf S m folgt , alle seina (da randeuten würde, dass entweder ein leerer Raum vor l ist oder dass S n nicht optimal ist.) Wenn wir zu l kommen , müssen wir dies tun füge genau n - m Tassen hinzu, bevor wir eine Tasse bei l hinzufügen können , daher wird die resultierende Folge Smgefolgt von n - m + 1 aElementen, was gleich S n +1 ist (nach diesem Punkt wird es keine Fehlanpassung mehr geben, daher ist dies die vollständige erzeugte Sequenz.)

Ebenso, wenn s n + 1 ist r, dann muss es keine Tasse an einem Ort sein vorhergehenden l , um das Lesen, in der Struktur , die durch S n . Infolgedessen muss die Folge von S n, die auf S m folgt , alle sein r. Wenn wir zu l kommen , müssen wir genau n - m Tassen entfernen, bevor wir die Tasse bei l entfernen können , daher lautet die resultierende Sequenz S m , gefolgt von n - m + 1 rElementen, was wiederum S n entspricht +1 .

Mit anderen Worten erzeugt unser Verfahren eine optimale Sequenz für die Eingangsstruktur und daher durch Induktion für jede Eingangsstruktur.

Beachten Sie, dass dies nicht bedeutet, dass diese Implementierung die effizienteste ist. Beispielsweise ist es durchaus möglich, die Anzahl der Tassen zu berechnen, die an jedem Punkt direkt hinzugefügt oder entfernt werden müssen, anstatt diese Vorgänge tatsächlich auszuführen.

Einzigartigkeit

Wir können die Optimalität unserer Methode nutzen, um zu zeigen, dass optimale Sequenzen tatsächlich einzigartig sind (das heißt, dass keine zwei unterschiedlichen optimalen Sequenzen dieselbe Struktur erzeugen). Die leere Sequenz ist offensichtlich die eindeutige optimale Erzeugungssequenz der leeren Struktur. Angenommen, alle optimalen Erzeugungssequenzen der Länge n sind eindeutig und betrachten eine Struktur Σ, die durch die beiden optimalen Sequenzen S n + 1 und T n + 1 erzeugt wird .

Recall , dass S n und T n sind optimal , selbst, und deshalb nach der Voraussetzung, einzigartig. Da unsere Methode optimale Sequenzen erzeugt, können S n und T n als durch unsere Methode erzeugt betrachtet werden. Es sei l S und l T der Ort, der durch die letzte Operation in S n + 1 bzw. T n + 1 modifiziert wurde , und es sei ohne Verlust der Allgemeinheit angenommen, dass l S in der Lesereihenfolge l T folgt oder gleich l T ist . Da die von S n erzeugten Strukturenund T n stimmen an allen Stellen nach l S überein l S erreicht (aber bevor sie verarbeitet wird), für beide gleich ist; Nennen Sie diese Sequenz UIn der Lesereihenfolge die Sequenz, die durch unsere Methode erzeugt wurde, wobei eine der beiden Strukturen als Eingabe gegeben wurde, sobald sie erreicht ist .

Seit der letzten Aktion von S n +1 ändert l S , wenn Σ eine Tasse hat bei L S dann muss es keine freie Stelle , bevor seine l S , und wenn nicht , Σ eine Tasse hat bei l S dann muß es nicht sein , Tasse vor l S , in Lesereihenfolge. Daher muss der Rest der Sequenz, die Σ nach U erzeugt , aus der wiederholten Anwendung derselben Anweisung bestehen, die durch das Vorhandensein oder Fehlen eines Bechers bei l S vorgegeben ist (sonst wäre es nicht optimal). Mit anderen Worten, S n + 1 und T n + 1sind gleich (sie beginnen beide mit U und enden mit der besagten Folge von wiederholten Befehlen), das heißt, die optimale Erzeugungsfolge von unique ist eindeutig, und so sind durch Induktion alle optimalen Erzeugungsfolgen eindeutig.

Ell
quelle