A geocaching a szabadban töltött idő és a fejtörők megoldása iránti szeretetedet ötvözi, és te nagy rajongója vagy. Bár a helyi geocaching weboldal felsorolja az összes láda GPS-koordinátáját, arra viszont nem ad lehetőséget, hogy hatékony útvonalat tervezz a begyűjtésükhöz. Történetesen van a gépeden egy útvonalkereső szoftver, csakhogy az más GPS-formátumot használ, mint a geocaching weboldal. Ahhoz, hogy betápláld az adatokat az útvonalkereső szoftverbe, fel kell dolgoznod a weboldalon szereplő minden GPS-koordináta szélességi és hosszúsági fokát és féltekéjét.
A feladatod GPS-koordináták feldolgozása. Minden koordináta a tizedes fok formátum azon változatában van megadva, ahol a félteke külön szerepel:
<LATITUDE_DEGREES> <LATITUDE_HEMISPHERE>, <LONGITUDE_DEGREES> <LONGITUDE_HEMISPHERE>
Ezek az egyes komponensek megengedett értékei:
<LATITUDE_DEGREES>: lebegőpontos szám a 0..90 tartományban (a végpontokat is beleértve)<LATITUDE_HEMISPHERE>: N vagy S
<LONGITUDE_DEGREES>: lebegőpontos szám a 0..180 tartományban (a végpontokat is beleértve)<LONGITUDE_HEMISPHERE>: E vagy W
Például a "48.8584 N, 2.2945 E" feldolgozásának eredménye:
<LATITUDE_DEGREES>: 48.8584<LATITUDE_HEMISPHERE>: N<LONGITUDE_DEGREES>: 2.2945<LONGITUDE_HEMISPHERE>: E11 részfeladat vár rád, amelyekben lépésről lépésre dolgozod fel a GPS-koordinátákat. A Prolog határozott klóznyelvtan (DCG) támogatását fogod használni, amelyet strukturált szövegek feldolgozására terveztek.
Hogy könnyebben elindulj, a vázfájl már tartalmazza a dcg/basics könyvtárat az alábbi módon:
:- use_module(library(dcg/basics)).
Valósítsd meg a comma szabályt egyetlen vessző (",") feldolgozására:
?- string_codes(",", Codes), phrase(comma, Codes).
Valósítsd meg a space szabályt egyetlen szóköz (" ") feldolgozására:
?- string_codes(" ", Codes), phrase(space, Codes).
Módosítsd a space szabályt úgy, hogy minden whitespace-t feldolgozzon, az újsorok kivételével:
?- string_codes("\t", Codes), phrase(space, Codes).
?- string_codes("\n", Codes), phrase(space, Codes).
false.
A szélesség féltekéje "N" vagy "S" lehet, amelyet a north vagy south atommá kell feldolgozni.
Valósítsd meg a latitude_hemisphere szabályt a szélesség féltekéjének feldolgozására:
?- string_codes("N", Codes), phrase(latitude_hemisphere(Hemisphere), Codes).
Hemisphere = north.
A hosszúság féltekéje "E" vagy "W" lehet, amelyet az east vagy west atommá kell feldolgozni.
Valósítsd meg a longitude_hemisphere szabályt a hosszúság féltekéjének feldolgozására:
?- string_codes("E", Codes), phrase(longitude_hemisphere(Hemisphere), Codes).
Hemisphere = east.
A hosszúság vagy szélesség fokai lebegőpontos számként vannak meghatározva.
Valósítsd meg a degrees szabályt lebegőpontos számok feldolgozására:
?- string_codes("748.012", Codes), phrase(degrees(Degrees), Codes).
Degrees = 748.012.
A szélességi fokok nem csupán lebegőpontos számok, hanem a 0..90 tartományba eső (a végpontokat is beleértve) lebegőpontos számok.
Valósítsd meg a latitude_degrees szabályt a szélességi fokok feldolgozására a fenti tartomány használatával:
?- string_codes("48.745", Codes), phrase(latitude_degrees(Degrees), Codes).
Degrees = 48.745.
?- string_codes("117.844", Codes), phrase(latitude_degrees(Degrees), Codes).
false.
A hosszúsági fokok nem csupán lebegőpontos számok, hanem a 0..180 tartományba eső (a végpontokat is beleértve) lebegőpontos számok.
Valósítsd meg a longitude_degrees szabályt a hosszúsági fokok feldolgozására a fenti tartomány használatával:
?- string_codes("178.773", Codes), phrase(longitude_degrees(Degrees), Codes).
Degrees = 178.773.
?- string_codes("-22.523", Codes), phrase(longitude_degrees(Degrees), Codes).
false.
A szélesség két részből áll: a fokokból és a féltekéből, amelyeket szóköz választ el.
Valósítsd meg a latitude szabályt a szélesség feldolgozására:
?- string_codes("56.101 N", Codes), phrase(latitude(Degrees, Hemisphere), Codes).
Degrees = 56.101,
Hemisphere = north.
A szélesség két részből áll: a fokokból és a féltekéből, amelyeket szóköz választ el.
Valósítsd meg a latitude szabályt a szélesség feldolgozására:
?- string_codes("143.889 W", Codes), phrase(longitude(Degrees, Hemisphere), Codes).
Degrees = 143.889,
Hemisphere = west.
A koordináta két részből áll: a szélességből és a hosszúságból, amelyeket vessző, majd egy szóköz választ el.
Valósítsd meg a coordinate szabályt, amely mind a szélességet (fokok és félteke), mind a hosszúságot (fokok és félteke) feldolgozza:
?- string_codes("48.8584 N, 2.2945 E", Codes), phrase(coordinate(Latitude, LatitudeHemisphere, Longitude, LongitudeHemisphere), Codes).
Latitude = 48.8584,
LatitudeHemisphere = north,
Longitude = 2.2945,
LongitudeHemisphere = east.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Prolog nyelvet 109 feladat segítségével, valódi emberi mentorálással, mindez ingyen.