3. naloga

Kazenski stavek

V šoli je bilo včasih za posebne dosežke treba ostati v šoli in večkrat na tablo napisati »kazenski stavek«. Tako se je po pol ure vrtenja krede in razmišljanja o tem, kako te nihče ne mara, na tabli pojavilo nekaj takega:

NE BOM VEC METAL PAPIRCKOV PO TLEH NE BOM VEC METAL PAPIRCKOV PO TLEH NE BOM VEC METAL PAPIRCKOV PO TLEH NE BOM VEC METAL PAPIRCKOV PO TLEH NE BOM VEC METAL PAPIRCKOV PO TLEH NE BOM VEC METAL PAPIRCKOV PO TLEH NE BOM VEC METAL PAPIRCKOV PO TLEH NE BOM VEC METAL PAPIRCKOV PO TLEH NE BOM VEC METAL PAPIRCKOV PO TLEH NE BOM VEC METAL PAPIRCKOV PO TLEH

Napiši podprogram ali opiši postopek, ki bo iz zapisa na tabli ugotovil, kolikokrat se v njem pojavi kazenski stavek. Predpostavi, da je zapis na tabli podan kot en sam dolg niz (torej ni razdeljen na več vrstic). Kazenski stavek vzemi kot najkrajši tak kos besedila, za katerega velja, da je mogoče dani zapis s table sestaviti iz več ponovitev tega stavka, ločenih s po enim presledkom. Predpostaviš lahko, da se pisec ni zmotil ter da se v vhodnem nizu pojavljajo le velike črke angleške abecede in presledki.

V zgornjem primeru se kazenski stavek »NE BOM VEC METAL PAPIRCKOV PO TLEH« pojavi 10-krat.


Če pišeš podprogram, naj bo takšne oblike:

function KazenskiStavek(s: string): integer;  { v pascalu }
int KazenskiStavek(char *s);                  /* v C/C++ */
int KazenskiStavek(string s);                 // v C++
public static int kazenskiStavek(String s);   // v javi
public static int KazenskiStavek(string s);   // v C#
def KazenskiStavek(s): ...                    # v pythonu; vrne int

PDF besedilo.