CRC #30
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "s426110/DALGLI0:CRC"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Zapomniałem dodać, że przed uruchomieniem należy skompilować kod źródłowy. Polecenie javac * powinno rozwiązać problem.
Problem jest oczywiście w tym, że próbuje Pan zakodować znaki które nie należą do ASCII przy pomocy jakiegoś kodowania. Prawidłowym outputem powinna być
bytesarray
(lub jego odpowiednik w javie), ponieważ tutaj pierwszy znak fcs nie mieści się w kodowaniu ASCII. Proszę zobaczyć uaktualnioną wersję zadania.Znaki kodowane są do extended ASCII (używane jest 8 zamiast 7 bitów). Problem przy dekodowaniu tego konkretnego przykładu polega na tym, że bash odczytuje jako drugi bajt jako oznaczenie końca ciągu znaków. Powyższy przykład powinien zadziałać jeżeli zamienione zostaną znaki cudzysłowów (") na apostrofy (').
nie ma czegoś takiego jak "extended ascii" ;-) są różne kodowania pozostałych ~127 znaków; np iso8859 albo 1250
co jest tylko dyskusją z boku prawdziwego problemu, że program powinien działać niezależnie od kodowania i powłoki.
Uważam, że mój program działa niezależnie od powłoki (w tym konkretnym przypadku jestem przekonany, że zadziała jeżeli użyje się 'sztuczki' z apostrofami), a co do kodowania to w jaki sposób mają być interpretowane wartości bajtów powyżej 127 skoro nie da się ich zapisać w ASCII?
Proszę w takim razie sprawić, żeby Pana program był w stanie zweryfikować, czy fcs
[0x27, 0x22]
jest właściwy dla wiadomościHello world!
(oba znaki to ascii)Proszę również się zastanowić w jakiej formie pojawi się wynik na ekranie (i czy będzie można go zweryfikować), jeśli pierwszym bajtem będzie
0x08
.Wreszcie to, że nie da się wyinterpretować liczb w ascii nie przeszkadza chyba temu, żeby ich używać? ;-) i w czytelny sposób wypisywać do konsoli. Nie trzeba po prostu przechowywać wiadomości+fcs jako stringa, wystarczy do tego tablica wartości
unsigned char
(8-bajtowych liczb całkowitych).A na samym końcu: co jest czytelniejszym znakiem w konsoli: 0x7f, czy jego reprezentacja w ascii??
Poprawione. Zmodyfikowałem output tak, żeby nie było żadnych niejasności.
(1) Jeżeli na wejściu program dostanie jeden ciąg znaków, obliczy FCS i da na wyjściu 3 wartości (wiadomość, wartość pierwszego bajtu FCS, wartość drugiego bajtu FCS).
(2) Jeżeli program na wejściu dostanie 3 wartości (output z (1)) sprawdzi czy FCS zgadza się z wiadomością.
PS C:\out> java CRC "Hello world!"
Hello world! -67 34
PS C:\out> java CRC "Hello world!" -67 34
true
ok
uwagi do kodu:
ArrayList<Integer> g = new ArrayList<>(); ArrayList<Integer> l = new ArrayList<>();
są listami liczb całkowitych, a nie wielomianami?? gdyby mieć ładnie zaimplementowaną klasęPolynomialRing
można by wówczas napisać (zmyślam oczywiście nazwy)(chociaż muszę przyznać, że ta pseudo-java którą tutaj próbuję napisać się do tego naprawdę słabo nadaje. Dlaczego jednak nie Python? ;-)
Polynomials
... doprawdy wszystkie operacje wykonuje się na listach liczb całkowitych?? a może jednak (znowu pseudo-java, nigdy w tym języku nie pisałem):Pull request closed