• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nieoczekiwany wynik, matura 2017 zadanie 6.3, python

Object Storage Arubacloud
0 głosów
2,013 wizyt
pytanie zadane 19 sierpnia 2018 w Python przez MazdyxX Nowicjusz (190 p.)

Witam,

Program wydaje mi się być poprawny, jednak wynik różni się od poprawnego i nie otrzymałbym za niego żadnych punktów. Wynik różni się od właściwego o 320, czyli ilość danych w wierszu. Niestety nie mam pojęcia z czego to wynika.

Zadanie: 

Zadanie 6. 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). Napisz program(y), który(e) da(dzą) odpowiedzi do poniższych zadań. Odpowiedzi zapisz w pliku wyniki6.txt, a każdą odpowiedź poprzedź numerem oznaczającym odpowiednie zadanie. Uwaga: plik przyklad.txt zawiera dane przykładowe spełniające warunki zadania (obraz ma takie same rozmiary). Odpowiedzi dla danych z pliku przyklad.txt są podane pod poleceniami.

Zadanie 6.3. (0–3) 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.

Wynik mojego programu: 1073

Poprawny wynik: 753

Program: https://pastebin.com/V4xdSBEK

Dane: https://pastebin.com/eTsPCp2W

Matura: https://cke.gov.pl/images/_EGZAMIN_MATURALNY_OD_2015/Arkusze_egzaminacyjne/2017/formula_od_2015/zasady_oceniania/MIN-R1-N.pdf

Odpowiedzi: https://cke.gov.pl/images/_EGZAMIN_MATURALNY_OD_2015/Arkusze_egzaminacyjne/2017/formula_od_2015/zasady_oceniania/MIN-R1-N.pdf

 

filename='dane.txt'
mylist=[]
counter=0
with open(filename) as file:
    for line in file:
        line=line.split(' ')
        for i in range(len(line)):
            line[i]=int(line[i])
        mylist.append(line)
    for i in range(200):
        for j in range(320):
            stop=0
            try:
                if mylist[i][j]-mylist[i+1][j]>128 or mylist[i][j]-mylist[i+1][j]<-128:
                    counter=counter+1
                    stop=1
            except:
                pass
            if stop==0:
                try:
                    if mylist[i][j] - mylist[i-1][j] > 128 or mylist[i][j] - mylist[i - 1][j] < -128:
                        counter = counter + 1
                        stop = 1
                except:
                    pass
            if stop==0:
                try:
                    if mylist[i][j] - mylist[i][j+1] > 128 or mylist[i][j] - mylist[i][j+1] < -128:
                        counter = counter + 1
                        stop = 1
                except:
                    pass
            if stop==0:
                try:
                    if mylist[i][j] - mylist[i][j-1] > 128 or mylist[i][j] - mylist[i][j-1] < -128:
                        counter = counter + 1
                        stop = 1
                except:
                    pass

    print(counter)

 

komentarz 19 sierpnia 2018 przez VirtualMember Pasjonat (15,790 p.)

Osobiście wątpię, że dodawanie indeksów  ma jakikolwiek wpływ na błędne działanie programu. Obecnie nie mam na tyle czasu by się bardzo zagłębiać w problem ale podrzucę Tobie kod (niestety nie w Pythonie) z tutoriala, który jakiś czas temu nagrywałem do tego zadania, może Tobie się przydać.

int ile3 = 0;

	for (int j = 0; j < dane.size(); j++)
	{
		for (int i = 0; i < 320; i++)
		{
			int obecny = dane[j][i];

			//gora srodek
			if (j-1 >=0 && abs(dane[j - 1][i] - obecny) > 128)
			{
				ile3++;
				continue;
			}

			//lewo srodek
			if (i-1 >= 0 && abs(dane[j][i - 1] - obecny) > 128)
			{
				ile3++;
				continue;
			}

			//prawo srodek
			if (i+1 <320 && abs(dane[j][i + 1] - obecny) > 128)
			{
				ile3++;
				continue;
			}

			//dol srodek
			if (j+1 <dane.size() && abs(dane[j+1][i] - obecny) > 128)
			{
				ile3++;
				continue;
			}
		}
	}

	output << "Zadanie 6.3 " << ile3 << std::endl;

 

komentarz 19 sierpnia 2018 przez MazdyxX Nowicjusz (190 p.)
Dzięki za odpowiedź :)

1 odpowiedź

+1 głos
odpowiedź 19 sierpnia 2018 przez adrian17 Ekspert (344,860 p.)
wybrane 19 sierpnia 2018 przez MazdyxX
 
Najlepsza
Szybki strzał: w pythonie indeksowanie [-1] daje ostatni element. Tak więc zgaduję, że Twoje `[i-1]` dodatkowo porównuje pierwszy wiersz z ostatnim, pierwszą kolumnę z ostatnią.
komentarz 19 sierpnia 2018 przez MazdyxX Nowicjusz (190 p.)
Wielkie dzięki :)

Podobne pytania

+5 głosów
1 odpowiedź 5,651 wizyt
0 głosów
1 odpowiedź 374 wizyt
pytanie zadane 29 lipca 2020 w Rozwój zawodowy, nauka, praca przez AutoPlay Nowicjusz (240 p.)
0 głosów
1 odpowiedź 593 wizyt
pytanie zadane 29 kwietnia 2018 w C i C++ przez Seyn Początkujący (300 p.)

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...