Διαδρομές
/
Prolog
Prolog
/
Ασκήσεις
/
Παγκόσμιο Σύστημα Στιγματοθεσίας
Παγκόσμιο Σύστημα Στιγματοθεσίας

Παγκόσμιο Σύστημα Στιγματοθεσίας

Μέτριο

Εισαγωγή

Είσαι λάτρης του geocaching, που συνδυάζει την αγάπη σου για την ύπαιθρο με την αγάπη σου για την επίλυση γρίφων. Ενώ η τοπική ιστοσελίδα geocaching παραθέτει τις συντεταγμένες GPS όλων των κρυπτών, δεν υποστηρίζει τη δημιουργία μιας αποδοτικής διαδρομής για τη συλλογή τους. Τυχαίνει να έχεις εγκατεστημένο στον υπολογιστή σου λογισμικό εύρεσης διαδρομής, αλλά αυτό χρησιμοποιεί διαφορετική μορφή GPS από την ιστοσελίδα geocaching. Για να τροφοδοτήσεις το λογισμικό εύρεσης διαδρομής με τα δεδομένα, θα χρειαστεί να αναλύσεις τις μοίρες και το ημισφαίριο τόσο του γεωγραφικού πλάτους όσο και του γεωγραφικού μήκους κάθε συντεταγμένης GPS της ιστοσελίδας.

Οδηγίες

Η εργασία σου είναι να αναλύσεις συντεταγμένες GPS. Κάθε συντεταγμένη είναι μορφοποιημένη χρησιμοποιώντας την παραλλαγή της μορφής δεκαδικών μοιρών με ρητά ημισφαίρια:

<LATITUDE_DEGREES> <LATITUDE_HEMISPHERE>, <LONGITUDE_DEGREES> <LONGITUDE_HEMISPHERE>

Αυτές είναι οι επιτρεπόμενες τιμές για κάθε component ξεχωριστά:

  • <LATITUDE_DEGREES>: ένας αριθμός κινητής υποδιαστολής στο εύρος 0..90 (συμπεριλαμβανομένων)
  • <LATITUDE_HEMISPHERE>: είτε N είτε S
  • <LONGITUDE_DEGREES>: ένας αριθμός κινητής υποδιαστολής στο εύρος 0..180 (συμπεριλαμβανομένων)
  • <LONGITUDE_HEMISPHERE>: είτε E είτε W

Για παράδειγμα, το "48.8584 N, 2.2945 E" αναλύεται σε:

  • <LATITUDE_DEGREES>: 48.8584
  • <LATITUDE_HEMISPHERE>: N
  • <LONGITUDE_DEGREES>: 2.2945
  • <LONGITUDE_HEMISPHERE>: E

Έχεις 11 εργασίες, στις οποίες θα αναλύσεις σταδιακά συντεταγμένες GPS. Θα χρησιμοποιήσεις την υποστήριξη Οριστικής Γραμματικής (DCG) της Prolog, η οποία είναι σχεδιασμένη για την ανάλυση δομημένου κειμένου.

Note

Για να ξεκινήσεις, το αρχείο stub περιλαμβάνει ήδη τη βιβλιοθήκη dcg/basics μέσω:

:- use_module(library(dcg/basics)).

1. Ανάλυσε ένα κόμμα

Υλοποίησε τον κανόνα comma για να αναλύσεις ένα μεμονωμένο κόμμα (","):

?- string_codes(",", Codes), phrase(comma, Codes).

2. Ανάλυσε ένα κενό

Υλοποίησε τον κανόνα space για να αναλύσεις ένα μεμονωμένο κενό (" "):

?- string_codes(" ", Codes), phrase(space, Codes).

3. Υποστήριξε όλους τους χαρακτήρες κενού (εκτός από τις αλλαγές γραμμής)

Τροποποίησε τον κανόνα space ώστε να αναλύει όλους τους χαρακτήρες κενού, εκτός από τις αλλαγές γραμμής:

?- string_codes("\t", Codes), phrase(space, Codes).

?- string_codes("\n", Codes), phrase(space, Codes).
false.

4. Ανάλυσε το ημισφαίριο του γεωγραφικού πλάτους

