Um fato pouco conhecido sobre os vampiros é que eles devem beber o sangue da vítima que possui um tipo de sangue compatível de doador. A matriz de compatibilidade para vampiros é a mesma que a matriz doadora / receptora regular de glóbulos vermelhos . Isso pode ser resumido na seguinte tabela da Cruz Vermelha Americana
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-
Desafio
Escreva uma função ou programa que use um tipo de sangue como entrada e produz duas listas:
- a lista não ordenada de tipos que podem receber doação do tipo de entrada
- a lista não ordenada de tipos que podem doar para o tipo de entrada
Se você escrever uma função, forneça também um programa de teste para chamar essa função com alguns exemplos, para que eu possa testá-la facilmente. Nesse caso, o programa de teste não conta para a sua pontuação.
Entrada
A entrada deve ser uma sequência que represente exatamente um dos 8 tipos possíveis de glóbulos vermelhos O−
O+
A−
A+
B−
B+
AB−
AB+
. A entrada pode ser fornecida pelos métodos normais (STDIN, argumentos da linha de comando, argumentos da função, etc.).
Se qualquer outra entrada for fornecida, o programa / função deve retornar uma saída vazia ou gerar um erro. Normalmente, a verificação estrita de entradas não é boa em questões de código-golfe , mas, considerando as implicações de morte ou morte por erro no tipo sanguíneo, devo adicionar essa regra.
Saída
A saída será duas listas de tipos sanguíneos legíveis por humanos, em qualquer formato adequado ao seu idioma. Nos casos especiais em que uma das listas de saída contém todos os 8 tipos, essa lista pode opcionalmente ser substituída por uma única lista de itens everyone
.
A saída normal irá para um dos locais normais (STDOUT, retorno de função, etc.).
Outras regras
- As brechas padrão são proibidas
- Você pode usar as bibliotecas de terceiros pré-existentes necessárias, desde que elas não sejam projetadas explicitamente para esse fim.
Exemplos
- Para entrada
AB-
, as duas listas de saída seriam:{AB+, AB-}, {AB-, A-, B-, O-}
- Para entrada
AB+
, as duas listas de saída seriam:{AB+}, {O−, O+, A−, A+, B−, B+, AB−, AB+}
ou{AB+}, {everyone}
Nota pessoal: considere doar sangue, se puder. Sem a transfusão que recebi há alguns anos, talvez eu não esteja aqui hoje, então sinto-me muito grata por aqueles que podem doar!