CP2012 – Dogson Game
by Mithrandir
A doua problemă din cadrul concursului de programare, ediția 2012, trackul normal este inspirată dintr-un joc propus de Caroll Lewis.
Ideea e simplă: pornind de la un singur cuvânt, schimbând o singură literă pentru a ajunge la alt cuvânt real și repetând procedeul de câteva ori se ajunge la alt cuvânt, de cele mai multe ori în așa fel încât să poți construi o propoziție interesantă.
De exemplu «The CAT was afraid of the DOG» se bazează pe existența unei transformări CAT – COT – DOT – DOG. Alte exemple ar fi «APE evolved into MAN» sau «It was COLD but now it’s WARM».
Cerința e simplă: pornind de la o listă de propoziții cu 2 cuvinte CAPS-LOCK să se găsească cea mai scurtă secvență de transformare de la un cuvânt la următorul.
Ca input veți avea o listă de propoziții, fiecare pe câte un rând. Cele 2 cuvinte vor fi cu litere mari. Propozițiile se termină cu . și linie nouă.
Outputul trebuie sa contina fiecare lant pe o linie, cuvintele separate prin spatiu. De exemplu, pentru inputul
The CAT was afraid of the DOG
outputul corespunzator trebuie sa fie
CAT COT DOT DOG
(nu conteaza case-ul, puteti scrie si mixt in output)
Ca dicționar se va folosi acest fișier care va mai apărea la câteva probleme viitoare. Puteți să-l prelucrați înainte dacă vreți, nu-l includeti în soluție. Se va afla în același director cu executabilul în momentul testării.
Timpul de rulare nu contează, cât timp este sub 30 minute. Contează doar lungimea cumulată a tuturor lanțurilor găsite.
Scoringul este astfel: sunt 100 de fraze. Notând cu proporția de propoziții pentru care se găsește un lanț valid de transformări pentru cele 2 cuvinte în intervalul de timp precizat (30 de minute pentru toate cele 100 de propoziții în total) și cu
suma cumulată a lanțurilor obținute de program și presupunând
lungimea cumulată cea mai mică, scorul este dat de
. Scorul poate deci varia între 0 și 100. În plus, pentru a evita corner-case, un test eșuat se consideră că a produs un lanț de lungime 10
Ponderea acestei probe este 1.1, cu 10% mai mare față de problema anterioară.
Spor.
PS: ca istorie, problema m-a pasionat puțin prin anul 1. Lista de cuvinte este luată din alt challenge, acum încerc să scriu o soluție în Haskell care să meargă cât mai rapid posibil — încă n-am început să lucrez la ea.
2 intrebari:
1. O tranzitie de la un cuvant la altul se poate face doar schimband o litera? Asta implica aceeasi lungime intre cele 2 cuvinte. E corect?
2. In ce forma trebuie sa fie output-ul?
Niste trivia:
Eu credeam ca cel mai lung cuvant din engleza este ‘antidisestablishmentarianism’, dar se pare ca ‘pneumonoultramicroscopicsilicovolcanoconiosis’ e de fapt.
Da, o tranzitie inseamna doar schimbarea unei litere, nu se modifica lungimea cuvantului. Am adaugat acum informatii despre output: toate cuvintele din lant pe linia corespunzatoare.
Eh, bolile si substantele chimice ar putea fi printre cele mai lungi.
Ok, o alta intrebare:
Daca nu exista solutie, ce trebuie afisat?
Exista, nu exista in teste perechi fara solutie. Dar ca sa fie complet poti pune rand gol
Care este data limita pana la care putem trimite problema?
27 mai. Scrie în regulament: http://pilgrimgray.wordpress.com/2012/02/11/concurs-programare-2012-regulament/ (concurs de programare -> 2012 -> link regulament)
In propozitie restul cuvintelor se scriu normal? Adica poate exista vreun cuvant scris asa “hoUSe” sau cu majuscula in interiorul frazei?
Cate submisii avem voie per problema?
Ce trebuie sa contina README-ul?
La ce se refera corner-case-ul si de ce un test se considera esuat daca lantul gasit are lungime 10?
Propoziția e scrisă normal, doar 2 cuvinte sunt cu majuscule. Atenție să tratezi corect cazul în care ai ceva de genul «CUVÂNT,» (o virgulă sau altceva după cuvântul de interes). În rest, cuvintele păstrează case-ul normal cu unica excepție a lui «I» care va fi scris cu litere mici ca să nu încurce.
Poți trimite oricâte submisii, cea mai bună va fi luată în calcul.
Un README conține o scurtă descriere a implementării, atât.
Un test eșuat are două efecte asupra scorului tău:
și 
Sunt restrictii in ceea ce priveste dimensiunea maxima(numar de caractere) a unei propozitii?
Nop.