kota9's Challenge 5 problèmes que les ingénieurs logiciels devraient résoudre en une heure. J'ai beaucoup appris. Vous pensez à la récurrence comme ça.
J'ai donc abandonné le défi et décidé de le copier pour une étude ultérieure. Ce n'est pas amusant de simplement le copier, donc c'est juste lambda.
box=lambda *x:x
unbox=lambda x:x[-1]
do=box
switch=unbox
C'est la préparation. Je veux utiliser mon propre commutateur. Depuis que je l'ai fait, j'utilise également mon propre fichier foldl.
foldl=(lambda f,acc,xs:
switch(
xs == [] and do( acc )
or do( foldl(f, f(acc, xs[0]), xs[1:]) )
)
)
Avec la fonction f_n qui prend deux entiers ensemble Une fonction ff_n qui prend une liste d'entiers et les attache ensemble. On a l'impression que int et str ne sont pas cool.
f_n=lambda x,y:int(str(x)+str(y))
ff_n=lambda xs:foldl(f_n,0,xs)
Le sujet principal d'ici. J'ai essayé de faire une liste d'entiers pour l'extensibilité.
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)
l'a fait. Il semble que cela puisse être une liste d'entiers positifs. Si vous essayez de trouver un modèle qui devient 1000 avec une liste de numéros appropriée
>>> 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']
Comme l'original est écrit avec + =, j'étais un peu inquiet de savoir comment accumuler la valeur de retour. Vous pouvez probablement définir [] dans l'argument out par défaut et y ajouter des éléments avec append, non? Quand je l'ai écrit, il semble que cela fonctionne tel quel. C'est presque ...
Par exemple
a=(lambda :
(lambda b=[]:
(b.append(1),
b.append(2),
b[0]+b[1],
)[-1]
)()
)
Vous pouvez stocker les résultats du calcul dans une liste vide et les utiliser ultérieurement. C'est presque une variable locale, n'est-ce pas? cette. Quand je l'exécute
>>> a()
3
La réaffectation est également possible par pop-up et insertion. Je ne le ferai pas. Ça va être de la merde.
Recommended Posts