mirror of https://github.com/01-edu/public.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.5 KiB
93 lines
2.5 KiB
4 years ago
|
## blood_types_s
|
||
|
|
||
|
### Instructions
|
||
|
|
||
|
Use the following table to define the methods asked:
|
||
|
|
||
|
| Blood Types | Donate Blood to | Receive Blood From |
|
||
|
|-------------|------------------|--------------------|
|
||
|
| A+ | A+, AB+ | A+, A-, O+, O- |
|
||
|
| O+ | O+, A+, B+, AB+ | O+, O- |
|
||
|
| B+ | O+, O- | B+, B-, O+, O- |
|
||
|
| AB+ | AB+ | Everyone |
|
||
|
| A- | A+, A-, AB+, AB- | A-, O- |
|
||
|
| O- | Everyone | O- |
|
||
|
| B- | B+, B-, AB+, AB- | B-, O- |
|
||
|
| AB- | AB+, AB- | AB-, A-, B-, O- |
|
||
|
|
||
|
Write three methods for BloodType:
|
||
|
|
||
|
- `can_receive_from`: which returns true if `self` can receive blood from `other` blood type
|
||
|
- `donors`: which returns all the blood types that can give blood to `self`
|
||
|
- `recipients`: which returns all the blood types that can receive blood from `self`
|
||
|
|
||
|
### Expected Functions and Structures
|
||
|
|
||
|
```rust
|
||
|
#[derive(Debug, PartialEq, Eq, Clone, PartialOrd, Ord)]
|
||
|
pub enum Antigen {
|
||
|
A,
|
||
|
AB,
|
||
|
B,
|
||
|
O,
|
||
|
}
|
||
|
|
||
|
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone)]
|
||
|
enum RhFactor {
|
||
|
Positive,
|
||
|
Negative,
|
||
|
}
|
||
|
|
||
|
#[derive(PartialEq, Eq, PartialOrd, Ord, Clone)]
|
||
|
pub struct BloodType {
|
||
|
pub antigen: Antigen,
|
||
|
pub rh_factor: RhFactor,
|
||
|
}
|
||
|
|
||
|
impl BloodType {
|
||
|
pub fn can_receive_from(&self, other: &Self) -> bool {
|
||
|
}
|
||
|
|
||
|
pub fn donors(&self) -> Vec<Self> {
|
||
|
}
|
||
|
|
||
|
pub fn recipients(&self) -> Vec<Self> {
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Usage
|
||
|
|
||
|
Here is a program to test your function.
|
||
|
|
||
|
```rust
|
||
|
use blood_types_s::{Antigen, BloodType, RhFactor};
|
||
|
|
||
|
fn main() {
|
||
|
let blood_type = BloodType {
|
||
|
antigen: Antigen::O,
|
||
|
rh_factor: RhFactor::Positive,
|
||
|
};
|
||
|
println!("recipients of O+ {:?}", blood_type.recipients());
|
||
|
println!("donors of O+ {:?}", blood_type.donors());
|
||
|
let another_blood_type = BloodType {
|
||
|
antigen: Antigen::O,
|
||
|
rh_factor: RhFactor::Positive,
|
||
|
};
|
||
|
println!(
|
||
|
"donors of O+ can receive from {:?} {:?}",
|
||
|
&another_blood_type,
|
||
|
blood_type.can_receive_from(&another_blood_type)
|
||
|
);
|
||
|
}
|
||
|
```
|
||
|
|
||
|
And its output
|
||
|
|
||
|
```console
|
||
|
student@ubuntu:~/[[ROOT]]/test$ cargo run
|
||
|
recipients of O+ [BloodType { antigen: AB, rh_factor: Positive }, BloodType { antigen: O, rh_factor: Positive }, BloodType { antigen: A, rh_factor: Positive }, BloodType { antigen: B, rh_factor: Positive }]
|
||
|
donors of O+ [BloodType { antigen: O, rh_factor: Positive }, BloodType { antigen: O, rh_factor: Negative }]
|
||
|
donors of O+ can receive from BloodType { antigen: O, rh_factor: Positive } true
|
||
|
student@ubuntu:~/[[ROOT]]/test$
|
||
|
```
|