Mittwoch, 6. Februar 2013

Queueing Theory (HP Codewars)

Die Lösung des Problems 15 „Queueing Theory“ von HP Codewars 2012 war nicht so kompliziert, sieht man von einigen Details ab. Problematisch vielleicht lediglich, dass eigentlich eine objektorientierte Umsetzung erwartet worden wäre:
''' HP codewars 2012 - problem 15
Queueing Theory, 9 points

Es hatte etwas gedauert sich wieder etwas in die Stringoperationen
hineinzufinden und die Queue aufzubauen. Ansonsten eher Tipparbeit.

'''

def data_verarbeiten(data):
    ''' Bekommt die Daten und soll sie verarbeiten und
    das Ergebnis als String zurueckgeben...

    '''

    # Variablen
    queue = [[] for i in range(9)]    # Liste zum Abarbeiten 
    queueLen = 0                      # Laenge der Queue
    string = ""                       # Nimmt das Ergebnis auf
    stringLen = 0                     # Laenge des Strings
    ablaufplan = []                   # Regelt die Entnahme aus den Schlangen

    # Variablen uebernehmen
    data = data.split("\n")
    stringLen, queueLen = map(int,data[0].split(" "))
    ablaufplan = [int(a[1]) - 1 for a in data[-1].split(" ")]

    # Einrichten der Queue
    string = " " * stringLen

    for zeile in range(1,queueLen+1):
        # Der range ist so gewaehlt, dass die erste Zeile (0)
        # mit den Metadaten und auch die letzte Zeile (queueLen+2)
        # mit dem Ablaufplan nicht geparst wird
        queue_id, position, content = data[zeile].split(" ")
        queue_id = int(queue_id[-1]) - 1
        queue[queue_id].append([position,content])

    # Wir arbeiten die queue ab
    for id in ablaufplan:
        # Ueber die id wird auf die jeweilige Zeile zugegriffen
        start, content = queue[id].pop(0)

        # Start und Ende festlegen
        start = int(start)
        ende = start + len(content)
            
        if start == 0:
            # z. B.
            # 0123456789
            # WORT
            #     456789
            string = content + string[ende:]
        else:
            # z. B.
            # 0123456789
            #    WORT
            # 012    789
            string = string[:start] + content + string[ende:]
            
    return string
    

data = """44 13
Q1 35 KNOWN
Q1 20 IMPORT
Q3 24 GRANT
Q1 4 IN
Q1 15 MADE
Q1 32 AN
Q2 39 LEDGE
Q2 5 NOTION
Q2 6 A
Q2 16 OR
Q3 0 IMAGE
Q3 12 IS
Q3 30 THIS
Q1 Q3 Q3 Q3 Q2 Q1 Q2 Q1 Q3 Q1 Q2 Q2 Q1"""

print(data_verarbeiten(data))
Zumindest wird das Problem so gelöst.

Keine Kommentare:

Kommentar veröffentlichen