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

Azonosító kódok

2084-et írunk. A Nagy Testvér éve végül elérkezett, bár egy évszázad késéssel. Hogy a polgárait jobban ellenőrzése alá tudja vonni, és ezáltal megelőzze a törvény és a rend tartós megbontását, a kormány radikális lépésre szánta el magát: minden állampolgárnak egy parányi mikroszámítógépet kell beültetnie a bal csuklójába. A számítógép a személyes adatokon kívül egy jeladót is tartalmaz, amely lehetővé teszi, hogy egy központi számítógép naplózza és figyelje az emberek mozgását. (Kellemes mellékhatása ennek az eljárásnak, hogy csökkenti a munkanélküli segélyért sorban álló plasztikai sebészek számát.)

Minden mikroszámítógéphez egy egyedi azonosító kód tartozik. Ez a kód legfeljebb 50 karakterből áll, amelyek mindegyike a 26 angol kisbetű egyike. Az egyes kódokhoz használt karakterek halmazát találomra választják ki. Mivel a kódot nagyon komplikált eljárással nyomják a csipekbe, a gyártónak sokkal egyszerűbb dolga van, ha olyan kódokat állíthat elő, amelyek más kódok átrendezéséből adódnak, mint ha az új kódokat más betűkészlettel kellene létrehozni. Ezért ha egyszer kiválasztanak egy betűkészletet, a belőle képezhető összes lehetséges kódot felhasználják, mielőtt megváltoztatnák a készletet.

Tegyük fel például, hogy a döntés szerint a kódok az 'a' betűnek pontosan 3, a 'b'-nek 2, a 'c'-nek pedig 1 előfordulását tartalmazzák. Ekkor a lehetséges 60 kód közül három a következő:

abaabc
abaacb
ababac

Ez a három kód fentről lefelé ábécérendben van felsorolva. Az ebből a karakterkészletből előállítható összes kód listájában ezek a kódok egymást követik ebben a sorrendben.

Írj egy programot, amely segít az azonosító kódok kiadásában. A program egy legfeljebb 50 kisbetűből álló sorozatot fog beolvasni (amely azonos karaktereket is tartalmazhat), és ki kell írnia a rákövetkező kódot, ha az létezik, illetve a „No Successor” üzenetet, ha a beolvasott kód az utolsó az adott karakterkészletből előállítható kódok sorában.

A bemenet specifikációja

A bemenetet több sor alkotja. Minden sor egyetlen sztringet tartalmaz, amely a kódot reprezentálja. A bemenetet egy olyan sor zárja, amely egyetlen '#' karakterből áll.

A kimenet specifikációja

A kimenetre minden beolvasott kódhoz egy sort kell kiírni, amely a rákövetkező kódot vagy a „No Successor” üzenetet tartalmazza.

Példa bemenet

  1. abaacb
  2. cbbaa
  3. #
letöltés szöveges állományként

A példa bemenethez tartozó kimenet

  1. ababac
  2. No Successor
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.