El Maximitzador T81158


Statement
 

pdf   zip

thehtml

Feu una funció maximitzador(f) que, donada una funció com a paràmetre (anomenem-la f; suposarem que aquesta funció f rep un nombre i retorna un nombre), retorni una altra funció.

Aquesta funció retornada ha de ser una funció tal que, després de n−1 invocacions amb paràmetres x1,…,xn−1, quan s’invoca amb paràmetre xn escrigui al stdout el màxim dels f(xi) trobats fins el moment (és a dir, el màxim de f(x1),…,f(xn) per a tots els xi amb que aquesta funció, retornada per maximitzador(f), ha estat invocada).

Entrada

La funció maximitzador(f) té un paràmetre: Una funció que, donat un nombre, retorna un nombre.

Sortida

La funció maximitzador(f) retorna una funció com la descrita a l’enunciat.

Observacions

Fixeu-vos que la funció retornada per maximitzador(f) ha d’escriure el màxim de f(x1),…,f(xn) per a tots els xi amb que aquesta funció, retornada per maximitzador(f), ha estat invocada, i ha de retornar una funció que continuï fent el que demana l’enunciat. Aquesta funció retornada per maximitzador(f) ha de fer les dues coses, escriure i retornar.

No podeu utilitzar cap llista, diccionari, conjunt o cap altra estructura de dades. Només nombres i funcions.

En aquest problema només cal que envieu un fitxer amb la funció demanada, sense cap codi addicional.

Un cop definida la funció, en provar-la al REPL de Python us hauria de sortir el mateix que podeu observar més avall.

Sample session
>>> import math
>>> quadrat = lambda x: x*x
>>> cosinus = math.cos
>>> 
>>> h = maximitzador(quadrat)
>>> h = h(2)
4
>>> h = h(3)
9
>>> h = h(2)
9
>>> h = h(1)
9
>>> h = h(5)
25
>>> h = h(3)
25
>>> 
>>> # També podem fer-ho així, més compacte:
>>> h = maximitzador(quadrat)
>>> h = h(2)(3)(2)(1)(5)(3)
4
9
9
9
25
25
>>> # o, directament (ara amb la funció abs):
>>> h = maximitzador(abs)(2)(1)(3)(2)(-4)
2
2
3
3
4
>>> # finalment, provem-ho amb el cosinus:
>>> h = maximitzador(cosinus)(math.pi)(math.pi/2)(4.2)(0.1)(math.pi/3)(math.pi/4)
-1.0
6.123233995736766e-17
6.123233995736766e-17
0.9950041652780258
0.9950041652780258
0.9950041652780258
>>> 
Information
Author
Jordi Delgado
Language
Catalan
Other languages
Spanish
Official solutions
Python
User solutions
Python