Introducción:
(Fuente: Wikipedia )
Cuando miramos un arco iris siempre tendrá los colores de arriba a abajo:
rojo; naranja; amarillo; verde; azul; índigo; Violeta
Si observamos estos anillos individuales, el anillo rojo es, por supuesto, más grande que el anillo violeta.
Además, también es posible tener dos o incluso tres arcoíris al mismo tiempo.
Todo lo anterior combinado se usará en este desafío:
Desafío:
Dada una lista de enteros de exactamente el tamaño 7, donde cada valor indica las partículas de color disponibles para formar arcoíris (donde el índice más grande indica rojo y el índice más pequeño indica violeta), genera la cantidad de arcoíris que se puede formar.
Un solo arco iris entero debe tener al menos 3x violeta, 4x índigo, 5x azul, 6x verde, 7x amarillo, 8x naranja, 9x rojo. Un segundo arco iris encima será aún más grande que el anillo rojo del primer arco iris (incluido un espacio entre ellos), por lo que necesitará al menos 11x violeta, 12x índigo, 13x azul, 14x verde, 15x amarillo, 16x naranja , 17x rojo además de lo que usa el primer arcoíris. El tercer arcoíris comenzará en 19x violeta nuevamente.
Ejemplo:
Lista de entrada: [15,20,18,33,24,29,41]
Salida:2
¿Por qué? Tenemos 15x violeta, y necesitamos al menos 3 + 11 = 14 para dos arcoiris. Tenemos 20 índigo y necesitamos al menos 4 + 12 = 16 para dos arcoíris. Etc. Tenemos suficientes colores para dos arcoíris, pero no suficientes para formar tres arcoíris, por lo que la salida es 2
.
Reglas de desafío:
- Se garantiza que los enteros en la matriz de entrada no son negativos (
>= 0
). - Se garantiza que la lista de entrada será de tamaño 7 exactamente.
- Cuando no se pueden formar arcoíris, salimos
0
. - El formato de entrada y salida es flexible. Puede ser una lista o conjunto de enteros de decimales, puede tomarse de STDIN. La salida puede ser un retorno de una función en cualquier tipo de salida razonable, o imprimirse directamente en STDOUT.
Cantidad mínima de colores necesarios para la n
cantidad 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...
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, se recomienda agregar una explicación para su respuesta.
Casos de prueba:
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
embargo, el caso límite :( (no encaja con la lógica de 1 espacio)Respuestas:
Pyth , 14 bytes
¡Banco de pruebas!
¿Cómo?
Algortihm
En primer lugar, derivemos la fórmula en la que se basa esta respuesta. Llamemos a la función que da la cantidad necesaria de partículas de color , donde es el número de capas e es el índice del color, basado en 0. Primero, notamos que solo para la capa (donde está indexada en 1, en este caso), necesitamos partículas de color . Teniendo esto en cuenta, sumamos los resultados de cada para cada capa :C( n , i ) norte yo norteth norte L ( n , i ) = i + 3 + 8 ( n - 1 ) L ( k , i ) k
Por lo tanto, ahora sabemos que el número máximo de capas posibles, , debe satisfacer la desigualdad , donde es el elemento de la lista de entrada.C ( k , i ) ≤ I i I i i thk C( k , i ) ≤ Iyo yoyo yoth
Implementación
.e
fuente
Python 2 ,
6461 bytesPruébalo en línea!
Cada color del arco iris se usa
(3+i)+n*8
para la capan
y el colori
(0 = violeta, etc.)Por consiguiente, el total de capas x es:
(3*i)*x + 8*x*(x+1)
.Simplemente resolvemos para n, y tomamos el valor mínimo.
Salvado:
fuente
05AB1E ,
181716 bytes-1 byte gracias a Magic Octopus Urn
Pruébalo en línea!
La cantidad de color necesaria para n arcoiris es n (4n + [-1, 0, 1, 2, 3, 4, 5]) .
fuente
[ND4*6Ý<+*¹›1å#N
funciona pero no sé por qué. -1 byte sin embargo.N>
porque ya lo habías hecho¾>
antes.JavaScript (ES6), 49 bytes
Pruébalo en línea!
¿Cómo?
Pero para propósitos de golf, comenzamos con
n === undefined
y usamos valores negativos den
después. La primera iteración siempre es exitosa porque el lado derecho de la desigualdad se evalúa comoNaN
. Por lo tanto, la primera prueba significativa es la segunda conn == -1
.fuente
Jalea , 18 bytes
Pruébalo en línea!
Utiliza la explicación en la respuesta 05AB1E de Okx.
fuente
Excel VBA, 78 bytes
Función anónima que toma entrada del rango de
[A1:G1]
y salidas a la ventana inmediata de VBE.fuente
Carbón de leña , 21 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación: Calcula directamente el número de arcoíris posibles con cada color con una fórmula que obtuve de forma independiente, pero resulta ser la misma que la fórmula de @ TField.
fuente
JavaScript (Node.js) , 54 bytes
Puerto de respuesta @TFeld
Pruébalo en línea!
fuente
Jalea , 14 bytes
Esto fue dificil!
Un enlace monádico que acepta una lista de siete enteros que produce un número entero, el número de arcoíris posibles.
Pruébalo en línea! O vea el conjunto de pruebas .
¿Cómo?
Desafortunadamente, cualquier método ingenuo parece tomar 16 bytes, uno de esos métodos es
Ṃɓ_J×¥H÷‘H<¬Ȧð€S
, sin embargo, resulta que el método utilizado aquí es mucho más eficiente y más corto.Este método crea más que suficientes pilas de arcoíris como recuento de partículas, incluidas las bandas ultravioleta , y suma 1 para cada pila que sea posible.
La prueba para que sea posible es verificar que solo haya una sola banda NO posible dado que necesitamos algunas partículas de banda ultravioleta pero se nos proporcionó cero.
fuente
§ỊS
!05AB1E , 14 bytes
Pruébalo en línea!
Algoritmo de Pyth ⟶ 05AB1E Algoritmo
Hay muchos métodos que uno puede probar para resolver este desafío en 05AB1E, así que probé un par de ellos y resultó ser el más corto. Adaptando la fórmula mencionada anteriormente de mi respuesta de Pyth, teniendo en cuenta que 05AB1E usó la indexación 1, podemos construir nuestra función de la siguiente manera:
Tenga en cuenta que esta igualdad no es precisa (pero actualmente no conozco una manera de establecer esto más formalmente) y que las soluciones a esta ecuación producirán números de punto flotante, pero lo arreglamos usando la división de piso en lugar de la división precisa mas tarde. De todos modos, para continuar con nuestro argumento, la mayoría de ustedes probablemente estén muy familiarizados con las soluciones de tal ecuación , así que aquí lo tenemos:
Cuál es exactamente la relación que implementa esta respuesta.
fuente
C ++,
127125bytesAfeitado 2 bytes gracias a Kevin Cruijssen.
Pruébalo en línea!
La función toma una matriz de estilo de C de siete entradas y devuelve un int.
Explicación:
fuente
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 esto:for(int c=0,q;c<7;c++,o=o>q?q:o)q=(std::sqrt(--c*c-c+16*x[++c]))/8;
. Además, ¿podría proporcionar un enlace TIO con código de prueba?