Determina se un triangolo è equilateral, isosceles o scalene.
Un triangolo equilateral ha tutti e tre i lati della stessa lunghezza.
Un triangolo isosceles ha almeno due lati della stessa lunghezza. (A volte viene definito come un triangolo con esattamente due lati della stessa lunghezza, ma ai fini di questo esercizio diciamo almeno due.)
Un triangolo scalene ha tutti i lati di lunghezze diverse.
Perché una figura sia un triangolo, tutti i lati devono avere lunghezza > 0, e la somma delle lunghezze di due lati qualsiasi deve essere maggiore o uguale alla lunghezza del terzo lato.
I triangoli degeneri sono triangoli in cui la somma della lunghezza di due lati è uguale alla lunghezza del terzo lato, ad esempio 1, 1, 2.
Abbiamo scelto di non includere test per i triangoli degeneri in questo esercizio.
Puoi gestire queste situazioni se lo desideri, oppure ignorarle tranquillamente.
In formule:
Siano a, b e c i lati del triangolo.
Allora tutte e tre le seguenti espressioni devono essere vere:
a + b ≥ c
b + c ≥ a
a + c ≥ b
Vedi la disuguaglianza triangolare
L'implementazione può assumere molte forme. Ecco alcuni argomenti che potrebbero aiutarti, a seconda dell'approccio che scegli.
O magari ti verrà in mente un approccio che non usa nessuno di questi!
L'esercizio di base verifica l'identificazione dei triangoli i cui lati sono tutti numeri interi. Tuttavia, alcuni triangoli non possono essere rappresentati da puri numeri interi. Un esempio semplice è un triangolo con un angolo di 90 gradi tra due lati uguali di lunghezza 1. Il suo terzo lato ha lunghezza pari alla radice quadrata di 2, che è un numero irrazionale (cioè non può essere scritto né come numero intero né come frazione).
Riscrivere le funzioni di analisi per gestire sia i casi con numeri interi sia quelli in virgola mobile sarebbe noioso, e lo sarebbe ancora di più per tutti i possibili tipi interi e in virgola mobile: considerando le varianti con segno e senza segno per ampiezze di 8, 16, 32, 64 e 128 bit, si tratterebbe di 10 reimplementazioni di un codice fondamentalmente identico, ancora prima di considerare i numeri in virgola mobile!
C'è un modo migliore: i generics. Riscrivendo Triangle come Triangle<T>, puoi scrivere il codice una volta sola e affidare al compilatore il lavoro di generare tutte quelle specializzazioni. Nota che, per usare operazioni matematiche, dovrai vincolare il tipo generico ai tipi che supportano quelle operazioni tramite i trait.
Ci sono dei test bonus che puoi eseguire per mettere alla prova l'implementazione con numeri in virgola mobile. Per abilitarli, esegui i test con il feature flag generic, in questo modo:
cargo test --features generic
Iscriviti a Exercism per imparare e padroneggiare Rust con 99 esercizi e il mentoring di persone reali, tutto gratis.