Programozó versenyek

Magas szintű programozási nyelvek 1, 2015. december 15., K16 ZH

2015. december 15. 16:05 – 2015. december 15. 17:50

Pokoljárás

Te meg hol a pokolban kódorogtál?” – csattant fel féltékenyen Gemma Donati, Dante Alighieri fiatal, tűzrőlpattant felesége, amikor a szeme elé került az itáliai reneszánsz nagy költőfejedelme. „Hej, nehéz azt szavakba önteni!” – dünnyögte magában a poéta, majd papírlapot ragadott, hogy lerajzolhassa bolyongásainak útvonalát ifjú hitvesének. A lapra egy téglalap alakú négyzetrácsot rajzolt, s a négyzetrács legfelső sorából kiindulva egy furcsa, kacskaringós vonalat húzott, amely egészen a négyzetrács legalsó soráig vezetett. Csak az igazán figyelmes szemlélőnek tűnhetett volna fel, hogy a girbegurba vonalat egyetlen tollvonással kanyarintotta a papírlapra, ráadásul úgy, hogy a vonal sehol sem keresztezte, sőt még csak nem is érintette önmagát.

Írjon programot, amely az egyetlen parancssori argumentumaként megadott szöveges állományból a költő útvonalainak adatait olvassa be! Egy útvonalat leíró blokk a következőképpen épül fel: az első sor két egész számot tartalmaz, az útvonalat magában foglaló téglalap hoszúságát (h) és szélességét (sz), ahol 3 ≤ h ≤ 40 és 3 ≤ sz ≤ 40. A következő h sor mindegyikében egy sz hosszúságú sztring szerepel. Az útvonal sorait és oszlopait egyaránt 0-tól indexeljük. Az i-edik sztring (0 ≤ i ≤ h – 1) az útvonal i-edik sorát írja le: 'X' (nagy X) karakterek szerepelnek azon a helyen, ahol járt Dante, '.' (pont) karakterek pedig ott, ahol nem. Az útvonal 0-s és (h – 1)-es indexű sorában pontosan egy cella tartalmaz 'X' karaktert, a 0-s indexű sorban lévő az útvonal kezdetét, a (h – 1)-es indexű sorban lévő pedig a végét jelzi. A program írja a standard kimenetre a költő útja során érintett cellák koordinátáit „(x,y)” alakban, soronként egyet-egyet! Az első koordináta az útvonal kezdetének, az utolsó az útvonal végének a koordinátája legyen, ez utóbbi után a program írjon ki egy üres sort is a standard kimenetre! A feldolgozandó útvonalak végét egy-egy 0-s érték jelzi a hossszúság és szélesség adatainak a helyén, ha ezt olvassa a program, akkor fejezze be a működését!

Példa állomány (sample.txt)

  1. 11 26
  2. ...................X......
  3. .....XXX....XXXXXXXX......
  4. ....XX.XX..XX.............
  5. ....X...X.XX..............
  6. ....XXX.XXX...............
  7. ......X...................
  8. ......XX..................
  9. .......XX.................
  10. ........XX................
  11. .........XXX..............
  12. ...........X..............
  13. 0 0
letöltés szöveges állományként

Parancssori argumentumok

  1. sample.txt
letöltés szöveges állományként

A futtatás eredménye a standard kimeneten

  1. (0,19)
  2. (1,19)
  3. (1,18)
  4. (1,17)
  5. (1,16)
  6. (1,15)
  7. (1,14)
  8. (1,13)
  9. (1,12)
  10. (2,12)
  11. (2,11)
  12. (3,11)
  13. (3,10)
  14. (4,10)
  15. (4,9)
  16. (4,8)
  17. (3,8)
  18. (2,8)
  19. (2,7)
  20. (1,7)
  21. (1,6)
  22. (1,5)
  23. (2,5)
  24. (2,4)
  25. (3,4)
  26. (4,4)
  27. (4,5)
  28. (4,6)
  29. (5,6)
  30. (6,6)
  31. (6,7)
  32. (7,7)
  33. (7,8)
  34. (8,8)
  35. (8,9)
  36. (9,9)
  37. (9,10)
  38. (9,11)
  39. (10,11)
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.