Witam serdecznie, próbowałem rozwiązać zadanie maturalne o poniższej treści(maj 2017, zadanie 6.3 - Piksele):
W pliku dane.txt znajduje się 200 wierszy. Każdy wiersz zawiera 320 liczb naturalnych z przedziału od 0 do 255, oddzielonych znakami pojedynczego odstępu (spacjami). Przedstawiają one jasności kolejnych pikseli czarno-białego obrazu o wymiarach 320 na 200 pikseli (od 0 – czarny do 255 – biały).
Sąsiednie piksele to takie, które leżą obok siebie w tym samym wierszu lub w tej samej kolumnie. Dwa sąsiednie piksele nazywamy kontrastującymi, jeśli ich wartości różnią się o więcej niż 128. Podaj liczbę wszystkich takich pikseli, dla których istnieje przynajmniej jeden kontrastujący z nim sąsiedni piksel.
Moim początkowym rozwiązaniem był kod:
obraz = []
ilosc = 0
with open("dane.txt", 'r') as file:
for line in file:
w = line.rstrip().split(" ")
for i in w:
obraz.append([int(i)])
for x in range(200):
for y in range(320):
if x > 0 and abs(obraz[x-1][y] - obraz[x][y]) > 128:
ilosc += 1
elif x < 199 and abs(obraz[x+1][y] - obraz[x][y]) > 128:
ilosc += 1
elif y > 0 and abs(obraz[x][y-1] - obraz[x][y]) > 128:
ilosc += 1
elif y < 319 and abs(obraz[x][y+1] - obraz[x][y]) > 128:
ilosc += 1
print(ilosc)
Niestety okazał się on błędny, dopiero po chwili szperania w internecie natrafiłem na rozwiązanie, które różniło się w momencie pobierania danych do tworzonego "obrazu" i wyglądało następująco:
obraz = []
ilosc = 0
with open("dane.txt", 'r') as file:
for line in file:
w = line.rstrip().split(" ")
obraz.append([int(i) for i in w])
for x in range(200):
for y in range(320):
if x > 0 and abs(obraz[x-1][y] - obraz[x][y]) > 128:
ilosc += 1
elif x < 199 and abs(obraz[x+1][y] - obraz[x][y]) > 128:
ilosc += 1
elif y > 0 and abs(obraz[x][y-1] - obraz[x][y]) > 128:
ilosc += 1
elif y < 319 and abs(obraz[x][y+1] - obraz[x][y]) > 128:
ilosc += 1
print(ilosc)
Ten kod okazał się skuteczny.
Jak widać, oba kody różnią się umiejscowieniem drugiej pętli. Moje pytanie brzmi na czym polega ta różnica?