Διαδρομές
/
Ruby
Ruby
/
Ασκήσεις
/
Παρτίδα σκακιού
Παρτίδα σκακιού

Παρτίδα σκακιού

Άσκηση εκμάθησης

Εισαγωγή

Τα εύρη αντιπροσωπεύουν ένα διάστημα μεταξύ δύο τιμών. Οι πιο συνηθισμένοι τύποι που υποστηρίζουν εύρη είναι οι Integer και String. Μπορούν να χρησιμοποιηθούν για πολλά πράγματα, όπως η γρήγορη δημιουργία μιας συλλογής, το κόψιμο συμβολοσειρών, ο έλεγχος αν μια τιμή βρίσκεται μέσα σε ένα εύρος και η επανάληψη. Δημιουργούνται με τον τελεστή εύρους .. ή ... (περιεκτικό και αποκλειστικό αντίστοιχα).

1..5  # => 1..5
1...5 # => 1...5

(1..5).to_a # => [1, 2, 3, 4, 5]
(1...5).to_a # => [1, 2, 3, 4]

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

Τα εύρη μπορούν επίσης να δημιουργηθούν με τον κατασκευαστή Range, το new.

Range.new(1, 5) # A range containing 1, 2, 3, 4, 5
Note

Όταν δημιουργείς ένα εύρος στη Ruby με τους τελεστές εύρους .. ή ... και θέλεις να καλέσεις μια μέθοδο πάνω στο εύρος, πρέπει να βάλεις το εύρος μέσα σε παρενθέσεις. Αυτό συμβαίνει γιατί, αλλιώς, η μέθοδος θα κληθεί στο 2ο όρισμα του τελεστή εύρους.

(1..5).sum # => 15
1..5.sum # => Error: undefined method `sum' for 5:Integer (NoMethodError)

Λήψη υποσυμβολοσειρών

Όταν θέλεις να κόψεις μια συμβολοσειρά, μπορείς να χρησιμοποιήσεις τον τελεστή εύρους για να πάρεις μια υποσυμβολοσειρά. Δηλαδή, δημιουργώντας ένα εύρος με τη θέση αρχής και τέλους της υποσυμβολοσειράς.

"Hello World"[0..4] # => "Hello"
"Hello World"[6..10] # => "World"

Μπορείς επίσης να χρησιμοποιήσεις αρνητικές θέσεις για να πάρεις την υποσυμβολοσειρά από το τέλος της συμβολοσειράς.

"Hello World"[-5..-1] # => "World"
"Hello World"[6..-4] # => "Wo"

Μέθοδοι εύρους

Τα εύρη έχουν ένα σύνολο μεθόδων που μπορούν να χρησιμοποιηθούν για να δουλέψεις μαζί τους. Για παράδειγμα, αυτές οι μέθοδοι μπορούν να χρησιμοποιηθούν για να πάρεις το άθροισμα όλων των τιμών στο εύρος ή να ελέγξεις αν το εύρος περιλαμβάνει μια τιμή.

Method Description Example
sum Επιστρέφει το άθροισμα όλων των τιμών στο εύρος (1..5).sum # => 15
size Επιστρέφει το μέγεθος του εύρους (1..5).size # => 5
include? Επιστρέφει true αν το εύρος περιλαμβάνει τη δεδομένη τιμή, αλλιώς false (1..5).include?(3) # => true

Εύρη χωρίς τέλος και χωρίς αρχή

Ένα εύρος μπορεί να είναι χωρίς τέλος και χωρίς αρχή. Το εύρος χωρίς τέλος ή χωρίς αρχή έχει ως τιμή αρχής ή τέλους το nil, αλλά όταν ορίζεις το εύρος μπορείς να παραλείψεις το nil.

Η χρήση ευρών χωρίς αρχή και χωρίς τέλος είναι χρήσιμη όταν θέλεις, για παράδειγμα, να κόψεις μια συμβολοσειρά από την αρχή ή μέχρι το τέλος.

"Hello World"[0..] # => "Hello World"
"Hello World"[4..] # => "o World"
"Hello World"[..5] # => "Hello "
Caution

Αν δεν χρησιμοποιηθεί πάνω σε μια συλλογή, το εύρος χωρίς τέλος μπορεί να δημιουργήσει μια ατέρμονη ακολουθία, αν δεν το χρησιμοποιήσεις με προσοχή.

Εύρη συμβολοσειρών

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

("aa".."az").to_a # => ["aa", "ab", "ac", ..., "az"]

Οδηγίες

Ως λάτρης του σκακιού, θα ήθελες να γράψεις τη δική σου εκδοχή του παιχνιδιού. Ναι, μπορεί να υπάρχουν ήδη πολλές υλοποιήσεις του σκακιού διαθέσιμες στο διαδίκτυο, αλλά η δική σου θα είναι μοναδική!

