Turboexcel - Državno (2018)
Državno natjecanje 2018. godine za 3. i 4. razred Srednje Škole - 3. zadatak - Dan 1
Mirko je tajnik u jednoj informatičkoj udruzi te često mora popunjavati Excel tablice. Njegova tablica ima K stupaca, a u prvom retku tablice nalaze se nazivi stupaca.
Mirku je popunjavanje tablica već naporno pa je krenuo razmišljati kako si olakšati posao. Primijetio je da je neke stupce tablice moguće odrediti iz drugih stupaca s pomoću jednostavne formule. Primjerice, stupac "inicijali" može se definirati kao spoj prvog slova iz "ime" i prvog slova iz "prezime".
Mirko nije stručnjak za Excel, ali je zato vrhunski programer. Odlučio je napisati program TurboExcel koji će iz Mirkovih primjera sam zaključiti koja Excel formula generira koji stupac. Ovako izgleda Mirkova zamisao:
- Mirko će programu dati imena stupaca za koje očekuje formulu.
- Mirko će popuniti prvih nekoliko redaka tablice (npr. dva retka kao gore).
- Pokrenut će TurboExcel koji će potom za svaki od zadanih stupaca ispisati formulu koja odgovara Mirkovim unosima.
Svaki stupac možemo zamisliti kao varijablu, a svaki redak kao pridruživanje vrijednosti varijablama. U nastavku definiramo formule kojima TurboExcel raspolaže:
• Formula $var vraća string sa vrijednosti pridruženoj varijabli. Primjerice, vrijednosti pridružene varijablama u prvom retku su (bez navodnika): $ime = "Marin", $prezime = "Horvat", $inicijali = "MH", $email = "mhorvat@hsin.hr".
• Formula Const(s) prima neki konstantni string te vraća isti taj string, npr. Const(abc) = “abc”.
• Formula Substr(f, i1, i2) prima formulu f te dva pozitivna broja između 0 i 10 uključivo (i1 strogo manji od i2) te vraća podstring rezultata formule f od pozicije i1 do pozicije i2 (i1 uključivo, i2 isključivo) brojeći od nule. Primjer: Substr($prezime, 1, 5) = "orva" i Substr(Const(abcd), 1, 3) = "bc".
• Formule Lower(f) i Upper(f) primaju formulu f te pretvaraju sve abecedne znakove iz rezultata formule f u mala, odnosno velika slova. Primjer: Lower(Substr($ime, 0, 2)) = "ma" i Upper($prezime) = "HORVAT".
• Formula Concat(f1, f2, …, fk) prima k formula te vraća rezultat koji se dobije spajanjem rezultata k formula iz argumenata. Primjer: Concat($ime, Const(,), Substr($prezime, 0, 2), Const(...)) = "Marin,Ho...".
Primjeri mogućih formula za gornju tablicu: inicijali := Concat(Substr($ime, 0, 1), Substr($prezime, 0, 1)) email := Concat(Lower(Substr($ime, 0, 1)), Lower(prezime), Const(@hsin.hr))
Prilikom definiranja formule za neki stupac dozvoljeno je koristiti sve stupce osim stupca za koji se definira formula.
Pomozite Mirku napisati program TurboExcel. Program će dobiti malu tablicu sa N redaka i K stupaca te potom imena Q stupaca za koje je potrebno pronaći formulu. Ako za neki stupac postoji više zadovoljavajućih formula, pronađite najkraću. Ako postoji više najkraćih formula, među njima pronađite leksikografski najmanju.
ULAZNI PODACI
U prvom retku nalaze se prirodni brojevi N i K (1 ≤ N ≤ 4, 1 ≤ K ≤ 10).
U drugom retku nalaze se međusobno različita imena K stupaca. Ime stupca je sastavljeno od najviše 10 znakova engleske abecede.
U svakom od sljedećih N redaka nalazi se K stringova koji predstavljaju Mirkovu malu tablicu. Svaki string sastoji se od najviše 10 znakova koji mogu biti mala ili velika slova engleske abecede te dodatno znakovi “@”, “.”, “,” (bez navodnika).
U sljedećem retku nalazi se prirodan broj Q, broj stupaca za koje je potrebno pronaći formulu (1 ≤ Q ≤ K). U sljedećih Q redaka nalaze se imena stupaca za koje je potrebno pronaći formulu.
IZLAZNI PODACI
U svakom od Q redaka ispišite formulu za odgovarajući stupac. Možete pretpostaviti da za svaki traženi stupac postoji barem jedna točna formula.
PRIMJERI TEST PODATAKA
ulaz
2 4
ime prezime inicijali email
Marin Horvat MH mhorvat@hsin.hr
Ante Anntic AA aanntic@hsin.hr
2
inicijali
email
izlaz
Substr(Upper($email), 0, 2)
Concat(Lower($inicijali), Substr($prezime, 1, 6), Const(@hsin.hr))
ulaz
4 4
axt bgf c d
aa aA AAaaAAAa aaaaaaAAA
AA aa AAaaAAAA aaaaaaAAA
Aa aaa AAaaaAAAAA aaaaaaAAAA
aA A AAaAAa aaaaaaAA
2
c
d
izlaz
Concat(Const(AA), Lower($bgf), Const(A), Upper($bgf), Substr($axt, 0, 1))
Concat(Const(aaaaaaA), Upper($bgf))
Objašnjenje
Pojašnjenje prvog primjera:
Formula $email vraća “mhorvat@hsin.hr” za prvi, odnosno “aanntic@hsin.hr” za drugi redak.
Formula Upper($email) vraća “MHORVAT@HSIN.HR” za prvi, odnosno “AANTIC@HSIN.HR” za drugi redak.
Formula Substr(Upper($email), 0, 2) vraća “MH” za prvi, odnosno “AA” za drugi redak što odgovara Mirkovim unosima za stupac inicijali.
Formula Lower($inicijali) vraća “mh” za prvi, odnosno “aa” za drugi redak.
Formula Substr($prezime, 1, 6) vraća “orvat” za prvi, odnosno “nntic” za drugi redak.
Formula Const(@hsin.hr) vraca “@hsin.hr” za oba retka.
Formula Concat(Lower($inicijali), Substr($prezime, 1, 6), Const(@hsin.hr)) vraća “mhorvat@hsin.hr” za prvi, odnosno “aanntic@hsin.hr” za drugi redak što odgovara Mirkovim unosima za stupac email.
Comments