Διαδρομές
/
Roc
Roc
/
Ασκήσεις
/
Επίθεση βασίλισσας
Επίθεση βασίλισσας

Επίθεση βασίλισσας

Εύκολο

Οδηγίες

Δεδομένων των θέσεων δύο βασιλισσών σε μια σκακιέρα, δείξε αν είναι τοποθετημένες με τρόπο που να μπορούν να επιτεθούν η μία στην άλλη.

Στο σκάκι, μια βασίλισσα μπορεί να επιτεθεί σε κομμάτια που βρίσκονται στην ίδια γραμμή, στήλη ή διαγώνιο.

Μια σκακιέρα μπορεί να αναπαρασταθεί με έναν πίνακα 8 επί 8.

Έτσι, αν σου πουν ότι η λευκή βασίλισσα βρίσκεται στο c5 (με μηδενική αρίθμηση: στήλη 2, γραμμή 3) και η μαύρη βασίλισσα στο f2 (με μηδενική αρίθμηση: στήλη 5, γραμμή 6), τότε ξέρεις ότι η διάταξη είναι η εξής:

Μια σκακιέρα με δύο βασίλισσες. Βέλη που ξεκινούν από τη βασίλισσα στο c5 δείχνουν πιθανές κατευθύνσεις αιχμαλωσίας κατά μήκος στήλης, γραμμής και διαγωνίου.

Μπορείς επίσης να απαντήσεις αν οι βασίλισσες μπορούν να επιτεθούν η μία στην άλλη. Σε αυτή την περίπτωση, η απάντηση θα ήταν ναι, μπορούν, επειδή και τα δύο κομμάτια μοιράζονται μια διαγώνιο.

Συντελεστές

Η εικόνα της σκακιέρας φτιάχτηκε από τον habere-et-dispertire με LaTeX και το πακέτο chessboard του Ulrike Fischer.

Υλοποίηση

Στο σκάκι, οι γραμμές ονομάζονται "οριζόντιες" και οι στήλες "κάθετες". Οι οριζόντιες κυμαίνονται από το 1 έως το 8, ενώ οι κάθετες από το A έως το H.

Σε αυτή την άσκηση, το Square είναι ένας αδιαφανής τύπος που αναπαριστά ένα τετράγωνο σε μια σκακιέρα. Χρησιμοποιεί εσωτερικά πεδία row και column με αρίθμηση από το 0, και εγγυάται ότι είναι πάντα έγκυρα (δηλαδή, από το 0 έως το 7).

Η συνάρτηση create δέχεται ως είσοδο ένα Str, που αναπαριστά ένα έγκυρο τετράγωνο στη σκακιέρα χρησιμοποιώντας την επίσημη σημειογραφία, όπως το "C5". Η συνάρτηση create πρέπει να αναλύσει αυτό το Str, να επαληθεύσει ότι αναπαριστά ένα έγκυρο τετράγωνο και, αν ναι, να επιστρέψει μια τιμή Square που περιέχει τα κατάλληλα πεδία row και column. Η οριζόντια 1 αντιστοιχεί στη γραμμή 0 και η οριζόντια 8 στη γραμμή 7. Για παράδειγμα, η create("C5") πρέπει να επιστρέψει ένα τετράγωνο με γραμμή 4 και στήλη 2.

Ο τύπος Square εκθέτει επίσης εύχρηστες μεθόδους rank και file. Στο παραπάνω παράδειγμα, η rank πρέπει να επιστρέψει τον ακέραιο 5 και η file τον χαρακτήρα 'C'.

Τέλος, η συνάρτηση queen_can_attack δέχεται δύο διαφορετικές τιμές Square και ελέγχει αν οι βασίλισσες που βρίσκονται σε αυτά τα τετράγωνα μπορούν να επιτεθούν η μία στην άλλη.

Συμπέρασμα: οι αδιαφανείς τύποι, όπως ο Square, είναι εξαιρετικοί όταν θέλεις να προσφέρεις κάποιες εγγυήσεις, όπως το ότι τα row και column είναι πάντα μεταξύ 0 και 7. Οι αδιαφανείς τύποι κρύβουν επίσης λεπτομέρειες υλοποίησης από τους χρήστες, κάτι που κάνει το API πιο καθαρό.

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Roc Exercism

Έτοιμος να ξεκινήσεις την άσκηση Επίθεση βασίλισσας;

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