Llicència
Pots copiar i redistribuir aquest material seguint la llicència Attribution-NonCommercial-ShareAlike 4.0 International CC BY-NC-SA 4.0, indicant-ne autors originals, l'origen (aquesta web), sense fins comercials i mantenint-ne aquesta la llicència
Autors:
Sumari
- Zombis a l'ITB!
- TimeTillDawn
- CountTheZombies
- ExitWhenYouCan
- FastOrSlowZombies
- FindTheZombie
- ZombieCacher
- StudyTheZombie
- KillAsManyZombies
- ScapeIfYouCan
- ScapeIfYouCanHard
Zombis a l'ITB!
Obres els ulls i està entrant la llum del sol per la finestra. No ha sonat el despertador; t'has adormit. T'aixeques corrent, agafes l'abric i surts de casa mentre crides -adéu!-. És estrany, normalment a aquesta hora hi hauria d'haver el teu germà despert però no l'has sentit. Surts corrents cap al metro immers en els teus pensaments i la son.
Avui és el dia 21 de desembre de 2020. És l'últim dia de classe abans de vacances, però et toca anar l'ITB. -farem alguna cosa tranquil·la- penses, que és l'últim dia.
Entres al metro i seus al seient. De sobte t'adones que estàs sol al vagó. De fet no t'has trobat ningú pel carrer. -Ha tornat el confinament estricte?- penses. La son no et deixa veure-hi clar i per sort has arribat a Trinitat Nova i baixes.
Fa un vent gèlid, així que et poses la caputxa i segueixes caminant mirant a terra. Els carrers segueixen buits.
La porta de l'ITB és oberta, entres corrent que fas tard i no vols que et vegin entrar, puges les escales i et plantes davant la teva classe. No hi ha ningú, la porta és oberta, però la classe està buida. De sobte comences a dubtar que avui hi hagués classe. -Obrir l'escola només per un dilluns abans de vacances. Deu ser pont.- penses alleujat. Per si de cas miraré a les altres aules. Puges a la tercera planta i entres a una aula. També està buida. T'asseus a un ordinador i decideixes que ho comprovaràs un moment a Internet.
PLAM! un corrent d'aire ha tancat la porta de l'aula. T'has emportat un bon ensurt. No saps perquè però notes una sensació estranya, alguna cosa no està bé. T'adones que fa una estona que estàs sentint un soroll de fons que cada cop és més fort. Arrggg, graaarggg, agggrrr… T'apropes a mirar per la finestra, a veure què passa. El pati de l'ITB està infestat de zombis! T'entra la por, vols sortir corrents, però les veus són ara molt a prop. Mires pel vidre de la porta: el passadís està ple de zombis!
ZOMBIS A L'ITB!
Fes un programa que printi per pantalla ZOMBIS A L'ITB!
ZOMBIS A L'ITB!
TimeTillDawn
Està ple de zombis! Per sort, les teves tardes perdent el temps mirant concursos de supervivència donen els seus fruits. El primer que s’ha de fer és una anàlisi de la situació. Necessites calcular quantes hores de llum et queden. Per sort saps que el sol es pon a les 17:22. Com a bon informàtic el primer és el primer i decideixes fer un petit programa que, introduint l’hora actual et digui quan falta perquè es pongui el sol.
L’hora introduïda per l’usuari només podrà ser entre les 0:00 i les 17:22 (el programa no ha de fer aquesta comprovació).
input
16 20
output
62
CountTheZombies
El temps passa molt ràpid. Fas una ullada ràpida, un, dos, tres. Desde la posició on estàs només pots veure els peus dels zombis. Necessites estimar el nombre total de zombis per poder fer una anàlisi de la situació.
Fes un programa que donat el número de peus que has comptat, indiqui quants zombis hi ha, suposant que tots els zombis tenen dos peus. A més, si n’hi ha menys de 30 “pocs zombis”, si hi ha menys de 70 “forces zombis”, si n’hi ha menys de 200 “molts zombis” i 200 o més “moltíssims zombis”.
input
430
output
hi ha 215 zombis
moltíssims zombis
ExitWhenYouCan
Segons els teus càlculs hi ha moltíssims zombis!
T'amagues darrere la porta. -Haig de sortir d'aquí sense que em vegin- penses, però no goses mirar pel vidre perquè els zombis no et vegin. Sense voler fas un cop a la porta. AARRGGGRRR responen els zombis. Tens una idea. Tornes a picar a la porta GGGRARRARR, responen.
Amb tots els coneixements adquirits amb els súper professors de l'ITB, construeixes un petit dispositiu que va picant a la porta cada minut. Un micro, grava el so, i un algoritme de SpeechToText ho transforma en caràcters. Només et falta fer un petit programa que, donat un text, pugui assegurar que no és un soroll de zombi. Cerqueu a DuckDuckGo i Internet us diu que els zombis només poden fer tres sons A, R i G.
Donat tots els sons gravats, indica quan és segur sortir per la porta.
L'usuari introduirà els diferents sons gravats amb un salt de línia al final. No susaran lletres majúscules. Imprimeix "espera" si el text prové d'un zombi, o "surt ara". Per acabar el programa introduirà END
input
argrgr
graaagr rgrgra
grarrgrgrarg ragr ragr
rggrr
miau
END
output
espera
espera
espera
espera
surt ara
FastOrSlowZombies
De sobte tens una pujada de moral, el teu programa ha funcionat! Et veus capaç de tot. Així que decideixes que l'única opció és trobar una forma de lluitar contra els zombis: eliminar-ne tants com puguis i escapar.
Fas memòria de tot el que saps sobre els zombis de les pel·lícules que has vist i et surt un dubte: Aquests zombis són dels que van lents i a poc a poc, o dels que corren? Observes com es mouen al pati, però no ho tens clar. Decideixes que només hi ha una forma de comprovar-ho.
Per cada zombi que veus en calcules la seva velocitat i l'apuntes. Segons el web https://zombie.fandom.com els zombis que es mouen com a màxim a 3km/hora són lents, si es mouen com a màxim a 6km/h són normals i ràpids en altre cas.
Donada una llista de velocitats, imprimeix de quin tipus és cada un. Al finalitzar, imprimeix la velocitat mitjana del grup de zombis.
input
1 2 5 7 1 2 1 2 -1
output
lent
lent
normal
ràpid
lent
lent
lent
lent
especiment mitjà: lent
FindTheZombie
Perfecte, has tingut sort, són zombis lents. Creus que hi podràs combatre.
Per fer-ho necessites poder estudiar un zombi de ben a prop, però estàs fent un grau d'informàtica i no un d'arts marcials, així que la lluita cos a cos no és el teu fort. Decideixes usar la intel·ligència. Necessito un zombi que pugui guanyar-lo amb la meva força, per tant necessito que no tingui ulls per veure'm, no tingui boca per mossegar-me i tampoc tingui cap braç per agafar-me. Si trobo un zombi així el podré agafar, tancar-lo a una aula i estudiar-ne els punts dèbils.
Ràpidament fas un petit dron amb una càmera i un algoritme de reconeixement d'imatge que va volant i va analitzant els zombis. A través de Bluetooth, el nostre dron envia al nostre ordinador la informació que recopila en format text. Primer envia l'aula on ha trobat el zombi i després una imatge.
Per tal d'optimitzar la transmissió també envia la imatge en mode text.
Per exemple la següent entrada ens indica que s'ha trobat un zombi amb ulls, dents i braços a l'aula A203
A203
^ ^
o o
|||
- -
La següent entrada ens indica que s'ha trobat un zombi sense cap ull, ni dents, ni braços a l'aula A201
A201
^ ^
x x
-
| |
Fes un algoritme que ens indiqui a quina aula es pot trobar un zombi sense ulls, ni dents, ni braços. Si n'hi ha més d'un, torna la primera.
input
A201
^ ^
o o
|||
- -
A202
^ ^
o x
|||
| -
A202
^ ^
x x
|||
| |
A203
^ ^
x x
-
| |
A202
^ ^
x x
-
| |
END
output:
A203
ZombieCacher
Perfecte, ja tenim el zombi localitzat i per sort està a l'aula del costat. Necessitem alguna cosa per agafar-lo. Decideixes mirar que tens a les butxaques: una pinta, un xiclet, un pèl de gos, un mesurador de distàncies làser, una corda. Eureka! L'agafarem amb la corda, de petit eres fan de les pel·lícules de l'oest i creus que podràs fer un llaç i atrapar-lo a la distància. Però les habilitats físiques segueixen sense ser el teu punt fort, així que necessites que el zombi estigui ben a prop. Seus a pensar i dissenyes un pla.
La idea és fer un estudi del zombi per després llançar la corda per caçar-lo en els moments més òptims. Per fer-ho usarem el mesurador de distància que has trobat a la butxaca. En una primera fase apuntaràs amb el lector al zombi i enregistraràs a quina distància es troba.
En una segona fase, quan el lector ens indiqui que està com a mínim tant aprop que el més aprop que ha estat en la fase d'estudi llençarem la corda per atrapar-lo.
L’usuari primer introduirà les distàncies registrades en la primera fase. Quan estigui escriurà -1
Després introduirà les distàncies registrades en la segona fase. Imprimeix per pantalla “Està a X m, ARA!” quan sigui inferior a totes les distàncies introduïdes en la primera fase. Quan estigui escriurà -1
input
10 10 20 30 33 32 23 40 28 27 27 14 11 12 10 20 30 33 32 30 33 32 30 33 32 -1
33 38 22 19 10 8 20 30 25 7 20 -1
ouput
Està a 10 m, ARA!
Està a 8 m, ARA!
Està a 7 m, ARA!
StudyTheZombie
Zombi atrapat! L'estires amb la corda i et tanques a una aula per estudiar-lo. Has de mirar com el pots neutralitzar. A les pel·lícules usen pistoles, matxets, serres mecàniques,… però no en tens a prop. Decideixes usar el que tens més a mà i fer un petit estudi de quina és l’eina més adequada. De forma apuntaràs com el zombi reacciona a cada un dels teus atacs. Com a punt de partida el zombie tindrà 1000 punts de vida, i després de cada atac, apuntaràs quanta vida li queda.
Afages un teclat i proves de neutralitzar el zombi, pràcticament ni s’imuta. Apuntes - teclat: 982-. Després ho proves amb el laser del ratolí, però no li fa efecte -laser ratolí: 982-. El cable d’ethernet ja dona més bons resultats -cable ethernet: 901.
Un cop tens les dades apuntades és hora de analitzar-les. Necessites un petit programa per fer-ho i que et digui quina és l’eina més eficaç.
L’usuari introduirà primer cada una de les eines utilitzades amb la vida que li queda al zombi. Quan ja no hi hagi més eines escriurà END.
Printa per pantalla l’eina més eficaç i com d’eficaç és. Si n’hi ha dues amb el mateixa eficacia, retorna la primera que has provat.
Input
teclat
982
laser ratolí
982
cable ethernet
901
tovalloletes higièniques
401
END
Output
tovalloletes higièniques: 500
KillAsManyZombies
Després del estudi trobem la forma de neutralitzar-los. Sembla que els zombis son al·lèrgics a les tovalloletes per netejar els teclats. El contacte amb aquestes els fa desintegrar-se.
El nostre zombi escanyolit li hem hagut de tirar dues tovalloletes i s'ha desintegrat, però la nostra intuïció ens diu que segons la mida del zombi haurem de necessitar més o menys tovalloletes. Contem que per desintegrar un zombie podem necessitar entre 1 i 10 tovalloletes. Però el nostre pot ja no està gaire ple i hi ha molts zombis al pati. Hem d'escollir bé.
Decidim fer una llista amb els diferents zombis que hi ha al pati, amb el nombre de tovalloletes que necessitem per cada un. Donat el nombre de tovalloletes, volem saber quants zombis podem eliminar. Les llançarem desde la finestra, per tant podem escollir atacar qualsevol dels zombis del pati.
- Primer introduirem el nombre de tovalloletes (entre el 1 i el 10).
- A continuació introduirem, per cada zombi, quantes tovalloletes necessitem per desintegrar-lo.
- Imprimeix per pantalla el màxim nombre de zombis que pots eliminar, tenint en compte que pots desintegrar qualsevol de la llista.
input
10
1 3 5 2 3 2 5 6 1 10 4 2 4 2 5 6 1 2 -1
ouput
6
ScapeIfYouCan
Comencem a llençar les tovalloletes sobre els zombis seleccionats i deixem la població força minvada, però segueixen havent-hi molts zombis per poder escapar.
Hauràs de triar bé la ruta per a no morir en l’intent. Decideixes que l’opció més encertada és corre sempre endavant i no mirar mai enrere, per no tenir la temptació de tornar a tancar-te a l’ITB.
Decideixes fer un mapa del pati, dividint-lo en una matriu (tipus raster) indicant el nombre de zombis que hi ha a cada casella. Tenint en compte que entrem al pati per la casella [0,0] i hem de sortir per la [N,N]. Necessitem el camí a seguir per on ens trobarem el mínim nombre de zombis, tenint en compte que només ens podem desplaçar en vertical o horitzontal sempre cap endavant (mai podem anar a una casella amb una i o j inferior a l’actual).
- Primer s'introduirà la mida de la matriu (sempre serà quadrada)
- Els valors de cada fila, començant per la posició 0,0 i acabant amb la N, N
4
1 3 1 5
2 4 4 1
5 0 2 3
0 0 1 2
output
10
Explicació
1 3 1 5
2 4 4 1
5 0 2 3
0 0 1 2
ScapeIfYouCanHard
Abans de llençar-nos a córrer pel pati fem un últim pensament. Si caminar cap enrere m’estalvia d’haver de lluitar amb zombis, pot ser em val la pena!
Decideixes fer un últim esforç i millorar el teu programa anterior i calcular quin és el camí per sortir del pati passant pel menor nombre de zombis si pots caminar cap a les 4 direccions (però no en diagonal)
6
1 0 9 5 1 1
1 8 7 0 0 1
0 6 4 1 6 1
0 0 1 0 8 0
9 3 5 7 9 1
5 7 7 6 7 1
output
8
Explicació
6
1 0 9 5 1 1
1 8 7 0 0 1
0 6 4 1 6 1
0 0 1 0 8 0
9 3 5 7 9 1
5 7 7 6 7 1