SPOJ Zliczanie wystąpień (kody ASCII)

SPOJ Zliczanie wystąpień (kody ASCII)
S7
  • Rejestracja:prawie 5 lat
  • Ostatnio:3 dni
  • Postów:354
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


Competitive Google searcher
BG
  • Rejestracja:prawie 6 lat
  • Ostatnio:2 dni
  • Postów:289
1

Masz inne kodowanie znaków ?

Kopiuj
(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

edytowany 1x, ostatnio: Bartłomiej Golenko
S7
  • Rejestracja:prawie 5 lat
  • Ostatnio:3 dni
  • Postów:354
0

Co powinienem zrobić?


Competitive Google searcher
BG
Prawdopodobnie nic. Jak wrzucisz program na SPOJ-a to użyje właściwego kodowania. Inne wyniki pokazuje jak uruchamiasz to u siebie lokalnie.
S7
Niestety nie akceptuję mi :( widzisz gdzieś błąd ?
BG
Sorry - nie mam czasu szukać...
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
0

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


λλλ
Zobacz pozostały 1 komentarz
stivens
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
Wiec nie wiem, poczytaj jakies zrodla o algorytmice, moze matematyce dyskretnej
stivens
a jesli chcesz sie nauczyc nie-algo programowania to pisz prawdziwe programy a nie algorytmy
stivens
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.
S7
  • Rejestracja:prawie 5 lat
  • Ostatnio:3 dni
  • Postów:354
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


Competitive Google searcher
edytowany 1x, ostatnio: Suchy702
S7
Sory już poprawiłem
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
0

Skup sie na drugim przykladzie.

Oczekiwane wyjscie:

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

Twoj program daje:

Kopiuj
(...)
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


λλλ
S7
  • Rejestracja:prawie 5 lat
  • Ostatnio:3 dni
  • Postów:354
0

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


Competitive Google searcher
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
2

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


λλλ
Zobacz pozostałe 9 komentarzy
TS
Napisałem coś w rodzaju, żeby przeczytał książkę o algorytmice i klepał zadanka na SPOJu, więc wszystko się zgadza :D
TS
Dobrze to wygląda, jest sprawdzarka, wizualizacja i wskazówki od razu.
TS
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:394
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.