#!/usr/bin/python2.7 # -*- coding: utf-8 -*- ''' 2012-02-18 programmeerimisvõistlus Ülesanne: Kino @author: Indrek Jentson ''' import datetime # Funktsioon kuupäeva teisendamiseks kuupäeva järjenumbriks aastas def kpv2num(kpv): num = kpv.toordinal()-datetime.date(2012,1,1).toordinal()+1 return num # Funktsioon kuupäeva järjenumbri aastas teisendamiseks kuupäevaks def num2kpv(num): kpv = datetime.date.fromordinal(datetime.date(2012,1,1).toordinal()+num-1) return kpv def loe_rida(fail): rida = fail.readline().strip() segmendid = rida.split(' ') # Tükelda rida failist tühikute kohalt return [int(seg) for seg in segmendid] # Tagasta list selle rea numbritest def loe_kalender(fail): # Tagasta ühe sõbra hõivatud päevade loend, kus kuupäevad on # teisendatud numbriteks, mis näitavad päeva kaugust aasta algusest. kalender = [] n = loe_rida(fail)[0] for i in range(n): l = loe_rida(fail) kalender.append(kpv2num(datetime.date(2012,l[0],l[1]))) return kalender def main(): with open('kino.sis', 'rt') as sisend: S1 = loe_kalender(sisend) # esimese sõbra hõivatud päevad S2 = loe_kalender(sisend) # teise sõbra hõivatud päevad # koostame massiivi, kus vabad päevad on tähistatud 0-ga ja hõivatud päevad 1-ga # massiiv algab indeksiga 0, kuid me kasutame elemente alates 1-st aastapikkus = 366 paevad = [0 for x in range(1,aastapikkus+2)] for j in S1: paevad[j] = 1 for j in S2: paevad[j] = 1 # teeme kindlaks, kas leidub vaba päev leitud = False paev = 1 while (paev < aastapikkus and not leitud): while paevad[paev] == 1 and paev < aastapikkus: # päev on kinni, liigume edasi paev += 1 if paevad[paev] == 0 and paev <= aastapikkus: # käes! leitud = True if leitud: with open('kino.val', 'wt') as valjund: # kirjutame leitud vastuse kpv = num2kpv(paev) print >> valjund, '%02d %02d' % (int(kpv.strftime('%m')), int(kpv.strftime('%d'))) if not leitud: with open('kino.val', 'wt') as valjund: print >> valjund, 'EI SAA' if __name__ == '__main__': main()