Bilirsinizmi Speed? Bu, iki oyunçunun kartlarını masalara nə qədər tez yerləşdirə biləcəkləri ilə yarışdığı məşhur kart oyunlarından biridir.
Speed oynamaq üçün əvvəlcə iki oyunçu üz-üzə oturur. Hər bir oyunçuya bir dəst və bir tablo verilir və onların arasında bir sol və bir sağda olmaqla iki masa yerləşir. Tablo yalnız dörd kart saxlaya bilər. Oyunu davam etdirmək üçün bəzi sadə qaydalar var:
Oyunçu yalnız öz tablosundan bir kartı bir yığına köçürə bilər, əgər köçürülən kartın rütbəsi yığının üstündəki kartın rütbəsinə qonşudursa. Məsələn, A və 2, 4 və 3 qonşudur. Bu oyunda A və K də qonşudur.
O, həmçinin dəstdən bir kart çəkmək və onu tablonun boş sahəsinə qoymaq hüququna malikdir.
Hər iki oyunçu eyni anda eyni masaya kart köçürməyə çalışarsa, yalnız daha sürətli oyunçu kartı masaya qoya bilər. Digər oyunçu kartını yığına köçürə bilməz (çünki artıq yığının üstündəki kartın qonşusu deyil) və onu tablosuna qaytarmalıdır.
Əvvəlcə hər bir oyunçu öz dəstindən dörd kart çəkir və onları tablosunun üstündə üzləri yuxarı qoyur. Əgər tablonu doldurmaq üçün kifayət qədər kart yoxdursa, sadəcə mümkün qədər çox kart çəkin. Oyun, dəstdən bir kart çəkərək və eyni anda sağdakı masalara qoyaraq başlayır. Əgər dəst artıq boşdursa, o, tablosundakı istənilən kartı masaya köçürə bilər. Sonra onlar yuxarıda təsvir edilən qaydaya uyğun olaraq hərəkətlərini davam etdirirlər, hər ikisi çıxılmaz vəziyyətə gələnə qədər, yəni kartları köçürmək üçün heç bir yol qalmayana qədər. Hər dəfə çıxılmaz vəziyyət yarananda, hər biri bir kart çəkərək (və ya tablosundan bir kart götürərək) və sağ masasına qoyaraq yenidən başlayırlar, üzünün nə olduğuna baxmayaraq. İlk olaraq kartlarını bitirən oyunçu oyunun qalibi olur.
Cənab James A. Games bu sadə oyuna o qədər aludə olub ki, onu oynayan robotlar hazırlamağa qərar verib. O, robotların və onların proqramlarının dizaynını yeni tamamlayıb, lakin dizayn çox mürəkkəb olduğu üçün onların yaxşı işləyib-işləmədiyinə əmin deyil. Buna görə də o, sizdən, dostu olaraq, robotları simulyasiya edən bir proqram yazmağınızı xahiş etdi. Robotlar üçün alqoritm aşağıdakı kimi dizayn edilib:
Robot kartları verilən sırayla çəkir.
Hər bir robota həmişə bir və ya daha çox kart verilir.
Speed oyununun real versiyasında oyunçular əvvəlcə kartları rənglərinə görə təsnif edirlər ki, hansı oyunçunun kartı qoyduğunu asanlıqla anlaya bilsinlər. Lakin bu addım bu simulyasiyada atlanır.
Oyun yalnız bir kart dəstindən istifadə edir və iki yerə bölünür. Başqa sözlə, robotlara verilən iki dəstdə eyni üzə malik ən çox bir kart görünür.
Hazırlıq olaraq, hər robot dörd kart çəkir və onları sağdan sola tabloya qoyur.
Əgər dəstində kifayət qədər kart yoxdursa, dəstdəki bütün kartları çəkin.
Bu addım hər iki robotda tamamlandıqdan sonra, onlar bir-birini sinxronlaşdırır və eyni anda masalara ilk kartları qoyaraq oyuna başlayırlar.
Əgər dəstdə bir və ya daha çox kart qalıbsa, robot üst kartı çəkir və sağ masaya qoyur. Əks halda, robot tablosundakı ən sağdakı kartı götürür.
Sonra iki robot yuxarıda təsvir edilən oyunun əsas qaydasına uyğun olaraq kartları köçürməyə davam edir, heç biri kartları daha köçürə bilməyənə qədər.
Robot tablosundan bir kart götürdükdə, kartı masaya qoyduqdan sonra boş qalan yeri doldurmaq üçün (mümkünsə) dəstdən bir kart çəkir.
Kartları köçürmək müəyyən bir vaxt alır. Bir robot kartı masaya qoymağı tamamladıqda, digər robot eyni masaya kart qoymağa çalışırsa, hərəkəti dərhal dayandırmalı və kartı orijinal mövqeyinə qaytarmalıdır.
Robot, qonşu kart yığının üstündə yerləşdirildiyi anda yığına kart qoymağa başlaya bilər.
İki robot eyni anda eyni masaya kart qoymağa çalışırsa, yalnız kartı sola köçürən robot kartı uğurla qoya bilər, mövqe ayarlarına görə.
Robot tablosunda bir neçə seçim varsa, sağ masaya qoyula bilən kartları qoyula bilməyənlərə üstünlük verir. Hələ də bir neçə seçim qaldıqda, robot daha zəif karta üstünlük verir.
Çıxılmaz vəziyyət yarananda, robotlar hər biri masaya bir kart qoyaraq yenidən başlayır, sonra yuxarıdakı alqoritmə uyğun olaraq hərəkət etməyə davam edirlər.
Robotlardan biri kartları bitirdikdə, yəni verilən bütün kartları köçürdükdə, oyun bitir.
Kartları bitirən robot oyunu qazanır.
Hər iki robot eyni anda kartları bitirərsə, son hərəkətdə daha güclü kartı köçürən robot qalib gəlir.
Kartların gücü onların rütbələrinə, sonra isə rənglərinə görə müəyyən edilir. Rütbələr aşağıdakı sırayla güclüdür: A > K > Q > J > X (10) > 9 > ··· > 3 > 2. Rənglər aşağıdakı sırayla güclüdür: S (Maça) > H(Kupa) > D (Karo) > C (Trefl). Başqa sözlə, SA ən güclüdür və C2 ən zəifdir. Robotlar hər bir hərəkəti tamamlamaq üçün aşağıdakı vaxtı tələb edir:
Tabloya kart çəkmək üçün 300 millisaniyə,
Sağ masaya kart köçürmək üçün 500 millisaniyə,
Sol masaya kart köçürmək üçün 700 millisaniyə və
Kartı orijinal mövqeyinə qaytarmaq üçün 500 millisaniyə.
Bir hərəkəti ləğv etmək həmişə 500 ms sabit vaxt alır, ləğv edilən hərəkətin irəliləyişindən asılı olmayaraq. Bu vaxt hərəkətin dayandırıldığı dəqiq andan etibarən sayılır, hərəkətin başlanğıc vaxtından deyil. Siz bu robotların yaxşı sinxronlaşdırıldığını, yəni aralarında saat fərqi olmadığını qəbul edə bilərsiniz. Məsələn, Robot A-ya "S3 S5 S8 S9 S2" və Robot B-yə "H7 H3 H4" dəsti verildiyini fərz etsək, oyun aşağıdakı kimi olacaq. Qeyd edək ki, təsvirlərdə "masa A" (müvafiq olaraq "masa B") Robot A üçün sağ masanı (müvafiq olaraq Robot B üçün) göstərir.
Robot A dörd kart S3, S5, S8 və S9 kartlarını sağdan sola tabloya çəkir. Robot B isə üç kart H7, H3 və H4 çəkir.
Sonra iki robot oyunun başlanğıcı üçün sinxronlaşır. Bu anı 0 ms olaraq qəbul edək.
Eyni anda, Robot A dəstdən S2 kartını masa A-ya köçürməyə başlayır və Robot B tablodan H7 kartını masa B-yə köçürməyə başlayır.
500 ms-də hər iki robot kartlarını köçürməyi tamamlayır. Sonra Robot A S3 kartını masa A-ya köçürməyə başlayır (bu 500 ms tələb edir) və Robot B də masa A-ya H3 kartını köçürməyə başlayır (bu 700 ms tələb edir).
1000 ms-də, Robot A S3 kartını masa A-ya qoymağı tamamlayır. Robot B hərəkətini dayandırır və H3 kartını tabloya qaytarmağa başlayır (bu 500 ms tələb edir). Eyni zamanda Robot A S8 kartını masa B-yə köçürməyə başlayır (bu 700 ms tələb edir).
1500 ms-də, Robot B H3 kartını qaytarmağı tamamlayır və H4 kartını masa A-ya köçürməyə başlayır (bu 700 ms tələb edir).
1700 ms-də, Robot A S8 kartını qoymağı tamamlayır və S9 kartını masa B-yə köçürməyə başlayır.
2200 ms-də, Robot B H4 kartını qoymağı tamamlayır və H3 kartını masa A-ya köçürməyə başlayır.
2400 ms-də, Robot A S9 kartını qoymağı tamamlayır və S5 kartını masa A-ya köçürməyə başlayır.
2900 ms-də, hər iki robot masa A-ya kart qoymağı tamamlayır. Robot B kartı sol masaya köçürdüyü üçün, Robot B H3 kartını qoymağı tamamlayır. Robot A hərəkəti dayandırılır.
İndi Robot B verilən bütün kartları köçürməyi bitirib, beləliklə Robot B bu oyunu qazanır.
Giriş bir neçə məlumat dəstindən ibarətdir, hər biri dörd sətirlə təsvir edilir. Hər bir məlumat dəstinin birinci sətri Robot A-ya dəst olaraq veriləcək kartların sayını göstərən N_A tam ədədini ehtiva edir. Növbəti sətir N_A uzunluğunda kart ardıcıllığını ehtiva edir. Sonra eyni şəkildə göstərilən Robot B üçün N_B sayı və N_B uzunluğunda kart ardıcıllığı gəlir. Kart ardıcıllığında kart spesifikasiyaları arasında bir boşluq simvolu var. Hər bir kart spesifikasiyası 2 simvoldan ibarət bir sətirdir. Birinci simvol 'S' (maça), 'H' (kupa), 'D' (karo) və ya 'C' (trefl) və rəngi göstərir. İkinci simvol 'A', 'K', 'Q', 'J', 'X' (üçün 10) və ya '9' ilə '2' arasında bir rəqəmdir və rütbəni göstərir. Bu oyun yalnız bir kart dəsti ilə oynandığı üçün hər bir məlumat dəstində eyni üzə malik bir kartdan çox yoxdur. Girişin sonu bir sıfır ehtiva edən tək bir sətirlə göstərilir.
Hər bir məlumat dəsti üçün oyunun nəticəsini bir sətirdə çıxarın. Robot A qalib gəlsə, "A qalibdir." çıxarın, ya da Robot B qalib gəlsə, "B qalibdir." çıxarın. Çıxışda əlavə simvollar icazə verilmir.
Nümunə 1