• 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

VPS Starter Arubacloud
0 głosów
2,269 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 (349,240 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ź 6,015 wizyt
0 głosów
1 odpowiedź 439 wizyt
pytanie zadane 29 lipca 2020 w Rozwój zawodowy, nauka, praca przez AutoPlay Nowicjusz (240 p.)
0 głosów
1 odpowiedź 686 wizyt
pytanie zadane 29 kwietnia 2018 w C i C++ przez Seyn Początkujący (300 p.)

92,963 zapytań

141,928 odpowiedzi

321,161 komentarzy

62,297 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...