Малоизвестный факт о вампирах заключается в том, что они должны пить кровь жертвы, имеющей совместимую группу донорской крови. Матрица совместимости для вампиров такая же, как и матрица обычных доноров / реципиентов эритроцитов . Это можно суммировать с помощью следующей таблицы Американского Красного Креста.
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-
Вызов
Напишите функцию или программу, которая принимает группу крови в качестве входных данных и выводит два списка:
- неупорядоченный список типов, которые могут получить пожертвование типа ввода
- неупорядоченный список типов, которые могут дать пожертвование типу ввода
Если вы пишете функцию, то, пожалуйста, также предоставьте тестовую программу для вызова этой функции с несколькими примерами, чтобы я мог легко ее протестировать. В этом случае тестовая программа не будет засчитана в ваш счет.
вход
Входными данными должна быть строка, представляющая ровно один из 8 возможных типов эритроцитов O−
O+
A−
A+
B−
B+
AB−
AB+
. Входные данные могут быть переданы с помощью обычных методов (STDIN, аргументы командной строки, аргументы функций и т. Д.).
Если задан какой-либо другой ввод, то программа / функция должна вернуть пустой вывод или выдать ошибку. Обычно строгая проверка ввода не очень хороша в вопросах кода-гольфа , но я чувствовал, что с учетом последствий для жизни и смерти из-за неправильного определения группы крови я должен добавить это правило.
Выход
Результатом будет два читаемых человеком списка групп крови в любом формате, который подходит для вашего языка. В особых случаях, когда один из списка вывода содержит все 8 типов, этот список может быть необязательно заменен одним списком элементов, содержащим everyone
.
Нормальный вывод будет идти в одно из нормальных мест (STDOUT, возврат функции и т. Д.).
Другие правила
- Стандартные лазейки запрещены
- Вы можете использовать любые существующие сторонние библиотеки, которые вам нужны, если они не предназначены для этой цели.
Примеры
- Для ввода
AB-
два списка вывода будут:{AB+, AB-}, {AB-, A-, B-, O-}
- Для ввода
AB+
два списка вывода будут:{AB+}, {O−, O+, A−, A+, B−, B+, AB−, AB+}
или{AB+}, {everyone}
Личное примечание: пожалуйста, рассмотрите возможность сдачи крови, если вы можете. Без переливания, которое я получил несколько лет назад, я мог бы не быть здесь сегодня, поэтому я очень благодарен тем, кто может сделать пожертвование!