Mało znanym faktem na temat wampirów jest to, że muszą pić krew ofiary, która ma zgodną grupę krwi dawcy. Matryca zgodności dla wampirów jest taka sama jak zwykła matryca dawcy / biorcy krwinek czerwonych . Można to podsumować poniższą tabelą Amerykańskiego Czerwonego Krzyża
Type You Can Give Blood To You Can Receive Blood From
A+ A+, AB+ A+, A-, O+, O-
O+ O+, A+, B+,AB+ O+, O-
B+ B+, AB+ 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-
Wyzwanie
Napisz funkcję lub program, który pobiera grupę krwi jako dane wejściowe i wyświetla dwie listy:
- nieuporządkowana lista typów, które mogą otrzymać darowiznę typu wejściowego
- nieuporządkowana lista typów, które mogą dawać darowiznę na typ wejściowy
Jeśli piszesz funkcję, podaj również program testowy, aby wywołać tę funkcję z kilkoma przykładami, dzięki czemu mogę ją łatwo przetestować. W takim przypadku program testowy nie wlicza się do wyniku.
Wkład
Dane wejściowe muszą być ciągiem reprezentującym dokładnie jeden z 8 możliwych rodzajów krwinek czerwonych O−
O+
A−
A+
B−
B+
AB−
AB+
. Dane wejściowe można podawać zwykłymi metodami (STDIN, argumenty wiersza poleceń, argumenty funkcji itp.).
Jeśli podano inne dane, program / funkcja musi zwrócić puste wyjście lub zgłosić błąd. Zwykle ścisłe sprawdzanie danych wejściowych nie jest świetne w przypadku pytań do golfa , ale czułem, że biorąc pod uwagę konsekwencje śmierci w wyniku pomyłki grup krwi, powinienem dodać tę zasadę.
Wydajność
Wynikiem będą dwie czytelne dla człowieka listy grup krwi w dowolnym formacie odpowiednim dla twojego języka. W szczególnych przypadkach, gdy jedna z list wyników zawiera wszystkie 8 typów, tę listę można opcjonalnie zastąpić pojedynczą listą pozycji zawierającą everyone
.
Normalne wyjście trafi do jednego z normalnych miejsc (STDOUT, powrót funkcji itp.).
Inne zasady
- Standardowe luki są zabronione
- Możesz korzystać z wszelkich istniejących bibliotek stron trzecich, których potrzebujesz, o ile nie są one specjalnie zaprojektowane do tego celu.
Przykłady
- W przypadku danych wejściowych
AB-
dwie listy wyjściowe będą następujące:{AB+, AB-}, {AB-, A-, B-, O-}
- W przypadku danych wejściowych
AB+
dwie listy wyjściowe to:{AB+}, {O−, O+, A−, A+, B−, B+, AB−, AB+}
lub{AB+}, {everyone}
Notatka osobista: Jeśli to możliwe, rozważ oddanie krwi. Bez transfuzji, którą otrzymałem kilka lat temu, być może nie byłoby mnie dzisiaj, więc jestem bardzo wdzięczny tym, którzy są w stanie przekazać darowiznę!