Διαδρομές
/
Rust
Rust
/
Ασκήσεις
/
Ναρκαλιευτής
Ναρκαλιευτής

Ναρκαλιευτής

Μέτριο

Εισαγωγή

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

Οδηγίες

Η αποστολή σου είναι να προσθέσεις τον αριθμό των ναρκών στα κενά τετράγωνα ενός ολοκληρωμένου ταμπλό Minesweeper. Το ίδιο το ταμπλό είναι ένα ορθογώνιο που αποτελείται από τετράγωνα που είναι είτε κενά (' ') είτε νάρκες ('*').

Για κάθε κενό τετράγωνο, μέτρησε πόσες νάρκες γειτονεύουν με αυτό (οριζόντια, κάθετα, διαγώνια). Αν το κενό τετράγωνο δεν έχει γειτονικές νάρκες, άφησέ το κενό. Διαφορετικά, αντικατέστησέ το με τον αριθμό των γειτονικών ναρκών.

Για παράδειγμα, μπορεί να λάβεις ένα ταμπλό 5 x 4 σαν αυτό (εδώ τα κενά παριστάνονται με τον χαρακτήρα '·' για να φαίνονται στην οθόνη):

·*·*·
··*··
··*··
·····

Το οποίο ο κώδικάς σου θα πρέπει να μετατρέψει σε αυτό:

1*3*1
13*31
·2*2·
·111·

Υπόδειξη για την απόδοση

Όλα τα δεδομένα εισόδου και εξόδου είναι σε ASCII. Τα String και τα &str της Rust είναι utf8, έτσι, ενώ θα περίμενε κανείς το "Hello".chars() να είναι απλό, στην πραγματικότητα πρέπει να ελέγξει κάθε χαρακτήρα για να δει αν έχει μήκος 1, 2, 3 ή 4 u8. Αν ξέρουμε ότι ένα &str είναι ASCII, τότε μπορούμε να καλέσουμε το .as_bytes() και να αναφερθούμε στα υποκείμενα δεδομένα ως &[u8] (τμήμα byte). Η επανάληψη πάνω από ένα τμήμα byte ASCII είναι πολύ πιο γρήγορη, καθώς δεν εμπλέκονται σημεία κώδικα: κάθε byte ASCII έχει μήκος ένα u8.

Μπορείς να ολοκληρώσεις την πρόκληση χωρίς να κλωνοποιήσεις την είσοδο;

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

Έτοιμος να ξεκινήσεις την άσκηση Ναρκαλιευτής;

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

Αναλυτική ματιά στο Ναρκαλιευτής!

Εξερευνούμε τους εμφωλευμένους βρόχους `for`, την έξυπνη χρήση των min/max για την απλοποίηση του ελέγχου ορίων, τα functional pipelines και τη χρήση δισδιάστατων πινάκων.