[Python-de] Denksportaufgabe: Beschraenktes Sortieren

Dinu Gherman gherman at darwin.in-berlin.de
Thu May 8 10:56:04 EDT 2003


Hallo!

In Anbetracht des weiter verschobenen Berliner Python-Treffens habe
ich mir mal wieder eine kleine Denksportaufgabe ausgedacht, wenn's
recht ist?

Gesucht ist eine Sortierfunktion sort(sequence, indices=[]), die
"Sequenzen von Sammelobjekten" nach ganz bestimmten Indices (und nur
auf diese beschraenkt) sortiert zurueckgibt. Mit "Sammelobjekten"
sind hier Listen, Dictionaries und Strings gemeint (bei Dictionaries
sind die Indices also die Schluessel). Sammelobjekte duerfen ver-
schieden gross sein, mussen aber alle ueber die gewuenschten Indices
verfuegen.

Hier ein bischen Code zum Testen eigener Funktionen fuer jede Art
von Sammelobjekt (Sammlungsobjekt?):

# -----------------------------------------------------
def show(sequenceOfCollections):
     for seq in sequenceOfCollections:
         print seq
     print

input = [[1, 1, 1, 2],
          [2, 0, 2, 3],
          [0, 1, 3, 0],
          [2, 0, 0, 1]]

show(input)
show(sort(input, [1, 0]))

input = [{1:2, 2:2, 3:4},
          {1:3, 2:1, 3:2},
          {1:0, 2:1, 3:2},
          {1:0, 2:1, 3:0}]

show(input)
show(sort(input, [2, 3]))

input = ["abcabcabc",
          "abcbcabc",
          "abcabbc",
          "abcbaac"]

show(input)
show(sort(input, [3, 4]))
# -----------------------------------------------------

Und hier die erwartete Ausgabe:

# -----------------------------------------------------
[1, 1, 1, 2]
[2, 0, 2, 3]
[0, 1, 3, 0]
[2, 0, 0, 1]

[2, 0, 2, 3]
[2, 0, 0, 1]
[0, 1, 3, 0]
[1, 1, 1, 2]

{1: 2, 2: 2, 3: 4}
{1: 3, 2: 1, 3: 2}
{1: 0, 2: 1, 3: 2}
{1: 0, 2: 1, 3: 0}

{1: 0, 2: 1, 3: 0}
{1: 3, 2: 1, 3: 2}
{1: 0, 2: 1, 3: 2}
{1: 2, 2: 2, 3: 4}

abcabcabc
abcbcabc
abcabbc
abcbaac

abcabcabc
abcabbc
abcbaac
abcbcabc
# -----------------------------------------------------

Cui bono? Jedem, der Listen/Arrays von Datensaetzen/Records und Fel-
dern nach bestimmten Indices/Schluesseln sortieren moechte, ohne die
Reihenfolge anderer "unbeteiligter" Elemente zu veraendern.

Jetzt kommt's: die besondere Anforderung hierbei lautet wie folgt.
Die Loesung muss "pythonisch" sein (was auch immer das allgemein
heissen mag)! Hierbei heisst es, der Code der Sortierfunktion muss
selbst auch sehr beschraenkt sein, und darf nur ca. 4-5 Zeilen (ca.
200 Zeichen) enthalten!

Sonderpunkte gibt es fuer denjenigen, der seine Loesung auf Struct-
aehnliche Instanzobjekte mit Attributen als Schluessel erweitert!

Viel Vergnuegen! ;-)

Dinu

--
Dinu C. Gherman
......................................................................
"One of the common denominators I found is that expectations rise
above that which is expected."
(George W. Bush, 27 Sep. 2000)





More information about the Python-de mailing list