Skoči na vsebino

P2 - 2021/22 - Naloga 06 - Kontrolna vsota BSD

Definicija

dana niza sta sorodna, če sta enako dolga in imata enako kontrolno vsoto BSD.

Naloga

Napiši program DN06, ki izpiše po abecedi najmanjši niz, ki je sestavljen iz malih črk angleške abecede in je soroden prvemu argumentu programa.

Primer

Niz korona ima enako BDS kontrolno vsoto kot nizi ababan, ababcm, ababel, .... Ker je niz ababan (po abecedi) najmanjši, naj vaš program ob klicu

klic programa
java DN06 korona
izpis
ababan

Dodatna navodila

Kontrolna vsota BSD se izračuna tako, da se med seštevanjem znakov podanega niza na vsakem koraku prvi bit ciklično premakne na zadnje (15.) mesto, poleg tega pa se vsoto ves čas drži na interval [0...65535]. Natančneje, BDS vsoto (checksum) lahko izračunamo z naslednjo metodo:

sbdChecksum metoda
static int bsdChecksum(String niz) {
  // https://en.wikipedia.org/wiki/BSD_checksum
  int checksum = 0;
  for (int i = 0; i<niz.length(); i++) {
    checksum = (checksum >> 1) + ((checksum & 1) << 15);
    checksum += niz.charAt(i);
    checksum &= 0xffff;       
  }
  return checksum;
}

Nizi dolžine 5 so po vrsti (po abecednem redu) urejeni takole: aaaaa, aaaab, aaaac, ...., aaaaz, aaaba, aaabb, ...

Ker morate poiskati prvi niz (ki je soroden podanemu nizu), svetujem, da začnete z najmanjšim nizom (to je niz, ki vsebuje toliko a-jev kot je dolžina niza, ki je podan v argumentu) in ga povečujete. Napišete metodo String povecaj(String niz), ki prejme niz in vrne prvi večji niz. Primer: metoda povecaj("aaaab") vrne aaaac.

Pred oddajo programa na eUčilnico obvezno preverite pravilnost delovanja.


Zadnja posodobitev: April 3, 2022