Oppgave 1
runde | c | ordbok | s | utskrift | kode | nestekode |
0 | A | A | 65 | 256 | ||
1 | B | AB - 256 | B | 65 | 66 | 257 |
2 | A | BA - 257 | A | 66 | 65 | 258 |
3 | A | AA - 258 | A | 65 | 65 | 259 |
4 | A | AA | 258 | |||
5 | 258 |
Oppgave 2
Bruk f.eks. flg. melding: "ABABCABCABCAD". Da vil den først delen "ABABC" gjøre at "ABC" havner i ordboken.
Setter vi Tegn
= A og Ord = "BC", så kommer
Tegn
+Ord
+Tegn
+Ord
+Tegn
= "ABCABCA" deretter.
Oppgave 3
Kodene til ordene som legges inn i ordboken er fortløpende tall fra og med 256. Dermed
kan disse isteden fungere som indekser i en ArrayList
. Den første (tallet 256) legger vi inn
på indeks 0, den neste på indeks 1, osv.
public static String dekomprimer(List<Integer> koder) { int kode = koder.get(0); // første tallkode er < 256 String t; // foreløpig udefinert String s = String.valueOf((char) kode); // ord med ett tegn char c; // foreløpig udefinert StringBuilder resultat = new StringBuilder(s); // til å lagre resultatet List<String> ordbok = new ArrayList<>(); for (int i = 1; i < koder.size(); i++) // resten av tallene { kode = koder.get(i); // neste tall t = s; // t settes lik s if (kode < ordbok.size() + 256) // kode er i ordboken { s = kode < 256 ? String.valueOf((char) kode) // ny verdi for s : ordbok.get(kode - 256); c = s.charAt(0); // c lik første tegn i s } else // kode er ikke i ordboken { c = t.charAt(0); // c lik første tegn i t s = t + c; // s lik t + c } resultat.append(s); // legger s i resultatet ordbok.add(t + s); // legger inn i ordboken } return resultat.toString(); }