Problem D
Start
Källkod: start.pas, start.p eller start.c
Femtonspelet är ett klassiskt spel som de flesta säkerligen stött
på i någon form. Spelet består av ett bräde med 16
rutor innehållande 15 brickor. Brädets 16 rutor är uppdelade
i 4 rader och 4 kolonner. Brickorna är numrerade 1 till 15 (därav
namnet femtonspel). På varje ruta på brädet får bara
finnas en bricka, vilket gör att det alltid kommer att finnas en och
endast en tom ruta på brädet. Spelet går ut på att
från ett godtyckligt startläge flytta en bricka i taget tills
normalläget (se fig 1) uppnås. Vid varje brickflyttning flyttas
en intilliggande (diagonalt är ej intilliggande) bricka till den tomma
rutan (i fig 1 kan bricka 12 eller 15 flyttas och i fig 2 kan bricka 1,
2 eller 7 flyttas).
Fig 1: Normalläge Fig 2: Ett möjligt startläge
Vid en analys av spelet finner man att man bara från hälften
av alla startlägen kan uppnå normalläget. Dessa kallas möjliga
startlägen. Om raderna uppifrån numreras 1 till 4 (och kolonnerna
1 till 4 från vänster) måste följande villkor vara
uppfyllt för att det skall vara ett möjligt startläge:
(den tomma rutans radnummer + totala antalet inversioner) är
ett jämnt tal
En "inversion" föreligger varje gång en bricka med
högre nummer är före en bricka med lägre nummer (brickorna
tänkes ordnade radvis). Om vi t ex betraktar bricka 13 i fig 2 så
ligger den före bricka 1, 4, 5, 10, osv. Åtta av de tio brickorna
som ligger efter bricka 13 har lägre nummer, vilket betyder att bricka
13 i fig 2 ger upphov till åtta inversioner.
Fig 2 visar ett möjligt startläge eftersom den tomma rutans radnummer
= 1 och antal
inversioner =
10 + 6 + 1
+ 5 + 8 + 0 + 1
+ 1 + 3 + 0 + 1
+ 3 + 1 + 1 + 0 = 41. 1 + 41 = 42 (dvs jämnt)
Uppgiften är att avgöra om ett givet brickutseende är ett
möjligt startläge eller ej.
Indata:
Rad 1: N, Antal testfall programmet skall behandla.
Därefter följer de N testfallen, som vart och ett består
av 4 rader med 4 tal per rad beskrivande brickans utseende, den tomma rutan
betecknas med en nolla.
Utdata:
Skall bestå av N rader, en för varje testfall med texten 'Possible'
eller 'Impossible', beroende på om det var ett möjligt startläge
eller inte.
Exempel:
Indata:
2
11 7 0 2
8 13 1 4
5 10 3 9
15 12 14 6
1 2 3 4
5 6 7 8
9 10 11 12
13 15 14 0
Utdata:
Possible
Impossible