SPOJ Zliczanie wystąpień (kody ASCII)

Odpowiedz Nowy wątek
2020-07-20 14:50

Rejestracja: 2 miesiące temu

Ostatnio: 2 dni temu

0

Robię to zadanie na SPOJ, na wejściu dostaje ciąg znaków ASCII, mam wypisać nr ASCII i ilość wystąpień tego numery w posortowanej kolejności (biorąc pod uwagę znak ASCII), wszystko wydaje się okej ale w gdy na wejściu są polskie litery np. ę to otrzymuje inny kod ASCII niż w odpowiedziach na SPOJu ktoś pomoże mi zrozumieć dlaczego tak się dzieje?
Mój kod: https://ideone.com/OJcack

Pozostało 580 znaków

2020-07-20 15:00

Rejestracja: 1 rok temu

Ostatnio: 11 godzin temu

1

Masz inne kodowanie znaków ?

(base) [email protected]:~$ echo -n "ąćęłńóśźż" | iconv -f utf8 -t iso8859-2 | hd 
00000000  b1 e6 ea b3 f1 f3 b6 bc  bf                       |.........|
00000009
(base) [email protected]:~$ echo -n "ąćęłńóśźż" | iconv -f utf8 -t cp1250 | hd 
00000000  b9 e6 ea b3 f1 f3 9c 9f  bf                       |.........|
00000009
(base) [email protected]:~$ echo -n "ąćęłńóśźż" | hd 
00000000  c4 85 c4 87 c4 99 c5 82  c5 84 c3 b3 c5 9b c5 ba  |................|
00000010  c5 bc                                             |..|
00000012
edytowany 1x, ostatnio: Bartłomiej Golenko, 2020-07-20 15:00

Pozostało 580 znaków

2020-07-20 15:02

Rejestracja: 2 miesiące temu

Ostatnio: 2 dni temu

0

Co powinienem zrobić?

Prawdopodobnie nic. Jak wrzucisz program na SPOJ-a to użyje właściwego kodowania. Inne wyniki pokazuje jak uruchamiasz to u siebie lokalnie. - Bartłomiej Golenko 2020-07-20 15:03
Niestety nie akceptuję mi :( widzisz gdzieś błąd ? - Suchy702 2020-07-20 15:04
Sorry - nie mam czasu szukać... - Bartłomiej Golenko 2020-07-20 15:12

Pozostało 580 znaków

2020-07-20 16:29

Rejestracja: 3 lata temu

Ostatnio: 7 minut temu

0

To jest zadanie na sortowanie przez zliczanie. Ladowanie tutaj slownika a potem sortowanie go to troche pomylka. Tracisz sens tych zadanek.

W jaki sposób nie tracić sensu tych zadanek ? - Suchy702 2020-07-20 16:33
tak na prawde za SPOJe nie ma wiekszego sensu sie brac nie majac pojecia co sie robi. Dostaniesz jakies zadanie z grafami (i zakladajac ze nie masz pojecia o teorii grafow) i nie bedziesz wiedzial o co chodzi to w najlepszym wypadku bedziesz sie meczyl z pisaniem jakichs brutow albo innych - stivens 2020-07-20 16:36
Wiec nie wiem, poczytaj jakies zrodla o algorytmice, moze matematyce dyskretnej - stivens 2020-07-20 16:36
a jesli chcesz sie nauczyc nie-algo programowania to pisz prawdziwe programy a nie algorytmy - stivens 2020-07-20 16:37
PS: rzucilem okiem na ten artykul na wiki i strasznie przekombinowany jest. Dla takich danych jak ASCII wystarczy robic to co Ty ale na tablicy a nie na slowniku. A potem wypisac po prostu bo juz jest posortowane. - stivens 2020-07-20 16:53

Pozostało 580 znaków

2020-07-20 17:27

Rejestracja: 2 miesiące temu

Ostatnio: 2 dni temu

0

Zmieniłem kod na taki:
https://ideone.com/TSdoTH dostaję błędną odpowiedź, (tablica jest tak duża ponieważ gdy dawałem 256 lub 300 to dostawałem błąd NZEC teraz mam po prostu błędną odpowiedź) nie wiem w czym robię błąd

edytowany 1x, ostatnio: Suchy702, 2020-07-20 17:27
Sory już poprawiłem - Suchy702 2020-07-20 17:28

Pozostało 580 znaków

2020-07-20 17:32

Rejestracja: 3 lata temu

Ostatnio: 7 minut temu

0

Skup sie na drugim przykladzie.

Oczekiwane wyjscie:

(...)
114 10
115 1
116 1
119 6
122 4
153 2
179 2
195 2
196 2

Twoj program daje:

(...)
114 10
115 1
116 1
119 6
122 4
243 2

Co to za znaki?
https://theasciicode.com.ar/e[...]character-ascii-code-196.html

Poprobuj te konkretne znaki, ktore nie dzialaja debugowac

Pozostało 580 znaków

2020-07-20 17:40

Rejestracja: 2 miesiące temu

Ostatnio: 2 dni temu

0

243 w moim programie to ó a te ze SPOJA to kompletnie nie wiem co

Pozostało 580 znaków

2020-07-20 17:41

Rejestracja: 3 lata temu

Ostatnio: 7 minut temu

Ogolnie to raczej ich wina, ze takich znakow uzywaja... Idz na https://leetcode.com/ i na trac czasu na ten serwis

Pokaż pozostałe 9 komentarzy
Napisałem coś w rodzaju, żeby przeczytał książkę o algorytmice i klepał zadanka na SPOJu, więc wszystko się zgadza :D - tsz 2020-07-20 20:37
Dobrze to wygląda, jest sprawdzarka, wizualizacja i wskazówki od razu. - tsz 2020-07-20 20:53

Pozostało 580 znaków

tsz
2020-07-20 20:26
tsz

Rejestracja: 1 miesiąc temu

Ostatnio: 3 dni temu

2

O, panie...

To co masz w swoim rozwiązaniu to kody znaków Unicode. Tak ma być, jak ktoś współcześnie pracuje z tekstem to w 90% przypadków chce Unicode.

Taka litera "ę" jest kodowana w UTF-8 jako dwa bajty, "0xc4 0x99". Jak sobie przeliczysz to na liczby dziesiętne to się pokrywa z tym, co masz w przykładzie.

Szybkie wyszukanie jak wczytać same bajty w Pythonie zwraca takie coś https://stackoverflow.com/que[...]32282448/read-stdin-as-binary

Generalnie to i treść zadania i testy są kijowe, bo sugerują, że dostaniesz znaki ASCII, które z definicji nie mogą przekraczać wartości 127. A w praktyce masz input UTF-8, który powinieneś potraktować jak ciąg bajtów.

Żeby było śmieszniej to naiwne rozwiązanie napisane w C++ by przeszło, bo tam domyślnie kodowanie nie jest brane pod uwagę. Zadanie jest z 2007 roku, więc pewnie autor nie ogarnął, że istnieją bardziej złożone kodowania. UTF-8 to wtedy jeszcze nie był tak powszechnie używany.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0