Sətir avtomatı
Avtomat «Homer-2015» daxil olan simvollar ardıcıllığını qəbul edir və nəticə olaraq müəyyən bir ardıcıllıq qaytarır. Avtomatın müəyyən bir təlimat dəsti — əvəz etmə qaydaları siyahısı var. Hər bir qayda əvəz ediləcək alt ardıcıllığı və bu alt ardıcıllığı əvəz edəcək ardıcıllığı əhatə edir. Avtomat belə əməliyyatlar həyata keçirir: cari ardıcıllıqda uyğun alt ardıcıllığı ehtiva edən ilk əvəz etmə qaydasını siyahıda axtarır, bu alt ardıcıllığın ilk qarşılaşmasını uyğun əvəz ardıcıllığı ilə əvəz edir və hər şeyi yenidən başlayır. Cari ardıcıllıqda heç bir alt ardıcıllıq olmadıqda, avtomat bu ardıcıllığı nəticə olaraq qaytarır. Avtomatın əvəz etmə siyahısı proqram adlanır. Əvəz etmə qaydalarının sayı proqramın ölçüsü adlanır. Konkret giriş məlumatlarında edilən əvəz etmələrin sayı əməliyyatların sayı adlanır.
Gəlin avtomatın abcbca ardıcıllığını qəbul etdiyi və proqramının ölçüsünün 2 olduğu bir nümunəni nəzərdən keçirək: 1)bac → c və 2)bc → cba. Avtomatın əməliyyat ardıcıllığı belədir:
Cari ardıcıllıq abcbca.
abcbca ilk qaydadan bac alt ardıcıllığı ehtiva etmədiyinə görə, avtomat ikinci qaydaya keçir.
abcbca ikinci qaydadan bc alt ardıcıllığı ehtiva etdiyinə görə, avtomat bu alt ardıcıllığın ilk qarşılaşmasını cba ilə əvəz edir və yenidən başlayır.
Cari ardıcıllıq acbabca.
acbabca ilk qaydadan bac alt ardıcıllığı ehtiva etmədiyinə görə, avtomat ikinci qaydaya keçir.
acbabca ikinci qaydadan bc alt ardıcıllığı ehtiva etdiyinə görə, avtomat bu alt ardıcıllığın ilk (və yeganə) qarşılaşmasını cba ilə əvəz edir və yenidən başlayır.
Cari ardıcıllıq acbacbaa.
acbacbaa ilk qaydadan bac alt ardıcıllığı ehtiva etdiyinə görə, avtomat bu alt ardıcıllığın ilk (və yeganə) qarşılaşmasını c ilə əvəz edir və yenidən başlayır.
Cari ardıcıllıq accbaa.
accbaa ilk qaydadan bac alt ardıcıllığı ehtiva etmədiyinə görə, avtomat ikinci qaydaya keçir.
accbaa ikinci qaydadan bc alt ardıcıllığı ehtiva etmədiyinə görə, avtomat növbəti qaydaya keçməyə çalışır.
Qaydalar bitdiyinə görə, avtomat accbaa ardıcıllığını nəticə olaraq qaytarır.
Beləliklə, avtomat abcbca ardıcıllığından accbaa ardıcıllığını yaratdı. Bu halda əməliyyatların sayı 3-dür: bc cba ilə əvəz edildi, sonra yenidən bc cba ilə əvəz edildi, daha sonra bac c ilə əvəz edildi.
Tapşırıq
Rədki avtomatı üçün müxtəlif ardıcıllıq çevirmə məsələlərini həll edən proqram dəstini yazın (aşağıya baxın). Hər bir alt tapşırıq üçün yalnız rədki avtomatının proqram mətnini təqdim edirsiniz. Hər bir alt tapşırıq üçün proqram bütün testlərini keçərsə, tam bal alırsınız, əks halda heç bir testdən keçmədikdə sıfır alırsınız.
Məhdudiyyətlər
Hər bir qaydada həm axtarış alt ardıcıllığının, həm də əvəz ardıcıllığının uzunluğu 10 simvoldan çox olmamalıdır (amma cəmi daha uzun ola bilər); bu halda əvəz ardıcıllığı boş ola bilər, axtarış alt ardıcıllığı isə boş ola bilməz. Avtomat həmişə bu simvollarla işləyə bilər: rəqəmlər, kiçik və böyük latın hərfləri (kiçik və böyük hərflər avtomatın anlamında fərqli simvollardır), həmçinin «plus» (+) simvolu. Siz bu simvollardan həm axtarış alt ardıcıllıqlarında, həm də əvəz ardıcıllıqlarında bütün alt tapşırıqlarda istifadə edə bilərsiniz. Bir proqramın ölçüsü 100-dən çox ola bilməz. Heç bir giriş məlumatı üçün əməliyyatların sayı 1000-dən çox olmamalıdır. Proqramın ölçüsü və əməliyyatların sayı üçün təriflərə yuxarıda baxın.
Emulator vasitəsilə yoxlama
Elektron şərtlərin variantında rədki avtomatını emulyasiya edən və proqramın icra vəziyyəti haqqında əlavə məlumat verən proqramın yükləmə linki verilmişdir. Emulyatoru istifadə etmək üçün onu ayrıca bir kataloqa yerləşdirin, bu kataloqda proqram mətnini ehtiva edən program.txt faylı yaradın, həmçinin proqramınız üçün giriş ardıcıllığı daxil edin input.txt faylı yaradın (faylın sonunda ardıcıllıq keçidini əlavə etmək və ya etməmək olar) və emulyator proqramını işə salın. O, aşağıdakı faylları yaradacaq:
!output.txt: avtomatın çıxış ardıcıllığı (əgər proqram və ya giriş məlumatları səhvdirsə və ya əməliyyatların sayı məhdudiyyəti aşarsa, fayl yaradılmayacaq / silinəcək).
!debug.txt: bu faylın hər bir sətrində müvafiq əməliyyatların sayından sonra ardıcıllığın vəziyyəti göstərilir (əgər proqram və ya giriş məlumatları səhvdirsə, bu fayl yaradılmayacaq / silinəcək; əgər əməliyyatların sayı məhdudiyyəti aşarsa, fayl yalnız məhdudiyyətin aşılması anına qədər ardıcıllığın vəziyyətini ehtiva edəcək).
!info.txt: bu faylın birinci sətrində proqram və giriş məlumatlarının düzgün olub-olmadığı göstərilir (əgər onlar səhvdirsə, niyə); əgər proqram və giriş məlumatları düzgündürsə, ikinci sətrdə icra edilmiş proqramın əməliyyatlarının sayı göstərilir; üçüncü sətrdə proqramın ölçüsü göstərilir; dördüncü sətrdə ən uzun axtarış ardıcıllığının və ən uzun əvəz ardıcıllığının uzunluğu göstərilir.
Əlavə olaraq, emulyatora dördə qədər komanda sətri parametrləri ötürülə bilər: əməliyyatların sayı üçün məhdudiyyət, proqramın ölçüsü üçün məhdudiyyət, axtarış ardıcıllığının uzunluğu üçün məhdudiyyət və əvəz ardıcıllığının uzunluğu üçün məhdudiyyət. Məsələn, emulyatoru auto.exe 2000 100 15 komandası ilə işə salsanız, əməliyyatların sayı üçün məhdudiyyət 2000 (1000 əvəzinə) olacaq; proqramın ölçüsü üçün məhdudiyyət standart (100) olacaq; axtarış ardıcıllığının uzunluğu üçün məhdudiyyət — 15; komanda sətri parametrlərində göstərilməyən əvəz ardıcıllığının uzunluğu üçün məhdudiyyət də standart (10) olaraq qalacaq.
Alt tapşırıq 1 (5 bal)
Girişdə — uzunluğu 1-dən 20-ə qədər olan rəqəmlərdən ibarət ardıcıllıq. Çıxışda — eyni rəqəmlərdən ibarət ardıcıllıq, kiçikdən böyüyə doğru sıralanmış. Nümunə: 9101→0119.