Ξεκινάς υλοποιώντας ένα βασικό σύστημα κίνησης για τα πιόνια.

Το παιχνίδι σκακιού θα παίζεται σε μια σκακιέρα που έχει 8 τετράγωνα πλάτος και 8 τετράγωνα μήκος. Τα τετράγωνα προσδιορίζονται από ένα γράμμα και έναν αριθμό.

1. Όρισε το εύρος γραμμών και στηλών

Το παιχνίδι θα πρέπει να αποθηκεύει τις γραμμές της σκακιέρας. Οι γραμμές είναι οι σειρές της σκακιέρας και αριθμούνται από το 1 έως το 8.

Το παιχνίδι θα πρέπει επίσης να αποθηκεύει τις στήλες της σκακιέρας. Οι στήλες είναι οι κολόνες της σκακιέρας και προσδιορίζονται από τα γράμματα A έως H.

Όρισε τις σταθερές Chess::RANKS και Chess::FILES που αποθηκεύουν το εύρος των γραμμών και των στηλών αντίστοιχα.

Chess::RANKS
# => 1..8

Chess::FILES
# => 'A'..'H'

2. Έλεγξε αν το τετράγωνο είναι έγκυρο

Το παιχνίδι θα πρέπει να ελέγχει αν ένα τετράγωνο είναι έγκυρο. Ένα τετράγωνο είναι έγκυρο αν η γραμμή και η στήλη βρίσκονται μέσα στα εύρη των γραμμών και των στηλών.

Όρισε τη μέθοδο Chess.valid_square? που δέχεται τα ορίσματα rank που περιέχει έναν ακέραιο της γραμμής και file που περιέχει έναν χαρακτήρα της στήλης. Η μέθοδος θα πρέπει να επιστρέφει true αν η γραμμή και η στήλη βρίσκονται μέσα στα εύρη των γραμμών και των στηλών και να επιστρέφει false διαφορετικά.

Chess.valid_square?(1, 'A')
# => true

3. Πάρε το ψευδώνυμο του παίκτη

Το παιχνίδι θα πρέπει να παίρνει το ψευδώνυμο του παίκτη. Το ψευδώνυμο αποτελείται από τους πρώτους 2 χαρακτήρες του ονόματος του παίκτη και τους τελευταίους 2 χαρακτήρες του επωνύμου του. Το ψευδώνυμο θα πρέπει να γράφεται με κεφαλαία.

Όρισε τη μέθοδο Chess.nickname που δέχεται τα ορίσματα first_name που περιέχει μια συμβολοσειρά με το όνομα του παίκτη και last_name που περιέχει μια συμβολοσειρά με το επώνυμο του παίκτη. Η μέθοδος θα πρέπει να επιστρέφει το ψευδώνυμο του παίκτη ως συμβολοσειρά με κεφαλαία.

Chess.nickname("John", "Doe")
# => "JOOE"

4. Δημιούργησε μήνυμα κίνησης

Το παιχνίδι θα πρέπει να δημιουργεί ένα μήνυμα για μια κίνηση που να λέει ποιος παίκτης μετακινήθηκε σε ποιο τετράγωνο. Το μήνυμα θα πρέπει να χρησιμοποιεί το ψευδώνυμο του παίκτη και το τετράγωνο στο οποίο μετακινήθηκε. Το παιχνίδι πρέπει επίσης να προσδιορίζει αν η κίνηση είναι έγκυρη ελέγχοντας αν η στήλη και η γραμμή του τετραγώνου βρίσκονται μέσα στα εύρη των στηλών και των γραμμών.

Αν η κίνηση είναι έγκυρη, το μήνυμα θα πρέπει να είναι: "{nickname} moved to {square}" Αν η κίνηση δεν είναι έγκυρη, το μήνυμα θα πρέπει να είναι: "{nickname} attempted to move to {square}, but that is not a valid square"

Όρισε τη μέθοδο Chess.move_message που δέχεται τα ορίσματα first_name που περιέχει μια συμβολοσειρά με το όνομα του παίκτη, last_name που περιέχει μια συμβολοσειρά με το επώνυμο του παίκτη, και square που περιέχει μια συμβολοσειρά με το τετράγωνο στο οποίο μετακινήθηκε ο παίκτης. Η μέθοδος θα πρέπει να επιστρέφει το μήνυμα για την κίνηση ως συμβολοσειρά.

Chess.move_message("John", "Doe", "A1")
# => "JOOE moved to A1"
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Ruby Exercism

Έτοιμος να ξεκινήσεις την άσκηση Παρτίδα σκακιού;

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