Desea crear un tablero de ajedrez cuadrado. Las fichas adyacentes deben alternar en blanco y negro como un tablero de ajedrez estándar, y la esquina inferior izquierda puede ser negra o blanca.
Su programa tomará dos enteros positivos, el número de fichas negras y el número de fichas blancas. Estos siempre serán inferiores a 1024. No tiene que usar todos los mosaicos.
Produzca la longitud máxima del lado de un patrón de tablero de ajedrez que se puede construir usando la cantidad dada de fichas.
Casos de prueba:
12, 15 -> 5
8, 8 -> 4
4, 0 -> 1
Respuestas:
JavaScript (ES7), 30 bytes
Pruébalo en línea!
Dado el número de cuadrados negrossi y el número de cuadrados blancos w , esto calcula:
Incluso para tamañoss , necesitamos s2/ 2 plazas de cada tipo (por ejemplo, para s = 8 : 32 cuadrados negros y 32 cuadrados blancos).
Para tamaños impars , necesitamos ⌊ s2/ 2⌋ cuadrados de un tipo y ⌈ s2/ 2⌉ plazas del otro tipo (por ejemplo, para s = 5 : 12 cuadrados negros y 13 cuadrados blancos, o al revés) . El parámetro k se establece en 1 si m a x ( b , w ) ≥ m i n ( b , w ) + 1 , que representa este cuadrado adicional en un lado.
fuente
Jalea , 6 bytes
Pruébalo en línea!
Un enlace diádico que devuelve el tamaño máximo del tablero.
Conjunto de pruebas para todas las permutaciones de números hasta 20
Explicación
La respuesta de Arnauld tiene una buena explicación de por qué esto funciona; ¡Por favor considera votarlo también!
fuente
Haskell , 35 bytes
Pruébalo en línea!
Explicación
Esta respuesta calcula la siguiente fórmula:
¿Por qué funciona esta fórmula? Bueno, comencemos señalando lo siguiente:
Cada cuadrado de longitud lateral uniforme se puede colocar en mosaico con2 × 1 fichas.
y
Cada cuadro de longitud impar se puede colocar en mosaico, ahorre un solo cuadrado de1 × 1 , por 2 × 1 fichas.
Entonces, tomamos la menor de las dos opciones.
fuente
Ruby , 36 bytes
Pruébalo en línea!
x-~x
es una versión de golf de2*x+1
; estamos restando la negación de dos complementos de x de sí misma. Después de eso, solo uso la fórmula de esta respuesta , pero colapso los dosmin
s anidados en uno, luego uso el formato de cadena para truncar a un entero.fuente
Retina 0.8.2 , 50 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Ordenar los números en orden ascendente. Vamos a llamarlos
l
yh
.Convierte a unario.
Calcular
l + max(h, l + 1)
. Este es el equivalente a2 * min(b, w) + (b != w)
. Vea la respuesta de @ Arnauld para saber por qué esto funciona.Encuentra la raíz cuadrada entera más alta.
fuente
05AB1E ,
87 bytesPruébelo en línea o verifique todos los casos de prueba .
Explicación:
Utiliza una derivada trivial de la fórmula @Arnauld utilizada en su respuesta de JavaScript para guardar un byte:
fuente
Japt , 11 bytes
Solución JS del puerto de Arnauld. Toma la entrada como una matriz.
Intentalo
fuente
R , 32 bytes
Pruébalo en línea!
Toma
b
yw
de stdin.Utiliza la fórmula de esta respuesta , pero aprovechando el comportamiento de
min
tomar el mínimo de todos sus argumentos.fuente
Perl 6 ,
2926 bytesGracias a Jo King por -3 bytes.
Pruébalo en línea!
fuente
[min] @_
puede ser@_.min
y puede mover[!=]
hasta el final para guardar en los corchetes. 26 bytesJapt , 10 bytes
Solución JS del puerto de Arnauld.
Pruébalo en línea!
fuente
12, 12
.