Προσδιόρισε αν ένα τρίγωνο είναι ισόπλευρο, ισοσκελές ή σκαληνό.
Ένα ισόπλευρο τρίγωνο έχει και τις τρεις πλευρές του ίδιου μήκους.
Ένα ισοσκελές τρίγωνο έχει τουλάχιστον δύο πλευρές του ίδιου μήκους. (Κάποιες φορές ορίζεται ως το τρίγωνο που έχει ακριβώς δύο πλευρές του ίδιου μήκους, αλλά για τους σκοπούς αυτής της άσκησης θα πούμε τουλάχιστον δύο.)
Ένα σκαληνό τρίγωνο έχει όλες τις πλευρές του διαφορετικού μήκους.
Για να είναι ένα σχήμα τρίγωνο, όλες οι πλευρές πρέπει να έχουν μήκος > 0, και το άθροισμα των μηκών οποιωνδήποτε δύο πλευρών πρέπει να είναι μεγαλύτερο ή ίσο με το μήκος της τρίτης πλευράς.
Τα εκφυλισμένα τρίγωνα είναι τρίγωνα όπου το άθροισμα του μήκους δύο πλευρών είναι ίσο με το μήκος της τρίτης πλευράς, π.χ. 1, 1, 2.
Επιλέξαμε να μην συμπεριλάβουμε tests για εκφυλισμένα τρίγωνα σε αυτή την άσκηση.
Μπορείς να χειριστείς αυτές τις περιπτώσεις αν το θέλεις, ή να τις αγνοήσεις με ασφάλεια.
Στις εξισώσεις:
Έστω a, b και c οι πλευρές του τριγώνου.
Τότε και οι τρεις παρακάτω παραστάσεις πρέπει να είναι αληθείς:
a + b ≥ c
b + c ≥ a
a + c ≥ b
Δες την τριγωνική ανισότητα
Η υλοποίηση αυτού μπορεί να πάρει πολλές μορφές. Να μερικά θέματα που μπορεί να σε βοηθήσουν, ανάλογα με την προσέγγιση που θα ακολουθήσεις.
Ή μπορεί να σκεφτείς μια προσέγγιση που δεν χρησιμοποιεί κανένα από αυτά!
Η βασική άσκηση ελέγχει την αναγνώριση τριγώνων των οποίων όλες οι πλευρές είναι ακέραιοι. Ωστόσο, μερικά τρίγωνα δεν μπορούν να αναπαρασταθούν με ακέραιους αριθμούς. Ένα απλό παράδειγμα είναι ένα τρίγωνο με γωνία 90 μοιρών ανάμεσα σε δύο ίσες πλευρές μήκους 1. Η τρίτη του πλευρά έχει μήκος την τετραγωνική ρίζα του 2, που είναι άρρητος αριθμός (δηλαδή δεν μπορεί να γραφτεί ως ακέραιος ή ως κλάσμα).
Θα ήταν κουραστικό να ξαναγράψεις τις συναρτήσεις ανάλυσης ώστε να χειρίζονται και τις ακέραιες και τις κινητής υποδιαστολής περιπτώσεις, και ιδιαίτερα κουραστικό να το κάνεις για όλους τους πιθανούς ακέραιους και κινητής υποδιαστολής τύπους: με τις προσημασμένες και τις απρόσημες παραλλαγές πλάτους 8, 16, 32, 64 και 128 bit, αυτό θα ήταν 10 επανυλοποιήσεις του κατά βάση ίδιου κώδικα, πριν καν λάβεις υπόψη τους αριθμούς κινητής υποδιαστολής!
Υπάρχει καλύτερος τρόπος: generics. Αν ξαναγράψεις το Triangle σου ως Triangle<T>, μπορείς να γράψεις τον κώδικά σου μία φορά και να αφήσεις τη δουλειά της δημιουργίας όλων αυτών των ειδικεύσεων στον μεταγλωττιστή. Σημείωσε ότι για να χρησιμοποιήσεις μαθηματικές πράξεις, θα χρειαστεί να περιορίσεις τον γενικό τύπο σου σε τύπους που υποστηρίζουν αυτές τις πράξεις, χρησιμοποιώντας traits.
Υπάρχουν και μερικά επιπλέον tests που μπορείς να τρέξεις, τα οποία ελέγχουν την υλοποίησή σου σε αριθμούς κινητής υποδιαστολής. Για να τα ενεργοποιήσεις, τρέξε τα tests σου με το feature flag generic, έτσι:
cargo test --features generic
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Rust με 99 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.