Bona solució, Moisès i, finalment, el codi no resulta tant "críptic" com el de l'anunci del ministeri sobre el cicle de DAW :-P: http://www.youtube.com/watch?v=4tZQtU8QiiY Posades en línia, la solució en C++ (sense POO) té uns 185 caràcters i aquesta en Python uns 156. Una reducció més o menys del 15%. No sé si és possible simplificar i reduir més l'algorisme. El que sí que és possible és fer-lo tan llarg com es vulgui. Només cal començar a definir classes abstractes, interfaces, jerarquies de classe, ... per convertir aquest petit programa en una aplicació amb moltes línies de codi ;-). En qualsevol cas, jo amb els alumnes intento fer que apliquin algunes conegudes regles de sentit comú, les quals transcrit en català perquè sonin millor :-D: RTFM: llegeix el maleït manual DRY: no et repeteixis KISS: mantingues-ho senzill, ximplet. Salutacions. José Moreno 2014-02-05 Moisès Gómez <iesmoises@xxxxxxxxx>: > Doncs a mi el repte del José m'ha picat prou. Finalment penso que he > trobat la manera de fer-ho en una línia amb Python. No serà elegant ni > eficient, i probablement força discutible, però... està expressat en una > línia: > > exec 'import ast\ntry:\n\tast.literal_eval(("()"+"".join([c for c in > raw_input() if c in > "()"])).replace(")","),"))\n\tresp="SI"\nexcept:\n\tresp="NO"\nprint resp' > > Evidentment hom em podria objectar que així qualsevol programa es pot > expressar en una línia i... bé, tindria raó :P Amb tot, no em negareu que > fer servir l'avaluador de tuples del propi Python per resoldre el problema > queda una mica... cool > > Moltes gràcies José pel repte. > > Per cert Joan, és molt xula la teva solució! Normalment no trobo excusa > (segurament per falta de coneixement) per a fer servir generadors. Havia > pensat una de semblant generant els parcials amb [ l[0:i] for i in > range(len(l))] per evitar la solució recursiva. > > És una llàstima que no muntem un concurs "casolà" de programació per > nosaltres. Aquest tipus d'exercicis permeten aprendre moltíssim. > > > 2014-02-02 Joan Josep Ordinas Rosa <jordinas@xxxxxxxxxxxxxxxxxxxxxxxxxxx>: > > 2014-01-31 Moisès Gómez <iesmoises@xxxxxxxxx>: >> > Jo amb Python m'he quedat amb tres, però també m'encantaria veure-ho amb >> > una! >> > >> > p = [0] + [1 if c=='(' else -1 for c in raw_input() if c in '()'] >> > while len(p)>1 and p[0]>=0: p[0]+=p.pop(1) >> > print 'SI' if p[0]==0 else 'NO' >> >> Variació exageradament pythonica en estil funcional (compatible amb >> Python 2.x i 3): >> >> ==================== >> import sys >> >> def partials(it, n=0): >> for i in it: n += i; yield n >> >> p = tuple(partials(1 if c == '(' else -1 for c in sys.stdin.read() if >> c in '()')) >> nested = p[len(p)-1] == 0 and all((x >= 0 for x in p)) >> print('SI' if nested else 'NO') >> ==================== >> >> No es la versió més eficient, però serveix per mostrar diversos tipus >> de generadors >> i un estil altament funcional. >> >> JJOR >> >> >