Você recebeu uma sacola de Skittles. Todo mundo sabe que, para apreciar mais os diferentes sabores, é preciso alternar entre os sabores.
Fundamentos:
- Você só pode comer 1 pino de cada vez
- A ordem em que você come seus skittles deve ser periódica.
- Cada período não pode conter um sabor específico mais de uma vez.
- Sua mala possui apenas tantos skittles. Você não pode comer mais de um sabor específico de skittle do que aparece na sua bolsa.
- Você quer comer tantos skittles quanto possível (nem sempre é possível)
Exemplos:
Digamos que você comece com 3 skittles vermelhos, 2 azuis e 3 verdes:
R B G R B G R G Invalid: The last R must be followed by a B, not a G
R B G R B G R Valid, but sub-optimal
R R R Valid, but sub-optimal
R G B R G B R G Valid and optimal
G R B G R B G R Also valid and optimal (there are multiple good solutions)
Entrada / Saída
- Você recebe uma lista não vazia de números inteiros positivos para as contagens de cores. (O exemplo acima seria
[3,2,3]
). - Você precisa retornar uma lista contendo pedidos válidos e ideais.
- Em vez de usar cores, você usará os índices da lista de entrada. (O último exemplo de saída acima seria
[2,0,1,2,0,1,2,0]
). - Sua saída pode ser 0 ou 1. Meus exemplos serão indexados em 0
Casos de teste
1 0
4 0 0 0 0
4 1 0 0 0 0
3 1 0 1 0 or 0 0 0
5 2 2 0 1 2 0 1 2 0
2 3 5 2 1 0 2 1 0 2 1 or 1 2 0 1 2 0 1 2
2 4 5 2 1 2 1 2 1 2 1 2
3 4 5 2 1 0 2 1 0 2 1 0 2 1 or 1 2 0 1 2 0 1 2 0 1 2
1 1 1 1 1 6 5 0 1 2 3 4 5 (lots of other solutions)
1 1 1 1 1 8 5 5 5 5 5 5 5 5
2 4 6 8 3 2 1 3 2 1 3 2 1 3 2 1 3 2
Este é um código de golfe , então faça suas soluções o mais curto possível no seu idioma favorito!
Respostas:
JavaScript (ES6),
177175 bytesFormatado e comentado
Fórmula usada
Abaixo está uma tabela mostrando como a fórmula
F(i, j) = minimum(value[j], value[i] + 1)
está funcionando, aqui comi = 0
e a entrada[ 5, 2, 2 ]
.Essa fórmula pode ser interpretada da seguinte maneira: para cada tipo de Skittle, não podemos selecionar mais que o número do tipo menos disponível mais um.
Casos de teste
Mostrar snippet de código
fonte
m
no final dos "loops" são induzidas pelo golfe ou é exatamente como JS é?m=0
aqui é induzido pelo golfe, no entanto, porque eu não me importo com o valor inicial desse loop (ele será sobrescrito de qualquer maneira). Inicializarm
é conveniente.[1,2,3].reduce((x, y) => x+y, 10)
em JS seriareduce(lambda x,y: x+y, [1,2,3], 10)
em Python (eu acho), ambos resultando em16
.Gelatina , 22 bytes
Indexação baseada em 1.
Experimente online!
Quão?
Repete cada prefixo dos índices classificados por valor decrescente mais uma vez do que seria possível com a bolsa de skittles fornecida, remove o skittle ou skittles finais de cada um deles conforme necessário para torná-los viáveis e retorna o com mais skittles .
O número que deve ser removido de uma repetição periódica extra é apenas o número com a contagem mínima nesse prefixo.
fonte
Python3,
174172167 bytesIdéia
Dado, por exemplo, 3 skittles vermelhos, 2 azuis e 3 verdes, é possível organizá-los em uma grade, classificados por cor e quantidade:
Se alguém tentar comer exatamente i skittles, pode-se comer pelo menos i * c skittles no total, onde c é o número de skittles na r-ésima coluna, por exemplo, para i = 2, é possível comer pelo menos 6 skittles.
A única coisa que resta a fazer é contar quantos skittles adicionais podem ser consumidos por um período incompleto.
Golfe
Comentado
Experimente online!
Editar: Substituído
(i+1)
por-~i
para salvar 2 bytes.Edit: -5 bytes graças ao Dead Possum
fonte
sum(1for e in b if e[0]>c)
parasum(c<e[0]for e in b)
. Seria converter Fiel a 1 implicitamente e poupar 5 bytes