Projekt Pronal Projekt Pronal

Kazalo:
Sofinasiranje projekta
Starejši - učbenik...
Starejši - zbirka nalog...
Tekmovanja - dopolni...
Tekmovanja - Parsons...
Tekmovanja - popravi...
Tekmovanja
rtk 1988
rtk 1996
rtk 1998
rtk 1999
rtk 2000
rtk 2001
rtk 2002
rtk 2004
rtk 2006
rtk 2007
rtk 2008
rtk 2009
rtk 2011
rtk 2013
rtk 2014
rtk 2016
rtk 2017
rtk 2018
rtk2010
rtk2010

rtk2010


2010.1.1

Vodilni elementi

1. podnaloga

Za posamezni element v seznamu števil rečemo, da je vodilni, če velja, da so vsi njegovi nasledniki (elementi z večjim indeksom) manjši od njega.

Naloga

Napiši funkcijo st_vodilnih(sez_stevil), ki sprejme seznam števil in izpiše število vodilnih elementov v njem.

Vhodni podatki

Seznam števil. Predpostavi, da so podatki cela števila, da seznam nikoli ne bo imel več kot sto elementov ter da v podatkih ni nobenih napak.

  [10, 8, 11, 4, 8, 2, 8, 5, 7, 3, 1]

Izhodni podatki

Naravno število $x$ predstavlja število vodilnih elementov

Uradna rešitev

def st_vodilnih(tabela):
    '''vrne število vodilnih elementov v tabeli'''
    st_vodilnih = 0
    for i in range(len(tabela)-1):
        if tabela[i] > max(tabela[(i+1):]):
            st_vodilnih += 1
    return st_vodilnih + 1

2010.1.2

Abecedni podnizi

1. podnaloga

V nekaterih besedah se zgodi, da si več zaporednih črk sledi v abecednem vrstnem redu in to celo tako, da vmes nobena ne manjka. Takemu zaporedju črk pravimo abecedni podniz. Nekaj primerov: ab v besedi nabava, jkl v primanjkljaj, hij v monarhija, mnop v limnoplankton, abc v vrabci (podniz abci pa ni abecedni podniz, ker je sicer i v abecedi za c, vendar so vmes v abecedi še druge črke).

Naloga

Napiši funkcijo abecedni_podnizi(tabela), ki sprejme tabelo nizov in izpiše dolžino najdaljšega abecednega podniza, ki se pojavlja v kakšni od teh besed.

Vhodni podatki

Tabela nizov z besedami. Posamezna beseda je dolga največ sto znakov. Da bo lažje, uporabljamo pri tej nalogi angleško abecedo (le male črke):

  abcdefghijklmnopqrstuvwxyz

Izhodni podatki

Integer $x$, ki predstavlja dolžino najdaljšega abecednega podniza

Uradna rešitev

def abecedni_podnizi(tabela):
    '''sprejme tabelo nizov in vrne dolžino najdaljšega abecednega
    podniza'''
    abeceda = 'abcdefghijklmnopqrstuvwxyz'
    naj = 0
    for beseda in tabela:
        beseda += ' '
    for beseda in tabela:
        stevec = 0
        for i in range(len(beseda)-1):
            if abeceda.index(beseda[i]) == abeceda.index(beseda[i+1])-1:
                stevec += 1
            if abeceda.index(beseda[i]) != abeceda.index(beseda[i+1])-1:
                if stevec >= naj:
                    naj = stevec
                stevec = 0
    return naj+1

2010.1.4

Cikel

1. podnaloga

Na zabavi s super muziko se znajde $n$ ljudi. Prevzame jih plesalska strast, zato vsak plesalec zagrabi natanko enega soudeleženca zabave za boke; tako vsi skupaj naredijo enega ali več „vlakcev“. („Vlakec“ torej nima „lokomotive“.) Vsako osebo drži natanko en človek.

