AW: [Python-de] Noch eine Denksportaufgabe

Gerson Kurz Gerson.Kurz at t-online.de
Thu Oct 10 17:17:51 EDT 2002


>     Schreibe eine Prozedur, die die Elemente eines Arrays mit M
> Elementen um n
>     rotiert. -M < n < M
>
>     Beispiel: M = 6, n = 2. Vorher: {1, 2, 3, 4, 5, 6} Nachher:
> {5, 6, 1, 2, 3, 4}
>
>     Versuche Speicherbedarf zu minimieren.


Wenn es wirklich um den minimalen Speicherbedarf geht (und nicht um die
minimale Rechenzeit), dann wäre das hier ganz nett, denke ich:

def rot(l,m):
    while m:
        i = len(l)-1
        while i > 0:
            l[i] ^= l[i-1]
            l[i-1] ^= l[i]
            l[i] ^= l[i-1]
            i -= 1
        m -= 1

liste = [1,2,3,4,5,6]
rot(liste,2)
print liste

benötigt AFAIK 2 Variablen (i und m), wobei m eigentlich ein Parameter ist,
der geschreddert wird.

Natürlich wäre das folgende eine viel schönere und Python angemessenere
Lösung:

def rot(l,m):
    v=[m,len(l)-1,0,lambda
x,i,j:(j(i,x[i]^x[i-1]),j(i-1,x[i]^x[i-1]),j(i,x[i]^x[i-1])),
       lambda:v[2]>0
and(v[3](l,v[2],l.__setitem__),v[5](2,v[2]-1),v[4]()),0,
       lambda:v[0] and(v[5](2,v[1]),v[4](),v[5](0,v[0]-1),v[6]()) ]
    v.__setitem__(5,v.__setitem__) or v[6]()





More information about the Python-de mailing list