Zajčje luknje

Naloga

Naloga prihaja s tekmovanja Bober 2014/15. Otroci, ki jim je namenjena, so jo reševali ročno, ne z računalnikom.


Kolona strumnih bobrov koraka po poti, na kateri so zajci skopali nekaj lukenj. Tule, recimo, so prišli do luknje globine 3.

Ker bobri niso ravno skakalci in luknje ne morejo preskočiti, se znajdejo takole: prvi bober skoči v luknjo, drugi nanj in tako naprej, dokler ni luknja polna.

Ostali bobri prečkajo luknjo.

Ko so na drugi strani, se vsi bobri primejo za repe in tako izvlečejo tiste, ki so v luknji.

Vrstni red bobrov se je pri tem očitno spremenil.

Lukenj je lahko seveda več. In tudi bobrov ni vedno pet. Razdalje med luknjami pa so dovolj velike, da bobri nikoli ne prečkajo dveh lukenj hkrati.

Bobre bomo opisovali z nizi - po en znak za Bobra. V gornjem primeru gredo v luknje v vrstnem redu "54321"; številke (ali črke) so napisane od leve proti desni, tako da gre v luknjo najprej tisti bober, ki je na najbolj desnem mestu v nizu. Iz luknje prilezejo v vrstnem redu "12354".

V kakšnem redu je sedem bobrov, ko prečkajo vse tri luknje na spodnji sliki, razmisli sam(a). Tudi otroci so morali.

Ogrevalna naloga

Na začetek programa napiši

bobri = "54321"
globina = 3
# Tu bo potrebno dodati eno vrstico
print(bobri)

Dodaj vrstico, ki spremeni bobre v spremenljivki bobri tako, kot se spremeni vrstni red, ko gredo čez globino luknje globina. Pri tem si bo potrebno seveda pomagati z indeksi in/ali rezinami (od spredaj, zadaj, negativnimi, pozitivnimi ... bogve kakšnimi. :)) Izpisani rezultat mora biti seveda "12354".

Ne rešuj ((zgolj)) s poskušanjem. Poanta je v tem, da veš kaj delaš. In da takrat, ko ne deluje prav, razumeš, zakaj ne. Če samo slepo poskušaš, se učiš samo slepo poskušati.

Zdaj pa preveri ali program deluje pravilno. Če imamo

bobri = "ABCDEFGHI"
globina = 3
# Enaka vrstica, kot si jo dodal(a) prejle
print(bobri)

mora izpisati "IHGABCDEF".

Če pa imamo bobri = "ABCDEFGHI" in globina = 1, dobimo "IABCDEFGH".

Če imamo bobri="12345" in globina = 2, dobimo "54123".

Obvezna naloga

Zdaj pa imamo niz z bobri in seznam globin lukenj.

bobri = "54321"
luknje = [4, 2, 3]

# tu pride tvoj program

print(bobri)

Program mora izpisati vrstni red podanih bobrov, ko pridejo čez podane luknje. Seveda mora delovati za poljubno število bobrov in lukenj, ne le za ta konkretni primer. Predpostaviti pa smeš, da luknje niso pregloboke in da so dovolj razmaknjene, da jih bobri lahko prečkajo.

Dodatna naloga

Spet imamo

bobri = "54321"
luknje = [4, 2, 3]

Kakšne luknje bi morali dodati, da bi se bobri, ko gredo prek njih, spet preuredili v prvotni vrstni red?

Nalogo lahko najprej rešiš za te konkretne bobre in luknje. Nato razmisli, kako to narediti v splošnem. Skratka, ideja je razmisliti, kako k nekemu podanemu seznamo dodati seznam lukenj, ki nevtralizira podani seznam (za podano število bobrov).

Pri dodatni nalogi (najbrž) ne bo veliko programiranja, temveč predvsem razmislek.