Το ημισφαίριο του γεωγραφικού πλάτους μπορεί να είναι είτε "N" είτε "S", και θα πρέπει να αναλύεται στο άτομο north ή south. Υλοποίησε τον κανόνα latitude_hemisphere για να αναλύσεις το ημισφαίριο του γεωγραφικού πλάτους:

?- string_codes("N", Codes), phrase(latitude_hemisphere(Hemisphere), Codes).
Hemisphere = north.

5. Ανάλυσε το ημισφαίριο του γεωγραφικού μήκους

Το ημισφαίριο του γεωγραφικού μήκους μπορεί να είναι είτε "E" είτε "W", και θα πρέπει να αναλύεται στο άτομο east ή west. Υλοποίησε τον κανόνα longitude_hemisphere για να αναλύσεις το ημισφαίριο του γεωγραφικού μήκους:

?- string_codes("E", Codes), phrase(longitude_hemisphere(Hemisphere), Codes).
Hemisphere = east.

6. Ανάλυσε μοίρες

Οι μοίρες ενός γεωγραφικού μήκους ή πλάτους ορίζονται ως αριθμός κινητής υποδιαστολής. Υλοποίησε τον κανόνα degrees για να αναλύσεις αριθμούς κινητής υποδιαστολής:

?- string_codes("748.012", Codes), phrase(degrees(Degrees), Codes).
Degrees = 748.012.

7. Ανάλυσε μοίρες γεωγραφικού πλάτους

Οι μοίρες γεωγραφικού πλάτους δεν είναι απλώς αριθμοί κινητής υποδιαστολής, αλλά αριθμοί κινητής υποδιαστολής στο εύρος 0..90 (συμπεριλαμβανομένων). Υλοποίησε τον κανόνα latitude_degrees για να αναλύσεις μοίρες γεωγραφικού πλάτους χρησιμοποιώντας το παραπάνω εύρος:

?- string_codes("48.745", Codes), phrase(latitude_degrees(Degrees), Codes).
Degrees = 48.745.

?- string_codes("117.844", Codes), phrase(latitude_degrees(Degrees), Codes).
false.

8. Ανάλυσε μοίρες γεωγραφικού μήκους

Οι μοίρες γεωγραφικού μήκους δεν είναι απλώς αριθμοί κινητής υποδιαστολής, αλλά αριθμοί κινητής υποδιαστολής στο εύρος 0..180 (συμπεριλαμβανομένων). Υλοποίησε τον κανόνα longitude_degrees για να αναλύσεις μοίρες γεωγραφικού μήκους χρησιμοποιώντας το παραπάνω εύρος:

?- string_codes("178.773", Codes), phrase(longitude_degrees(Degrees), Codes).
Degrees = 178.773.

?- string_codes("-22.523", Codes), phrase(longitude_degrees(Degrees), Codes).
false.

9. Ανάλυσε γεωγραφικό πλάτος

Τα γεωγραφικά πλάτη έχουν δύο μέρη: τις μοίρες και το ημισφαίριό τους, τα οποία χωρίζονται με ένα κενό. Υλοποίησε τον κανόνα latitude για να αναλύσεις ένα γεωγραφικό πλάτος:

?- string_codes("56.101 N", Codes), phrase(latitude(Degrees, Hemisphere), Codes).
Degrees = 56.101,
Hemisphere = north.

10. Ανάλυσε γεωγραφικό μήκος

Τα γεωγραφικά πλάτη έχουν δύο μέρη: τις μοίρες και το ημισφαίριό τους, τα οποία χωρίζονται με ένα κενό. Υλοποίησε τον κανόνα latitude για να αναλύσεις ένα γεωγραφικό πλάτος:

?- string_codes("143.889 W", Codes), phrase(longitude(Degrees, Hemisphere), Codes).
Degrees = 143.889,
Hemisphere = west.

11. Ανάλυσε συντεταγμένη

Οι συντεταγμένες έχουν δύο μέρη: το γεωγραφικό πλάτος και το γεωγραφικό μήκος, τα οποία χωρίζονται με ένα κόμμα ακολουθούμενο από ένα κενό. Υλοποίησε τον κανόνα coordinate για να αναλύσεις και το γεωγραφικό πλάτος (μοίρες και ημισφαίριο):

?- 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.
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Prolog Exercism

Έτοιμος να ξεκινήσεις την άσκηση Παγκόσμιο Σύστημα Στιγματοθεσίας;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Prolog με 109 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.