Esittelemme regular expression -henkisen aivopähkinän (pienin muutoksin, katso ohjeet)! Tehtävänäsi on ratkaista ruudukko vaaka- ja pystysuuntaisten vihjeiden perusteella. Reunoilla kulkevat vihjeet kuvailevat vastaavalle riville/sarakkeelle muodostuvaa kirjainrimpsua. Nappaa palanen paperia ja ratkaise oheinen 5×5-”ristikko” vihjeiden perusteella (aakkosto on A-E). Ohjeet vihjeiden tulkintaan löytyvät tehtävän alta.
.+[BD]{1,2}CED? | |||||
(..)+B | |||||
ADD?..+ | |||||
[CDE].C.[CDE] | |||||
[ABE][BD].{1,2}B.* | |||||
.D.+.+ | A..* | .{2}A.{2} | .+.{2,3} | E.C+[AC]?E |
klo 13.24: …ja viimeisen rivin vihje. Kiitos ja anteeksi.
Mallivastaukset julkaistaan joskus. Vihjeet noudattavat seuraavaa syntaksia.
Yksittäinen merkki voidaan kuvata vihjeissä seuraavasti:
”A” Yksittäinen kirjain vihjeessä ilmaisee tiettyä yksittäistä kirjainta.
”.” Ilmaisee, että kyseessä voi olla mikä hyvänsä kirjain A-E.
”[ABC]” Hakasulkeilla ilmoitetaan, että kyseessä on jokin hakasulkeissa olevista kirjaimista (tässä joko A, B tai C).
Merkkejä peräkkäin kirjoittamalla saadaan aikaiseksi sanoja. Tarkastelun kannalta merkkijono voidaan joskus sulkea normaaleihin sulkeisiin.
”(ABBE)” Suluilla ilmoitetaan, että sulkujen sisällä esiintyvät kirjaimet esiintyvät mainitussa järjestyksessä ”ABBE”.
Mistä hyvänsä näistä kirjaimista tai kirjainsarjoista voidaan toistaa merkitsemällä toiston määrää ilmoittava lukumäärä perään. Erilaisia esitystapoja ovat:
”?” Edellä esitetty merkki tai sulkeisiin suljettu sarja merkkejä esiintyy 0-1 kertaa.
”*” Edellä esitetty merkki tai sulkeisiin suljettu sarja merkkejä esiintyy 0-n kertaa (käytännössä ruudukossamme n=5).
”+” Edellä esitetty merkki tai sulkeisiin suljettu sarja merkkejä esiintyy 1-n kertaa (eli ainakin kerran).
”{m}” Edellä esitetty merkki tai sulkeisiin suljettu sarja merkkejä esiintyy m kertaa.
”{m,n}” Edellä esitetty merkki tai sulkeisiin suljettu sarja merkkejä esiintyy m-n kertaa.
Sulut ja hakasulut arvottuvat sisimmästä alkaen. Jos tämä ei vielä kerro mitään, kurkkaa jälkimmäinen esimerkki.
Poimitaan ensiesimerkiksi vihje ”(ABCD)*E?”. Tässä tähti * (eli ”kuinka monta kertaa tahansa toistuva”) viittaa sulkeiden sulkemaan kirjainsarjaan (ABCD). Nyt sulkeet ovat oleelliset, sillä muuten tähti toistaisi vain juuri edeltävää D-kirjainta. Vastavuoroisesti kysymysmerkki ? (eli ”0-1 kertaa toistuva”) viittaa ainoastaan E-kirjaimeen. Vihjeestä voidaan siis muodostaa seuraavat sanat:
- ”” (ABCD ei esiinny kertaakaan, samoin E ei esiinny kertaakaan)
- ”ABCD” (ABCD esiintyy kerran, E ei kertaakaan)
- ”ABCDABCD” (ABCD kahdesti, E ei kertaakaan…)
- ”ABCDABCDABCD”…
jne sekä lisäksi näiden vastinparit, joissa E esiintyy nollan kerran sijaan yhden kerran: - ”E” (ABCD ei kertaakaan, E kerran)
- ”ABCDE” (ABCD kerran, E kerran…)
- ”ABCDABCDE”
- ”ABCDABCDABCDE”
jne. Toisinaan päättely oikeasta sanasta tai sanan osasta voi hyvinkin vaatia vaaka- ja pystysuuntaisten vihjeiden yhdistämistä, mutta tässä tapauksessa selviämme sujuvasti yhdellä vihjeellä: koska aivopähkinän vihjesanat (ainakin pääsääntöisesti) ovat 5×5-ruudukon sanoja ja vihjeet määrittävät sanat kokonaisuudessaan, on ainoa 5-kirjaiminen vaihtoehto ratkaisusanaksi ”ABCDE”.
Esimerkki sulkujen arvottumisesta:
Puretaan vihje ”A(D[BC]){2}” auki. Nyt siis
- Arvuuteltava sana alkaa A-kirjaimella (kirjaimen perässä ei ole lukumäärää määrittäviä tekijöitä, joten A-kirjain esiintyy tasan kerran).
- Huomaamme, että sulkujen () perässä tulee lukumäärä 2. Suluissa esiintyvä osa toistetaan siis kahdesti.
- Suluista muodostuu sarja ”DB” tai ”DC”. Näin ollen ratkaisusana on joko ”ADBDB” tai ”ADCDC”. Sen sijaan sekamuoto ”ADBDC” ei ole mahdollinen: ensin täytyy valita sisimmissä hakasulkeissa esiintyvä kirjain ja vasta sen jälkeen sitä lähdetään toistamaan osana D:tä seuraavaa kirjainta, ei toisin päin.
Huom! Sama arvotusjärjestys pätee .-merkkiin: esimerkiksi vihje ”.{2,4}” voi ilmaista merkkijonoa ”AA” tai ”EEEE”, mutta ei merkkijonoa ”DAE”. Piste korvautuu ensin tietyllä kirjaimella ja vasta sitten lähdetään tarkastelemaan mahdollisia ympäröiviä sulkuja ja lukumäärämääreitä.