Introdução:
(Fonte: Wikipedia )
Quando olhamos para um arco-íris, ele sempre terá as cores de cima para baixo:
vermelho; laranja; amarelo; verde; azul; índigo; tolet
Se olharmos para esses anéis individuais, é claro que o anel vermelho é maior que o anel violeta.
Além disso, também é possível ter dois ou até três arco-íris ao mesmo tempo.
Tudo isso combinado acima será usado neste desafio:
Desafio:
Dada uma lista de números inteiros exatamente do tamanho 7, em que cada valor indica as partículas de cores disponíveis para formar arco-íris (onde o maior índice indica vermelho e o menor índice indica violeta), produz a quantidade de arco-íris que pode ser formada.
Um único arco-íris inteiro precisa ter pelo menos 3x violeta, 4x índigo, 5x azul, 6x verde, 7x amarelo, 8x laranja, 9x vermelho. Um segundo arco-íris em cima dele será ainda maior que o anel vermelho do primeiro arco-íris (incluindo um espaço entre eles), portanto precisará de pelo menos 11x violeta, 12x índigo, 13x azul, 14x verde, 15x amarelo, 16x laranja , 17x vermelho, além do que o primeiro arco-íris usa. O terceiro arco-íris começará novamente em 19x violeta.
Exemplo:
Lista de entradas: [15,20,18,33,24,29,41]
Saída:2
Por quê? Temos 15x violeta e precisamos de pelo menos 3 + 11 = 14 para dois arco-íris. Temos 20 índigo e precisamos de pelo menos 4 + 12 = 16 para dois arco-íris. Etc. Temos cores suficientes para dois arco-íris, mas não o suficiente para formar três arco-íris, então a saída é 2
.
Regras do desafio:
- Os números inteiros na matriz de entrada são garantidos como não negativos (
>= 0
). - A lista de entrada é garantidamente do tamanho 7 exatamente.
- Quando nenhum arco-íris pode ser formado, produzimos
0
. - O formato de entrada e saída é flexível. Pode ser uma lista ou matriz de números inteiros decimais, pode ser obtida em STDIN. A saída pode ser um retorno de uma função em qualquer tipo de saída razoável ou impressa diretamente no STDOUT.
Quantidade mínima de cores necessária para a n
quantidade de arco-íris:
Amount of Rainbows Minimum amount per color
0 [0,0,0,0,0,0,0]
1 [3,4,5,6,7,8,9]
2 [14,16,18,20,22,24,26]
3 [33,36,39,42,45,48,51]
4 [60,64,68,72,76,80,84]
5 [95,100,105,110,115,120,125]
etc...
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
Input: [15,20,18,33,24,29,41]
Output: 2
Input: [3,4,5,6,7,8,9]
Output: 1
Input: [9,8,7,6,5,4,3]
Output: 0
Input: [100,100,100,100,100,100,100]
Output: 4
Input: [53,58,90,42,111,57,66]
Output: 3
Input: [0,0,0,0,0,0,0]
Output: 0
Input: [95,100,105,110,115,120,125]
Output: 5
Input: [39525,41278,39333,44444,39502,39599,39699]
Output: 98
0,0,0,0,0,0,0
ponta-caso, porém :( (que não se encaixa com a lógica 1-gap)Respostas:
Pitão , 14 bytes
Suíte de teste!
Quão?
Algortihm
Primeiro, vamos derivar a fórmula em que esta resposta se baseia. Vamos chamar a função que fornece a quantidade necessária de partículas de cor , onde é o número de camadas e é o índice da cor, com base em 0. Primeiro, observamos que somente para a camada (onde é indexado 1, neste caso), precisamos de partículas de cor . Tendo isso em mente, somamos os resultados de cada para cada camada :C( n , i ) n Eu nº n L ( n , i ) = i + 3 + 8 ( n - 1 ) L ( k , i ) k
Portanto, sabemos agora que o número máximo de camadas possíveis, chamado , deve satisfazer a desigualdade , onde é o elemento da lista de entrada.k C( k , i ) ≤ IEu EuEu Euº
Implementação
Isso implementa a função e itera ( ) sobre a lista de entrada, com sendo o índice (baseado em 0) sendo o elemento. Para cada valor, o programa pesquisa o primeiro número inteiro positivo pelo qual (a negação lógica de , a condição que deduzimos anteriormente), depois encontra o resultado mínimo e diminui. Desta forma, em vez de procurar o maior número inteiro que faz satisfazer uma condição, buscamos o menor que não e um subtrair para compensar o deslocamento de 1.k b T b < C ( T , i ) C ( T , i ) ≤ bC k b T b<C(T,i) C(T,i)≤b
.e
fonte
Python 2 ,
6461 bytesExperimente online!
Cada cor do arco-íris usa
(3+i)+n*8
para camadan
e cori
(0 = violeta etc.)O total de x camadas é, por conseguinte,:
(3*i)*x + 8*x*(x+1)
.Simplesmente resolvemos n e assumimos o valor mínimo.
Salvou:
fonte
05AB1E ,
181716 bytes-1 byte graças a Magic Octopus Urn
Experimente online!
A quantidade de cor necessária para n arco-íris é n (4n + [-1, 0, 1, 2, 3, 4, 5]) .
fonte
[ND4*6Ý<+*¹›1å#N
funciona, mas não sei por quê. -1 byte embora.N>
isso-- porque você tinha¾>
antes.JavaScript (ES6), 49 bytes
Experimente online!
Quão?
Mas, para fins de golfe, começamos
n === undefined
e depois usamos valores negativosn
. A primeira iteração sempre é bem-sucedida porque o lado direito da desigualdade é avaliadoNaN
. Portanto, o primeiro teste significativo é o segundo comn == -1
.fonte
Gelatina , 18 bytes
Experimente online!
Usa a explicação na resposta 05AB1E da Okx.
fonte
Excel VBA, 78 bytes
Função anônima que recebe entradas do intervalo
[A1:G1]
e saídas para a janela imediata do VBE.fonte
Carvão , 21 bytes
Experimente online! Link é a versão detalhada do código. Explicação: Calcula diretamente o número de arco-íris possível com cada cor com uma fórmula derivada independentemente, mas é a mesma que a fórmula de @ TField.
fonte
JavaScript (Node.js) , 54 bytes
Porto da resposta @TFeld
Experimente online!
fonte
Gelatina , 14 bytes
Isso foi difícil!
Um link monádico que aceita uma lista de sete números inteiros que produz um número inteiro, o número de arco-íris possível.
Experimente online! Ou veja a suíte de testes .
Quão?
Infelizmente, qualquer método ingênuo parece ter 16 bytes, um deles é
Ṃɓ_J×¥H÷‘H<¬Ȧð€S
, no entanto, o método usado aqui é muito mais eficiente e também mais curto!Este método constrói pilhas arco-íris mais do que suficientes conforme a contagem de partículas, incluindo faixas ultravioletas , e soma 1 para cada pilha possível.
O teste para que isso seja possível é verificar se existe apenas uma única banda, NÃO é possível, pois precisamos de algumas partículas da banda ultravioleta, mas recebemos zero.
fonte
§ỊS
!05AB1E , 14 bytes
Experimente online!
Algoritmo de Pyth ⟶ 05AB1E Algoritmo
Existem muitos métodos que se pode tentar resolver esse desafio no 05AB1E, então tentei alguns deles e esse acabou sendo o mais curto. Adaptando a fórmula acima mencionada da minha resposta Pyth, tendo em mente que 05AB1E usou a indexação 1, podemos construir nossa função da seguinte maneira:
Observe que essa igualdade não é precisa (mas atualmente não sei como declarar isso formalmente) e que as soluções para essa equação produzirão números de ponto flutuante, mas corrigimos isso usando a divisão do piso em vez da divisão precisa mais tarde. De qualquer forma, para continuar com o nosso argumento, a maioria de vocês provavelmente está muito familiarizada com as soluções de uma equação , então aqui temos:
Qual é exatamente a relação que essa resposta implementa.
fonte
C ++,
127125 bytesRaspou 2 bytes graças a Kevin Cruijssen.
Experimente online!
A função pega uma matriz de sete polegadas no estilo C e retorna um int.
Explicação:
fonte
for(int c=0;c<7;c++){int q=c-1;q=(std::sqrt(q*q+16*x[c])-q)/8;o=o>q?q:o;}
a isto:for(int c=0,q;c<7;c++,o=o>q?q:o)q=(std::sqrt(--c*c-c+16*x[++c]))/8;
. Além disso, você poderia fornecer um link TIO com código de teste?