Programozó versenyek

Magas szintű programozási nyelvek 1, gyakorló feladatsor, 2012. március 20.

2012. március 20. 15:00 – 2012. április 21. 0:00

ISBN számok felismerése

A manapság kiadott könyvek többségéhez hozzárendelnek egy kódot, amely egyértelműen azonosítja azokat. Az International Standard Book Number (ISBN) általában 10 decimális számjegy sorozata, de bizonyos esetekben az X nagybetű is előfordulhat tizedik számjegyként. A könnyebb olvashatóság kedvéért az ISBN számban bárhol állhatnak kötőjelek, más szerepük azonban nincs. Az alább látható példa input és példa output bemutat több érvényes és néhány érvénytelen ISBN számot.

Valójában az ISBN számnak csak az első kilenc számjegyét használják a könyvek azonosítására. A tizedik számjegy azt a célt szolgálja, hogy ellenőrizze, hogy az előző kilenc számjegy helyes-e. Az ellenőrző szánjegyet úgy választják meg, hogy a következő algoritmussal kiszámított érték maradék nélkül osztható legyen 11-gyel. Mivel az ellenőrző számjegynek néha 10-nek kell lennie, hogy garantáljuk a 11-gyel való oszthatóságot, az ISBN tervezői egy speciális szimbólumot választottak ki a 10 jelölésére, ez lett az X.

Az ISBN számot ellenőrző algoritmus viszonylag egyszerű. Az ISBN szám számjegyeiből két összeget (s1 és s2) számítunk ki. Az s1 az eddig vizsgált számjegyek összege, s2 pedig az eddig vizsgált számjegyekhez tartozó s1 értékek (részösszegek) összege. Az ISBN szám helyes, ha s2 utolsó értéke maradék nélkül osztható 11-gyel.

Egy példa világossá teszi az eljárást. Tekintsük a (helyes) 0-13-162959-X ISBN számot, amely Tanenbaum Computer Networks című könyvének az ISBN száma. Lássuk először s1 kiszámítását:

ISBN számjegyek 0 1 3 1 6 2 9 5 9 10 (X)
részösszegek 0 1 4 5 11 13 22 27 36 46

Az s2 kiszámítása az s1 kiszámítása közben kapott részösszegek összegzésével történik:

s2 (futó összegek) 0 1 5 10 21 34 56 83 119 165

Ezután ellenőrizhetjük az ISBN helyességét, megfigyelve, hogy a 165 valóban maradék nélkül osztható 11-gyel.

A bemenet specifikációja

A feladat bemenete soronként egy karaktersorozatot tartalmaz, amelyet megelőzhetnek és/vagy követhetnek további szóköz karakterek. Egyik sorban sincs 80-nál több karakter, de a karaktersorozat tartalmazhat olyan karaktereket is, amelyek nem szerepelhetnek szabályos ISBN számban, valamint lehet hosszabb, illetve rövidebb is, mint a szükséges 10 számjegy.

A kimenet specifikációja

A kimenetnek a bemenetről beolvasott karaktersorozatokat kell tartalmaznia soronként, valamint azt, hogy az adott karaktersorozat szabályos ISBN szám-e vagy sem.

Példa bemenet

  1. 0-89237-010-6
  2. 0-8306-3637-4      
  3.   0-06-017758-6
  4.     This_is_garbage
  5. 1-56884-030-6
  6.     0-8230-2571-3
  7.     0-345-31386-0
  8.     0-671-88858-7
  9.     0-8104-5687-7
  10.     0-671-74119-5
  11.     0-812-52030-0
  12.     0-345-24865-1-150
  13. 0-452-26740-4
  14.     0-13-139072-4
  15.     0-1315-2447-X
letöltés szöveges állományként

A példa bemenethez tartozó kimenet

  1. 0-89237-010-6 is correct.
  2. 0-8306-3637-4 is correct.
  3. 0-06-017758-6 is correct.
  4. This_is_garbage is incorrect.
  5. 1-56884-030-6 is correct.
  6. 0-8230-2571-3 is correct.
  7. 0-345-31386-0 is correct.
  8. 0-671-88858-7 is correct.
  9. 0-8104-5687-7 is correct.
  10. 0-671-74119-5 is correct.
  11. 0-812-52030-0 is correct.
  12. 0-345-24865-1-150 is incorrect.
  13. 0-452-26740-4 is correct.
  14. 0-13-139072-4 is correct.
  15. 0-1315-2447-X is correct.
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.