Solució del lliurament 1 G10 d’Ampliació d’Informàtica¶
- Organització:
Secció ETSEIB, Departament de Ciències de la Computació, UPC
- Data:
13 de març de 2024
- Durada:
45 minuts
- Copyright:
Reconeixement-CompartirIgual 4.0 No adaptada de Creative Commons
Jocs de proves
>>> from cerca import cerca_suma
>>> it = iter([1, 2, 3, 4, 10, 20, -5, 35, 88])
>>> it2 = cerca_suma(it)
>>> list(it2) # doctesttag: +TAG=1_cerca-no_buida
[3, 10, 20, 35]
>>> list(cerca_suma(iter([0, 1, 1, 2, 4, 8, 16, 32, 64, 100]))) # doctesttag: +TAG=1_cerca-no_buida
[0, 1, 2, 4, 8, 16, 32, 64]
>>> list(cerca_suma(iter([1, -1, 0] * 10))) # doctesttag: +TAG=1_cerca-no_buida
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> list(cerca_suma(iter(range(100)))) # doctesttag: +TAG=1_cerca-no_buida
[0, 3]
>>> list(cerca_suma(iter([1, -2, 4]))) # doctesttag: +TAG=1_cerca-buida
[]
>>> m = [-69, -55, -124, -58, -6, 66, 95, 39, -18, 88, 92, -43, 93, 56, 23, -79, 100, 200, -96, 304, 25, 12, 645, 81, 51, -96, 1326, 12, 2664, 5328, 2664, 2664, 4, -40, -94, 12, -5, 76, 99, 93]
>>> list(cerca_suma(iter(m))) # doctesttag: +TAG=1_cerca-no_buida
[-124, 100, 200, 304, 645, 1326, 2664, 5328]
>>> m = [-66, -66, -132, 50, -17, 31, -38, -238, 20, 4, 81, -12, -383, 30, -736, -1472, -2944, -5888, -1472, -13248, -736, -27232, -54464, -108928, -27232, -245088, -490176, 56, -77, 31, -34, 54, -980322, -1960644, -3921288, -7842576, -15685152, 44, -31370260, -62740520, -31370260, 70, -156851230, -313702460, -627404920, -1254809840, 76, 75, -87, -2509619616, 16, 83, 20, 53, -100, 21, -45, 1, 88, -38, 45, 24, 80, 43, -9, 24, -67, 58, 97, 36, -53, 35, -23, -67, 66, 13, -92, -97, -26, -1]
>>> list(cerca_suma(iter(m))) # doctesttag: +TAG=1_cerca-no_buida
[-66, -132, -238, -383, -736, -1472, -2944, -5888, -13248, -27232, -54464, -108928, -245088, -490176, -980322, -1960644, -3921288, -7842576, -15685152, -31370260, -62740520, -156851230, -313702460, -627404920, -1254809840, -2509619616]
>>> m = [0, -18, -55, -74, -26, -36, -209, -69, -2, -49, 27, -94, -605, 61, 77, -97, -1169, -2338, -2338, -2338, -9352, -18704, -37408, -74816, -149632, -1169, -84, -55, -42, 74, 73, -70, -300537, -300537, -901611, -1803222, 50, -21, -3606415, -36, -7212866, 71, 51, -14425610, -28851220, -57702440, -115404880, -57702440, -28851220, -317363420, -634726840, 29, -1269453651, -62, 12, -2538907352, -13, -63, -5077814780, -5077814780, -5077814780, -77, -20, -20311259217, 87, -75, 77, 52, -40622518293, 79, 1, -39, -81245036545, 10, -162490073080, -162490073080, -487470219240, -974940438480, -1949880876960, -3899761753920, -7799523507840, 20, -15599047015660, -31198094031320, -15599047015660, -77995235078300, 53, -76, -34, 55, 8, -42, 35, -155990470156601, -19, -311980940313221, -92, -623961880626534, -623961880626534, 5, -89, -89, 7, 66, -68, -9, 41, -91, 34, -62, -40, 97, -11, -62, 27, 18, -54, -100, -92, -3, -87, -3, 99, 10, 16, -11, -62, 96, -89, -65, -84, -46, -70, 89, -94, -31, 9, 85, 95, 33, 35, -97, 67, -79, 16, -58, -20, -22, -54, -91]
>>> list(cerca_suma(iter(m))) # doctesttag: +TAG=1_cerca-no_buida
[0, -209, -605, -1169, -2338, -9352, -18704, -37408, -74816, -149632, -300537, -901611, -1803222, -3606415, -7212866, -14425610, -28851220, -57702440, -115404880, -317363420, -634726840, -1269453651, -2538907352, -5077814780, -20311259217, -40622518293, -81245036545, -162490073080, -487470219240, -974940438480, -1949880876960, -3899761753920, -7799523507840, -15599047015660, -31198094031320, -77995235078300, -155990470156601, -311980940313221, -623961880626534]
>>> m = [8, 8, 16, 32, 16, 50, 93, 9, 77, 309, 2, 620, 1240, 1240, 53, 12, 3785, 7570, -1, 68, 77, 9, 77, 50, 96, 23, 15539, 31078, 15539, 77695, 49, 81, 27, 71, 73, 155691, 311382, 622764, 1245528, 622764, 3113820, 3113820, 311382, 311382, 9964224, 9964224, 29892672, 59785344, 119570688, 59785344, 298926720, 597853440, 1195706880, 2391413760, 4782827520, 4782827520, 1195706880, 30, 99, 15544189569, 31088379138, 30, 20, 37, 31, 11, 62176758405, 124353516810, 83, 41, 248707033744, 497414067488, 994828134976, 1989656269952, 3979312539904, 3979312539904, 11937937619712, 23875875239424, 47751750478848, 23875875239424, 43, 86, 4, 19, 16, 32, 94, 81, 24, 33, 26, 33, 76, 20, 37, 62, 12, 34, 28, 9, 86, 75, 93, 23, 86, 32, 18, 31, 55, 41, 43, 43, 53, 2, 77, 58, 74, 32, 63, 26, 71, 57, 85, 35, -2, 1, 4, 60, 33, -2]
>>> list(cerca_suma(iter(m))) # doctesttag: +TAG=1_cerca-no_buida
[8, 16, 32, 309, 620, 1240, 3785, 7570, 15539, 31078, 77695, 155691, 311382, 622764, 1245528, 3113820, 9964224, 29892672, 59785344, 119570688, 298926720, 597853440, 1195706880, 2391413760, 4782827520, 15544189569, 31088379138, 62176758405, 124353516810, 248707033744, 497414067488, 994828134976, 1989656269952, 3979312539904, 11937937619712, 23875875239424, 47751750478848]
>>> m = [85, 70, 76, 231, 462, 231, 231, 6, 99, 29, 1520, 1520, 4560, 9120, 9120, 27360, 4560, 59280, -2, 54, 46, 78, -1, 118735, 237470, 118735, 593675, 1187350, 65, 2374765, 47, 4749577, 44, 54, 69, 45, 24, 85, 14, 9499489, -5, 70, 85, 43, 40, 89, 91, 31, 95, 23, 58, 70, 3, 96, 42, 41, 14, -4, 2, 38]
>>> list(cerca_suma(iter(m))) # doctesttag: +TAG=1_cerca-no_buida
[231, 462, 1520, 4560, 9120, 27360, 59280, 118735, 237470, 593675, 1187350, 2374765, 4749577, 9499489]
>>> from diumenge import primer_diumenge
>>> d = primer_diumenge(2024, 3)
>>> d # doctesttag: +TAG=2_diumenge
datetime.date(2024, 3, 3)
>>> d = primer_diumenge(2023, 11)
>>> d # doctesttag: +TAG=2_diumenge
datetime.date(2023, 11, 5)
>>> d = primer_diumenge(2000, 1)
>>> d # doctesttag: +TAG=2_diumenge
datetime.date(2000, 1, 2)
>>> d = primer_diumenge(2000, 7)
>>> d # doctesttag: +TAG=2_diumenge
datetime.date(2000, 7, 2)
>>> d = primer_diumenge(1987, 5)
>>> d # doctesttag: +TAG=2_diumenge
datetime.date(1987, 5, 3)
>>> d = primer_diumenge(2017, 1)
>>> d # doctesttag: +TAG=2_diumenge
datetime.date(2017, 1, 1)
>>> d = primer_diumenge(2020, 12)
>>> d # doctesttag: +TAG=2_diumenge
datetime.date(2020, 12, 6)
>>> d = primer_diumenge(2003, 4)
>>> d # doctesttag: +TAG=2_diumenge
datetime.date(2003, 4, 6)
>>> d = primer_diumenge(1999, 7)
>>> d # doctesttag: +TAG=2_diumenge
datetime.date(1999, 7, 4)
>>> d = primer_diumenge(1990, 5)
>>> d # doctesttag: +TAG=2_diumenge
datetime.date(1990, 5, 6)
>>> from seqrac import sequencia
>>> it = sequencia(3)
>>> list(next(it) for i in range(13)) # doctesttag: +TAG=3_seqrac
[Fraction(1, 3), Fraction(9, 2), Fraction(19, 7), Fraction(39, 22), Fraction(79, 67), Fraction(159, 202), Fraction(101, 53), Fraction(203, 160), Fraction(11, 13), Fraction(39, 22), Fraction(79, 67), Fraction(159, 202), Fraction(101, 53)]
>>> it = sequencia(17)
>>> list(next(it) for i in range(10)) # doctesttag: +TAG=3_seqrac
[Fraction(1, 17), Fraction(51, 2), Fraction(103, 7), Fraction(207, 22), Fraction(415, 67), Fraction(831, 202), Fraction(1663, 607), Fraction(3327, 1822), Fraction(605, 497), Fraction(1211, 1492)]
>>> it = sequencia(112)
>>> list(next(it) for i in range(10)) # doctesttag: +TAG=3_seqrac
[Fraction(1, 112), Fraction(168, 1), Fraction(337, 4), Fraction(675, 13), Fraction(1351, 40), Fraction(2703, 121), Fraction(5407, 364), Fraction(10815, 1093), Fraction(21631, 3280), Fraction(43263, 9841)]
>>> import itertools
>>> it = sequencia(5)
>>> list(itertools.islice(it, 10, 17)) # doctesttag: +TAG=3_seqrac
[Fraction(4601, 2429), Fraction(9203, 7288), Fraction(18407, 21865), Fraction(65595, 36814), Fraction(131191, 110443), Fraction(262383, 331330), Fraction(165665, 87461)]
>>> it = sequencia(2)
>>> list(itertools.islice(it, 15, 22)) # doctesttag: +TAG=3_seqrac
[Fraction(20439, 17551), Fraction(40879, 52654), Fraction(78981, 40879), Fraction(157963, 122638), Fraction(315927, 367915), Fraction(367915, 210618), Fraction(735831, 631855)]
>>> it = sequencia(53)
>>> list(itertools.islice(it, 20, 27)) # doctesttag: +TAG=3_seqrac
[Fraction(19131871, 14155747), Fraction(38263743, 42467242), Fraction(21233621, 12754581), Fraction(42467243, 38263744), Fraction(84934487, 114791233), Fraction(344373699, 169868974), Fraction(688747399, 509606923)]
>>> it = sequencia(75)
>>> list(itertools.islice(it, 50, 67)) # doctesttag: +TAG=3_seqrac
[Fraction(36454828146837, 16933120346287), Fraction(72909656293675, 50799361038862), Fraction(610122646809, 637648883333), Fraction(637648883333, 406748431206), Fraction(1275297766667, 1220245293619), Fraction(2550595533335, 3660735880858), Fraction(5491103821287, 2550595533335), Fraction(10982207642575, 7651786600006), Fraction(21964415285151, 22955359800019), Fraction(22955359800019, 14642943523434), Fraction(6558674228577, 6275547224329), Fraction(13117348457155, 18826641672988), Fraction(28239962509482, 13117348457155), Fraction(56479925018965, 39352045371466), Fraction(112959850037931, 118056136114399), Fraction(118056136114399, 75306566691954), Fraction(236112272228799, 225919700075863)]
>>> it = sequencia(13)
>>> list(itertools.islice(it, 80, 87)) # doctesttag: +TAG=3_seqrac
[Fraction(271402431107303, 289855033222513), Fraction(869565099667539, 542804862214606), Fraction(1739130199335079, 1628414586643819), Fraction(3478260398670159, 4885243759931458), Fraction(2442621879965729, 1159420132890053), Fraction(4885243759931459, 3478260398670160), Fraction(9770487519862919, 10434781196010481)]
>>> it = sequencia(18)
>>> list(itertools.islice(it, 95, 107)) # doctesttag: +TAG=3_seqrac
[Fraction(112771459416087000369, 82130606909120272153), Fraction(225542918832174000739, 246391820727360816460), Fraction(369587731091041224690, 225542918832174000739), Fraction(739175462182082449381, 676628756496522002218), Fraction(1478350924364164898763, 2029886269489566006655), Fraction(2029886269489566006655, 985567282909443265842), Fraction(4059772538979132013311, 2956701848728329797527), Fraction(8119545077958264026623, 8870105546184989392582), Fraction(13305158319277484088873, 8119545077958264026623), Fraction(26610316638554968177747, 24358635233874792079870), Fraction(53220633277109936355495, 73075905701624376239611), Fraction(73075905701624376239611, 35480422184739957570330)]
>>> it = sequencia(47)
>>> list(itertools.islice(it, 100, 117)) # doctesttag: +TAG=3_seqrac
[Fraction(16073008790557848506084262823, 10878580176027021848862703147), Fraction(32146017581115697012168525647, 32635740528081065546588109442), Fraction(16317870264040532773294054721, 10715339193705232337389508549), Fraction(32635740528081065546588109443, 32146017581115697012168525648), Fraction(65271481056162131093176218887, 96438052743347091036505576945), Fraction(289314158230041273109516730835, 130542962112324262186352437774), Fraction(578628316460082546219033461671, 391628886336972786559057313323), Fraction(1157256632920165092438066923343, 1174886659010918359677171939970), Fraction(587443329505459179838585969985, 385752210973388364146022307781), Fraction(1174886659010918359677171939971, 1157256632920165092438066923344), Fraction(2349773318021836719354343879943, 3471769898760495277314200770033), Fraction(10415309696281485831942602310099, 4699546636043673438708687759886), Fraction(20830619392562971663885204620199, 14098639908131020316126063279659), Fraction(41661238785125943327770409240399, 42295919724393060948378189838978), Fraction(21147959862196530474189094919489, 13887079595041981109256803080133), Fraction(42295919724393060948378189838979, 41661238785125943327770409240400), Fraction(84591839448786121896756379677959, 124983716355377829983311227721201)]