Úlohy domáceho kola OI kategórie B¶

  • http://oi.sk/
  • termín odovzdania domáceho kola: 30.11.2022
  • prvé dve úlohy praktické (odovzdáva sa kód programu, testovač automaticky vyhodnotí na testovacích vstupoch, môžete odovzdať znova)
  • posledné dve úlohy teoretické (odovzdáva sa elektronický dokument - PDF s popisom riešenia a zápisom podstatných častí kódu)

B-I-1 Syrováľač¶

image.png image-2.png image-3.png

$Aa$ môžeme odstrániť

A-A-a-a

bez ohľadu na priradenie, potrebujeme 4 metre kotúľania (1+2+1 ... čiarky). Vždy vieme nájsť riešenie, kde susedné písmená budú pri sebe.

In [1]:
s = input() #nacita cely riadok do retazca s
AaBAba
In [2]:
s
Out[2]:
'AaBAba'
In [3]:
s[0]
Out[3]:
'A'
In [4]:
s[-1] #dlzka-1,prvy od konca
Out[4]:
'a'
In [6]:
s[2:4] #podretazec, zlava uzavrety interval
Out[6]:
'BA'
In [8]:
s[2:-1] #od tretieho po predposledny
Out[8]:
'BAb'
In [9]:
s[0:6:2] #kazdy druhy znak
Out[9]:
'ABb'
In [11]:
s.index('a') #prvy vyskyt
Out[11]:
1
In [13]:
s.index('a', 2) #dalsi vyskyt (prvy, ktory nasleduje po indexe start)
Out[13]:
5
In [15]:
start = 0
while s.index('a', start) >= 0:
    start = s.index('a', start)
    print(start)
    start += 1
1
5
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_6724\985009238.py in <module>
      1 start = 0
----> 2 while s.index('a', start) >= 0:
      3     start = s.index('a', start)
      4     print(start)
      5     start += 1

ValueError: substring not found

B-I-2 Eliminácia¶

3¶

image.png

In [16]:
import matplotlib.pyplot as plt

def zobraz(hodnoty, rozsah, zakazana):
    ax = plt.bar([str(i) for i in range(1, 1+len(hodnoty))], hodnoty)
    plt.plot([-1, len(hodnoty)], [zakazana, zakazana], 'r--')
    for i in range(rozsah[0]-1, rozsah[1]):
        ax.get_children()[i].set_color("green" if hodnoty[i] != zakazana else "red")
    return plt
    
zobraz([4, 3, 3, 3, 2, 3, 3, 5, 5, 4], (4, 5), 2)
Out[16]:
<module 'matplotlib.pyplot' from 'C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\pyplot.py'>
In [17]:
zobraz([4, 3, 3, 3, 2, 3, 3, 5, 5, 4], (4, 10), 8)
Out[17]:
<module 'matplotlib.pyplot' from 'C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\pyplot.py'>

4¶

image.png

In [18]:
def rekurzia(n):
    if n == 1:
        return 0
    # najmenší poˇcet krokov ak odˇcítam 1
    pocet_krokov = 1 + rekurzia(n - 1)
    # najmenší poˇcet krokov ak pripoˇcítam 1
    pocet_krokov = min(pocet_krokov, 1 + rekurzia(n + 1))
    # najmenší poˇcet krokov ak vydelím 2
    if n % 2 == 0:
        pocet_krokov = min(pocet_krokov, 1 + rekurzia(n // 2))
    return pocet_krokov
In [ ]:
rekurzia(5)
In [ ]: