def daSa(kamene):
for i in range(len(kamene)-1):
if kamene[i:i+2] == '--':
return False
return True
print(daSa('++-+-+++-++-'))
print(daSa('++-+-+--++-'))
kamene = '++-+-+++-++-'
kamene = '++'+kamene+'+' #zaciname a koncime na brehu
n = len(kamene)
poc_skok = [7*n]*n #dostatocne velke cislo >n znamena neda sa
poc_skok[0] = 0
poc_skok[1] = 0
for i in range(2, n):
if kamene[i] == '+':
poc_skok[i] = 1+min(poc_skok[i-1], poc_skok[i-2])
print(poc_skok) #medzivysledky
print(poc_skok[n-1])
Ak sa nedá pre krok=2, tak skúšame kroky 3,4,5,...
kamene = '+----+------+----+'
kamene = '---------'
def daSa(kamene, krok):
for i in range(len(kamene)-krok+1):
if kamene[i:i+krok] == '-'*krok:
return False
return True
krok = 1
while not daSa(kamene, krok): #daSa() == False
krok += 1
print('Najmenší skok:', krok)
Počítanie najmenšieho počtu krokov aj najmenší skok na prechod súčasne.
kamene = '+----+------+----+'
kamene = '++-+-+++-++-'
kamene = '++'+kamene+'+' #zaciname a koncime na brehu
n = len(kamene)
poc_skok = [100*n]*n #dostatocne velke cislo >n znamena neda sa
poc_skok[0] = 0
poc_skok[1] = 0
max_minus = 0 #maximalny pocet minusiek za sebou
akt_minus = 0 #pocet minusiek teraz za sebou
for i in range(2, n):
if kamene[i] == '+':
max_minus = max(max_minus, akt_minus)
poc_skok[i] = 1+min(poc_skok[i-1], poc_skok[i-2])
else: #ak je tam '-'
if kamene[i-1] == '-': #ak pred aktualnym '-' bolo tiez '-' #
akt_minus += 1
else:
akt_minus = 1
print(poc_skok) #medzivysledky
print(poc_skok[n-1]) #minimalny pocet krokov
print(max_minus+1) #minimalny skok
if poc_skok[n-1] > n:
print('Da sa na najmensi skok:', max_minus+1)
else:
print('Minimalny pocet krokov:', poc_skok[n-1])
upravíme daSa na kontrolu pre zadaný počet dní
kamene = [7, 3, 15, 7, 2, 8, 6]
def daSa(kamene, den):
for i in range(len(kamene)-1):
if max(kamene[i:i+2]) < den:
return False
return True
for i in range(2+max(kamene)): #az po prvy den ked uz budu vsetky kamene zatopene
print('{:3d} {}'.format(i, daSa(kamene, i)))
den = 0
while daSa(kamene, den):
den += 1
den -= 1
print('Max. pocet dni:', den)
Každá susedná dvojica kameňov a,b
bude zatopená po 1+max(a,b)
dňoch.
%%time
kamene = [7, 3, 15, 7, 2, 8, 6]
kamene = [int(_) for _ in input().split()] #nacita vstup
n = len(kamene)
print(min([max(kamene[i:i+2]) for i in range(n-2)]))