Oder doch nicht... Hier noch zwei Versionen mit anonymer rekursiver Funktion:
Code: Alles auswählen
def Y(r): return (lambda f: f(f))(lambda f: r(lambda *xs, **ys: f(f)(*xs, **ys)))
group1 = Y(
lambda g:
lambda cs, i=0, j=1:
([cs[i:j]] if cs else [])
if j >= len(cs) else
(g(cs, i, j+1) if cs[i] == cs[j] else [cs[i:j]] + g(cs, j, j+1))
)
def group2(cs):
if not cs:
return []
return Y(
lambda g:
lambda s, c, *cs:
(g(s + c, *cs) if c in s else [s][:bool(s)] + g(c, *cs))
if cs else
([s + c] if c in s else [s][:bool(s)] + [c])
)('', *cs)
Ja, ich weiß, wenn man das gesehen hat möchte man sich am liebsten die Augen mit Seife auswaschen.
Danke im Übrigen an sma, der den
Y-Kombinator in Python gebaut hat. Ich habe ihn ein wenig angepasst, damit man ihn mit den üblichen
*args, **kwargs verwenden kann.
Gruß,
Mick.
In specifications, Murphy's Law supersedes Ohm's.