1 #------ 2. feladat ---------------------------------------------------------------------2 def tiltott_mezok(s,o,kapcsolo):3 tiltottak=[] # (5. feladathoz)4 for i in range(s-1,s+2): # s-1 és s+1 és5 for j in range(o-1,o+2): # o-1 és o+1 között vizsgálódunk6 if (11>i>0 and 11>j>0): # de csak akkor ha még a táblán vagyunk7 if i==s and j==o: # a hajó pozíciója tuti tiltott8 continue9 else:10 if kapcsolo:11 print(f'{i}, {j}')12 tiltottak.append((i-1,j-1)) # szabalytalan_elhelyezes13 # függvény használja majd14 # (5. feladat)15 return tiltottak # 5. feladat miatt visszaadjuk a tiltott mezők listáját...16 #------ 3. feladat ---------------------------------------------------------------------17 def e_heti(matrix):18 global hajok # (4. feladathoz)19 ok=0 # tornyok ugyanott vannak a megoldásban?20 tornyok=0 # de mennyi van? több is van?... a megoldásban21 hajok=0 # hány hajó van a megoldásban?22 for i in range(10):23 for j in range(10):24 if matrix[i][j] in range(1,10): # torony van a megoldásban25 tornyok+=126 if feladvany[i][j]==matrix[i][j]: # a tornyok passzolnak27 ok+=128 if matrix[i][j]==11: # hajó van...29 hajok+=130 return True if ok==tornyok else False # tornyok helye, száma okés31 #------ 5. feladat ---------------------------------------------------------------------32 def szabalytalan_elhelyezes(matrix):33 for i in range(1,11):34 for j in range(1,11):35 if matrix[i-1][j-1]==11:36 t=tiltott_mezok(i,j,False) # itt használjuk a tiltott mezőket37 for koord in t: # tiltott mezők koordinátái38 sor=koord[0] # azaz sor és oszlopa39 oszlop=koord[1]40 if matrix[sor][oszlop]!=0: # ha a tiltott mezőn van valami, az gáz!41 return True42 break43 return False # nem volt gond44 #------ 6. feladat ---------------------------------------------------------------------45 def vizsgal(matrix):46 for i in range(10):47 for j in range(10):48 if matrix[i][j] in range(1,10): # itt torony van a megoldásban49 hajodb=0 # hány hajó látszik a toronyból50 for oszlop in range(10): # abban a sorban...51 if matrix[i][oszlop]==11:52 hajodb+=153 for sor in range(10): # ...és abban az oszlopban összesen?54 if matrix[sor][j]==11:55 hajodb+=156 if hajodb!=matrix[i][j]: # hajók száma eltér a torony értékétől,57 return False # akkor bukta...58 break59 return True # minden okés volt 60 61 62 #********************************* F Ő M O D U L *************************************** 63 feladvany=[] # ebben lesz a feladvány - "sima" mátrix (10 elemű listák listája64 megoldasok={} # ebben lesznek a megoldások - szótár (kulcs a név, érték: mátrix)65 print('1. feladat')66 print('Világítótorony pozíciója 10x10-es területen')67 s=int(input('sor: '))68 o=int(input('oszlop: '))69 h=int(input('toronyból látható hajók száma: '))70 if h>3:71 print('Nehéz torony.')72 else:73 print('------------------------------------------------------\n2. feladat')74 print('Mezők, ahova nem kerülhet hajó:')75 tiltott_mezok(s,o,True) # True jelentése itt: kiírás is lesz!76 77 # feladvány beolvasása egy 10x10-es mátrixba78 fbe=open('feladvany.txt','r')79 for sor in fbe:80 feladvany.append(list(map(int,sor.strip().split()))) # minden egész szám lesz81 fbe.close()82 83 # megoldások beolvasása egy szótárba, ahol:84 # a kulcs a név, a szótár-bejegyzés egy 10x10-es mátrix85 fbe=open('megoldas.txt','r')86 N=int(fbe.readline().strip()) # forrásfájl első sora87 kulcs=fbe.readline().strip() # következő sor egy név --> ez kulcs lesz88 tabla=[] # ebben lesz a 10x10-es mátrix,89 # ami a szótár-bejegyzés lesz majd90 for sor in fbe:91 if len(sor)<20: # ha ilyen a sor, akkor az név, tehát kulcs!92 megoldasok[kulcs]=tabla # "régi" kulcsra az elkészült táblát elhelyezzük a szótárban93 tabla=[] # tábla ismét üres legyen94 kulcs=sor.strip() # az "új" kulcs beolvasása95 else:96 tabla.append(list(map(int,sor.strip().split()))) # fájl soraival, mint listákkal97 # töltögetjük a táblát98 megoldasok[kulcs]=tabla # mivel a végén nem jön már kulcs, az utolsó tábláról99 fbe.close() # is gondoskodni kell...100 101 102 nem_oke=[] # nem erre a hétre vonatkozó megoldást küldtek be103 oke=[] # ezek az e heti rejtvényt próbálták megoldani104 elhelyezes_hiba=0 # rosszul helyezte el a hajókat105 hibas=0 # 12 hajót "rakott le"? 106 for kulcs in megoldasok:107 if not e_heti(megoldasok[kulcs]):108 nem_oke.append(kulcs)109 elif hajok!=12: # (4. feladat)110 hibas+=1111 else:112 oke.append(kulcs)113 114 print('------------------------------------------------------\n3. feladat')115 if len(nem_oke)>0:116 print('Nem az e heti feladványra küldte be a megoldását:')117 for kulcs in nem_oke:118 print(kulcs)119 else:120 print('Mindegyik megoldás erre a heti feladványra érkezett.')121 122 print('------------------------------------------------------\n4. feladat')123 print(f'A hajók száma {hibas} esetben hibás.')124 125 hatodik=[] # 6. feladathoz126 for kulcs in oke:127 if szabalytalan_elhelyezes(megoldasok[kulcs]):128 elhelyezes_hiba+=1129 else:130 hatodik.append(kulcs) # ha minden rendben vele az előző szempontok szerint,131 # akkor mehetnek a "vizsgálatra" (lásd 6. feladat)132 133 print('------------------------------------------------------\n5. feladat')134 print(f'Szabálytalan hajóelhelyezés {elhelyezes_hiba} beküldőnél fordul elő.')135 136 print('------------------------------------------------------\n6. feladat')137 print('Helyes megoldást beküldők:')138 for kulcs in hatodik:139 if vizsgal(megoldasok[kulcs]): # jól rakta-e le a hajóit?140 print(kulcs)141 142