Задача 4 от конкурса на PC Magazine & Musala Soft
ВМЪКНИ
Кристофър Робин остана впечатлен от изобретателността на участниците в Конкурса на PC Magazine Bulgaria и Musala Soft и реши да ги предизвика с игра, която намери случайно в една кутия докато чистеше шкафа си. Играта включва дъска, на която се слагат плочки с картинки. Първо Кристофър Робин се опита да я разучи като играеше с Пух, но той постоянно си събираше плочките с нарисуван мед върху тях. Тигър само подскачаше въодушевено, че някой си играе с него, но нямаше търпение да мисли и така играта беше безинтересна. Много полезен се оказа Бухал, който показа завидни умения и помогна на Кристофър Робин да вникне в тънкостите на играта и да изработи собствена стратегия. После той написа програма, която да играе вместо него и поиска да я съпостави срещу програмите на участниците в нашия конкурс. Правилата на играта са следните:
Играта " ВМЪКНИ" се играе от двама играчи върху дъска 5x5, като играчите се редуват да поставят плочки върху дъската. Всяка от плочките има картинка върху едната си страна, като за целта на задачата ще означим картинките с цели числа от 1 до P (3 ≤ P ≤ 7). Когато играч нареди една до друга, в ред или колона, три или повече плочки с еднакви картинки, тогава тези плочки се премахват от дъската и играчът печели точки. Целта на всеки играч е да спечели колкото се може повече точки.
В началото на играта дъската е запълнена и във всяко от полетата има по една плочка, като няма три еднакви плочки една до друга. До дъската има N (1 ≤ N ≤ 200, N е четно) плочки една до друга, като първите K (1 ≤ K ≤ N) от тях са обърнати с лице, а останалите са с гръб и не се вижда тяхната картинка. На всеки ход играчът, който е на ред, взима първата от плочките, които са с видима картинка и я поставя на дъската по един от 15-те възможни начина показани на фигура 1 и номерирани от 1 до 15.

6	7	8	9	10

11
12
13
14
15

5
4
3
2
1

фиг. 1

Ако в посоченото квадратче има плочка, тя се "избутва" в посоката на стрелката. Ако избутаната плочка отиде в квадратче, в което има плочка и тя на свой ред се избутва и т.н. Ако целият ред/колона е запълнен последната плочка "изпада от дъската" и се премахва. На фигура 2 плочка с номер 4 се вмъква отгоре, и понеже колона е пълна най-долната плочка изпада от дъската.

2	3	3	4	1
1	2	3	4	5
2	3	4	5	2
1	2	1	3	1
3	2	4	2	4

4

2	4	3	4	1
1	3	3	4	5
2	2	4	5	2
1	3	1	3	1
3	2	4	2	4

фиг. 2

На фигура 3, плочка с номер 3 се вмъква отляво и избутва само първата плочка с номер 2.
			4	
2			4	
1	3		5	2
2	2	1	3	1
3	2	4	2	4

			4	
3	2		4	
1	2		5	2
2	3	1	3	1
3	2	4	2	4

3

фиг. 3

След като плочката е вмъкната се изпълняват следните стъпки:
1.	Ако под някоя плочка има празно квадратче, плочката се смъква една позиция надолу. Стъпка 1 се изпълнява докато под никоя плочка няма празно квадратче.
2.	Премахва се една група (ако съществува) от три или повече еднакви съседни плочки (в ред или колона). Ако съществува повече от една такава група се премахва тази с по-голям брой съседни плочки. Ако съществуват повече от една група с най-голям брой, се избират тези плочки, които са в ред (не в колона). Ако съществуват две, които са в ред или две, които са в колона, се избира тази поредица, която започва от по-високо. Ако и двете почват от еднакво високо, се избира тази, която почва от по-ляво.
3.	Ако е премахната група в стъпка 2 се преминава към стъпка 1. Ако не е премахната група – ходът е приключил и следващият играч е на ход.
Пример:

			4	
2		2	2	
1	2	1	4	2
2	2	1	4	1
3	3	4	2	4

			4	
3	2	2	2	
1	2	1	4	2
2	2	1	4	1
3	3	4	2	4

3

			4	
3				
1	2	1	4	2
2	2	1	4	1
3	3	4	2	4

				
3			4	
1	2	1	4	2
2	2	1	4	1
3	3	4	2	4

				
3				
1	2	1		2
2	2	1		1
3	3	4	2	4

След вмъкването на плочка с номер 3, плочката с номер 2 се премества една позиция надясно и така образува ред и колона с по три съседни двойки. Тъй като поредиците са с равна дължина предимство получава редът – плочките се отстраняват от дъската. След като е минала стъпка 2, се връщаме в стъпка 1 и всички плочки "изпадат" надолу докато под тях няма празно поле. В случая, изпада плочка с номер 4. Това образува колона от четворки. Тя е единствена поредица и се отстранява от дъската.
След като е приключил един ход, следващата плочка от наредените до дъската, която е с гръб се обръща с лице и картинката върху нея става видима. Ако всички плочки са с лице – никоя не се обръща. Играта продължава докато N-те плочките до дъската свършат.
Точките които получава играч за взета поредица са както следва: за три поредни – 10 точки, за четири поредни – 20 точки, за пет поредни – 30 точки. Освен това за втора поредица взета в един ход точките се удвояват, за трета поредица – утрояват и т.н. Точките които ще получи играчът от горния пример са 10 + 2x10 = 30.
За да играете играта Вие ще трябва да напишете .NET приложение, което се свързва с Web Service и използва интерфейса, които се предоставя, за да играе срещу програмите на другите участници. На сайта на конкурса – http://konkurs.musala.com – може да намерите подробна информация за интерфейса на Web Service-а както и неговия адрес. Също ще намерите подробни указания и примери как да създадете приложение, което контактува с Web Service.
Програмата на всеки играч, ще може да "мисли" сумарно за всички ходове по 0.2s * (N / 2). Това не налага ограничение за един ход – за някой ходове програма може да мисли повече от 0.2s. Ако в някой момент програмата на някой превиши отреденото време, оценяващата система ще счита, че играчът играе винаги ход номер 6 и няма да прави запитване към програмата.
Оценяването ще се извърши на принципа всеки срещу всеки, като всеки ще бъде и първи и втори играч. За класирането ще се сумират точките, които всеки състезател е спечелил в отделните игри.