Há um tempo, comprei uma nova carteira capaz de conter 8 cartões (4 em ambos os lados). No entanto, pareço ter muito mais cartões do que isso e preciso fazer escolhas sobre quais quero levar comigo. Alguns cartões que uso com mais frequência do que outros, mas os cartões que prefiro levar comigo não são necessariamente os que mais uso.
O desafio
Dada uma pilha de cartões, devolva o layout da minha carteira da melhor maneira possível, usando minhas preferências e restrições. O layout deve ser o seguinte:
__ __ (row 1)
__ __ (row 2)
__ __ (row 3)
__ __ (row 4)
Atualmente, possuo as seguintes cartas - as pilhas sempre consistem em uma seleção destas:
- 1 bilhete de identidade ( ID )
- 1 carteira de motorista ( DL )
- 2 cartões de crédito ( CC )
- 5 cartões de débito ( DC )
- 1 cartão de transporte público ( PC )
- 1 cartão de acesso à academia ( GC )
- 9 cartões de sócio de lojas e armazéns aleatórios ( MC )
Eu tenho algumas preferências e restrições:
- Cartões classificados por prioridade: ID, DL, CC, CC, PC, GC, MC
- Cartões classificados por frequência de uso: CC, CC, PC, GC, MC, ID, DL
- Por razões de segurança, o número total de cartões de débito e cartões de crédito na minha carteira pode ser no máximo 1 a mais do que a soma de todos os outros cartões que estarão na minha carteira ( N DC + N CC ≤ N ID + N DL + N PC + N GC + N MC +1).
- Se presente, meu bilhete de identidade e minha carteira de motorista devem sempre ficar na linha 1. Isso não significa que outros cartões não possam ocupar pontos na linha 1.
- As cartas mais frequentemente usadas da pilha devem sempre ir na linha 4.
Regras
- 2 cartas não podem ocupar o mesmo lugar.
- Os cartões de prioridade mais alta sempre são preferidos aos cartões de prioridade mais baixa, a menos que a restrição DC / CC comece.
- O ID / DL na linha 1 anula a regra de frequência: se apenas o ID for fornecido, ele entrará na linha 1 e a linha 4 ficará vazia!
- A formatação de entrada pode ser feita da maneira que você quiser, desde que a ordem da pilha de entrada seja mantida. por exemplo,
ID,CC,PC,MC,MC,MC,DL
também pode ser fornecido como por exemplo1ID 1CC 1PC 3MC 1DL 0DC 0GC
ouID CC PC MC MC MC DL
. A formatação de saída tem algumas restrições: todas as linhas devem começar em uma nova linha, as colunas devem ser delimitadas de alguma forma. Pontos vazios podem ser apresentados da maneira que você quiser, desde que não atrapalhe o layout 4x2.
Pode haver mais de uma solução / pedido, depende de você qual você fornece como saída.
- Você pode presumir que cartões do mesmo tipo sempre serão agrupados na entrada.
- Além do acima, aplicam -se regras e lacunas de código-golfe padrão .
Bônus
Você tem permissão para remover 15% do seu número de bytes, se você também devolver todos os cartões que não foram para a carteira. Imprimir "Cabe!" no caso de não haver cartões restantes. Essa saída adicional deve ser claramente separada do layout do retorno.
Exemplos
Entrada:
ID, DL, CC, GC, MC
2 saídas possíveis:
ID DL DL ID
__ __ or __ MC
MC __ __ __
CC GC GC CC
optional: It fits!
Entrada:
ID, CC, DC, PC, GC, MC, MC, MC, MC, MC
2 saídas possíveis:
ID MC GC ID
MC MC or MC PC
PC GC MC MC
CC DC DC CC
optional: e.g. (MC, MC) or (2MC)
Entrada:
DC, DC, CC, CC, GC, DL
2 saídas possíveis:
DL __ GC DL
__ __ or DC __
GC DC __ __
CC CC CC CC
optional: e.g. (DC) or (1DC)
Entrada:
CC, DC, DC, DC
2 saídas possíveis:
__ __ __ __
__ __ or __ __
__ __ __ __
CC __ __ CC
optional: e.g. (DC, DC, DC) or (3DC)
Entrada:
CC, CC, MC, MC, MC, MC, MC, MC, PC, DC, DC, DC, DC, DC, GC
2 saídas possíveis:
MC MC MC DC
PC GC or DC GC
DC DC PC MC
CC CC CC CC
optional: e.g. (DC, DC, DC, MC, MC, MC, MC) or (3DC, 4MC)
Entrada:
MC, MC, MC, MC, MC, MC, MC
2 saídas possíveis:
__ MC MC MC
MC MC or MC MC
MC MC MC __
MC MC MC MC
optional: It fits!
Entrada:
ID, CC
2 saídas possíveis:
ID __ __ ID
__ __ or __ __
__ __ __ __
CC __ CC __
optional: It fits!
Isso é código-golfe , então o código mais curto (em bytes) vence.