''' 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.
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:
Abonnieren
Kommentare zum Post (Atom)
Keine Kommentare:
Kommentar veröffentlichen