kota9s Herausforderung 5 Probleme, die Softwareentwickler in einer Stunde lösen sollten. Ich habe viel gelernt. Sie denken über eine solche Wiederholung nach.
Also gab ich die Herausforderung auf und beschloss, sie für ein späteres Studium zu kopieren. Es macht keinen Spaß, es einfach zu kopieren, also ist es nur Lambda.
box=lambda *x:x
unbox=lambda x:x[-1]
do=box
switch=unbox
Es ist Vorbereitung. Ich möchte meinen eigenen Schalter verwenden. Seit ich es geschafft habe, benutze ich auch meine eigene Falte.
foldl=(lambda f,acc,xs:
switch(
xs == [] and do( acc )
or do( foldl(f, f(acc, xs[0]), xs[1:]) )
)
)
Mit der Funktion f_n, die zwei ganze Zahlen zusammennimmt Eine Funktion ff_n, die eine Liste von Ganzzahlen aufnimmt und zusammenfügt. Es fühlt sich an, als wären int und str nicht cool.
f_n=lambda x,y:int(str(x)+str(y))
ff_n=lambda xs:foldl(f_n,0,xs)
Das Hauptthema von hier. Ich habe versucht, eine Liste von Ganzzahlen für die Erweiterbarkeit zu erstellen.
f_5=(lambda NUMS, n,M:
(lambda digits=NUMS[:n],
r_n=range(1,n),
out=[]:
(lambda n_digits=ff_n(digits):
(
out.append(str(n_digits)) if n_digits==M else None,
[[ out.append(x + "+" + str(ff_n(digits[-i:n])))
for x in f_5(NUMS, n-i , M - ff_n(digits[-i:n])) ] for i in r_n ],
[[ out.append(x + "-" + str(ff_n(digits[-i:n])))
for x in f_5(NUMS, n-i , M + ff_n(digits[-i:n])) ] for i in r_n ],
out,
)[-1]
)()
)()
)
ff_5=lambda NUMS, M: f_5(NUMS, len(NUMS), M)
NUMS=range(1,10)
print ff_5(NUMS,100)
erledigt. Es scheint, dass es sich um eine Liste positiver Ganzzahlen handeln kann. Wenn Sie versuchen, ein Muster zu finden, das mit einer geeigneten Nummernliste 1000 wird
>>> ff_5([1,5,4,2,3,7,9,34,57,64,23],1000)
['15-4+2+37+934+57-64+23', '1+5-42-3+7+934+57+64-23']
Da das Original mit + = geschrieben ist, war ich ein wenig besorgt darüber, wie der Rückgabewert akkumuliert werden kann. Sie können wahrscheinlich standardmäßig [] im Argument out definieren und Elemente mit append hinzufügen, oder? Als ich es geschrieben habe, scheint es so zu funktionieren, wie es ist. Das ist fast ...
Zum Beispiel
a=(lambda :
(lambda b=[]:
(b.append(1),
b.append(2),
b[0]+b[1],
)[-1]
)()
)
Sie können die Berechnungsergebnisse in einer leeren Liste speichern und später verwenden. Es ist fast eine lokale Variable, nicht wahr? Dies. Wenn ich es laufen lasse
>>> a()
3
Eine Neuzuweisung ist auch durch Poppen und Einfügen möglich. Ich werde es nicht tun. Es wird Mist sein.
Recommended Posts