SPOJ Zliczanie wystąpień (kody ASCII)

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

1

Masz inne kodowanie znaków ?

(base) bartek@Inspiron-7720:~$ echo -n "ąćęłńóśźż" | iconv -f utf8 -t iso8859-2 | hd 
00000000  b1 e6 ea b3 f1 f3 b6 bc  bf                       |.........|
00000009
(base) bartek@Inspiron-7720:~$ echo -n "ąćęłńóśźż" | iconv -f utf8 -t cp1250 | hd 
00000000  b9 e6 ea b3 f1 f3 9c 9f  bf                       |.........|
00000009
(base) bartek@Inspiron-7720:~$ echo -n "ąćęłńóśźż" | hd 
00000000  c4 85 c4 87 c4 99 c5 82  c5 84 c3 b3 c5 9b c5 ba  |................|
00000010  c5 bc                                             |..|
00000012

0

Co powinienem zrobić?

0

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

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

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/extended-ascii-code/box-drawings-single-horizontal-line-character-ascii-code-196.html

Poprobuj te konkretne znaki, ktore nie dzialaja debugowac

0

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

2

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

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/questions/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.

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