Korsord
Källkod: korsord.*
Konrad tycker mycket om att lösa korsord. Han brukar ofta skicka in lösningarna till tidningarna, och ibland vinner han priser. Men han tycker att de här korsorden med tal, sk Krypton, är tråkiga. I sådana korsord ges egentligen lösningen direkt, fast man vet inte om det, eftersom den är krypterad. Varje bokstav är nämligen utbytt mot ett unik tal. Ibland får man vet vilka bokstäver som står bakom några tal, men inte alltid.
Titta på korsordet till höger. 1=S och 2=O och 3=T. Med lite funderande kan man tänka sig att 4=A, 5=X och 6=Y. Det beror förstås på vilka ord som är korrekta. Som tur var så har Konrad sammanställt en lista på sådana ord.
Konrad vill ha ett program som, utifrån korsordets talrepresentation och vilka ord som finns i korsordet, en ordlista och eventuella givna bokstäver, räknar ut alla tals bokstäver. Konrad garanterar att utifrån indata finns det alltid exakt en lösning till korsordet.
Indata
Indata inledes med ett positivt heltal N
på en egen rad som anger antalet
korsord.
Därefter följer de N korsorden. Varje korsord inleds med en lista med
godkända ord, var och ett på en egen rad. Orden är på 1-20 bokstäver vardera,
och består av de stora bokstäverna A-Ö. Listan avslutas med tecknet # på
en egen rad. Listan kan innehålla upp till 1000 ord, så det är viktigt
att ert program är effektivt.
Därefter följer heltalen r och k på en rad,
åtskiljda av mellanslag.
r står för antalet rader i korsordet, k för antalet kolumner.
0 < r,k < 21.
Därefter följer r rader med k heltal på varje, åtskiljda av
mellanslag. Varje heltal är mellan 0 och 29, inklusive, där 0 står för
en svart ruta och 1 till och med 29 står för någon bokstav.
Efter de r raderna följer ett heltal o på en egen rad. Detta
tal står för hur många ord som finns i korsordet. Efter denna rad följer
o rader. Varje rad innehåller en av bokstäverna V eller L för
vågrät respektive lodrät.
Tecknet följs av
mellanslag och sedan tre heltal, åtskiljda av mellanslag. Det första två
talen anger koordinaterna ((rad, kolumn), övre vänstra hörnet är (1,1)) och
det tredje talet är längden på ordet.
Eter dessa rader följer ett heltal b på en egen rad. Detta tal
står för hur många bokstäver som är kända. Efter denna rad kommer
b rader av kända bokstäver på formen
heltal=bokstav .
Utdata
För varje korsord skall det finnas en rad för varje tal (bokstav) som
finns med i korsordet. Raderna ska ha formatet
heltal=bokstav och skall vara i stigande nummerordning.
Efter dessa rader skall tecknet # skrivas ut på en egen rad.
Exempel
Indata: Utdata: 2 1=S OST 2=O SAX 3=T YXA 4=A EKA 5=X # 6=Y 3 3 # 2 1 3 1=L 0 4 0 2=U 6 5 4 3=N 3 4=D V 1 1 3 5=M L 1 2 3 6=E V 3 1 3 8=Å 3 # 2=O 1=S 3=T VISBY MALMÖ KRISTIANSTAD KARLSKRONA KALMAR VÄXJÖ JÖNKÖPING BORÅS GÖTEBORG UDDEVALLA SKÖVDE LINKÖPING KARLSTAD ÖREBRO VÄSTERÅS ESKILSTUNA UPPSALA STOCKHOLM BORLÄNGE FALUN GÄVLE SUNDSVALL HÄRNÖSAND ÖSTERSUND UMEÅ LUND LULEÅ HALMSTAD RONNEBY TROLLHÄTTAN KARLSTAD # 5 5 0 0 1 0 0 0 1 2 3 4 0 0 1 0 0 2 5 6 8 0 0 0 8 0 0 3 L 1 3 5 V 2 2 4 V 4 1 4 0