Nekaj časa traja, da se organizirajo, nato pa vlakec le začne pohod. Skozi režo v vratih jih opazuje vratar, ki sicer ne more videti vseh plesalcev naenkrat, ga pa vseeno zanima, v kakšni formaciji plešejo. Zato je v mislih oštevilčil plesalce s številkami od $1$ do $n$ in si na listek napisal svoja opažanja. Uredil jih je v seznam z $n$ števili: v $i$-to polje v tabeli je zapisal številko plesalca, ki ga drži plesalec $i$.

Naloga

Napiši funkcijo cikel(seznam), ki s pomočjo vratarjeve tabele ugotovi, ali vsi plesalci plešejo v enem samem velikem krogu. V tem primeru naj postopek izpiše „V KROGU“, sicer pa „PO SVOJE“.

Vhodni podatki

Tabela $n$ števili v kateri $i$-to polje predtavlja plesalca $i$-tega plesalca, vnos na $i$-tem polju pa plesalca, ki je v vlakcu pred njim.

Izhodni podatki

Niz „V KROGU“ ali „PO SVOJE“.

Uradna rešitev

def cikel(seznam):
    '''pove, ali so plesalci na zabavi v enem krogu, ali pa v večih'''
    prvi_v_krogu = 1
    naslednji = prvi_v_krogu
    i = 0
    #gremo po vlakcu, dokler ne pridemo do prvega v krogu.
    #Nato preverimo, če smo prišli čez cel seznam ali ne
    while True:
        naslednji = seznam[naslednji]
        i += 1
        if naslednji==prvi_v_krogu:
            break
    if i == len(seznam):
        return 'V KROGU'
    else:
        return 'PO SVOJE'

2010.1.5

Kvadrati s seštevanjem

1. podnaloga

Naloga

Napiši funkcijo kvadrati(n), ki izpiše kvadrate števil od $1$ do $n$, pri tem pa ne sme uporabljati drugih aritmetičnih operacij kot seštevanje.

Vhodni podatki

integer $1 \leq n \leq 100$

Izhodni podatki

tabela kvadratov števil od $1$ do $n$

  [1,4,9,...,n^2]

Uradna rešitev

def kvadrati(n):
    '''vrne tabelo kvadriranih števil [1,...,n] le z uporabo seštevanja'''
    seznam_kvadratov = []
    # k^2 = k + ... + k (k krat).
    for i in range(1,n+1):
        kvadrat = 0
        for j in range(1,i+1):
            kvadrat += i
        seznam_kvadratov.append(kvadrat)
    return seznam_kvadratov

2010.2.1

Poštne številke

1. podnaloga

Pošta Slovenije pogosto dobi pisma z nečitljivimi poštnimi številkami, saj ljudje pišejo tako, da je nekatere števke težko razbrati. Še posebej pogosto prihaja do zamenjave med $3$ in $8$, med $1$, $4$ in $7$ ter med $5$ in $6$.

Naloga

Napiši funkcijo Variante(k), ki sprejme štirimestno poštno številko $k$ in na zaslon izpiše vse možne poštne številke, ki jih lahko dobimo z naštetimi zamenjavami števk.

Vhodni podatki

Argument funkcije je štirimestno število $k$, ki predstavlja poštno številko.

  Variante(1035)

Izhodni podatki

Funkcija naj vrne seznam vseh variant poštne številke (ne nujno v tem vrstnem redu).

  [1035, 1036, 1085, 1086, 4035, 4036, 4085, 4086, 7035, 7036, 7085, 7086]

Uradna rešitev

from functools import reduce
def Variante(k):
    '''Vrne poštno številko v vseh možnih variantah najpogostejših napak'''
    k = str(k)
    variante = ['0', '147', '2', '38', '147', '56', '56', '147', '38', '9']
    vse_mozne = []
    tisocica = int(k[0])
    stotica = int(k[1])
    desetica = int(k[2])
    enica = int(k[3])
    for napaka_tisoc in variante[tisocica]:
        for napaka_stot in variante[stotica]:
            for napaka_deset in variante[desetica]:
                for napaka_enica in variante[enica]:
                    vse_mozne.append(napaka_tisoc + napaka_stot + napaka_deset + napaka_enica)

    return sorted(list(map(int,list(set(vse_mozne)))))
Mesto objave ob koncu projekta 15.9.2018