Você deseja criar um tabuleiro de xadrez quadrado. Os ladrilhos adjacentes devem alternar preto e branco como um tabuleiro de xadrez padrão, e o canto inferior esquerdo pode ser preto ou branco.
Seu programa terá dois números inteiros positivos, o número de preto e o número de ladrilhos brancos. Eles sempre serão menores que 1024. Você não precisa usar todos os blocos.
Saída do comprimento lateral máximo de um padrão de tabuleiro de xadrez que pode ser construído usando a quantidade fornecida de peças.
Casos de teste:
12, 15 -> 5
8, 8 -> 4
4, 0 -> 1
Respostas:
JavaScript (ES7), 30 bytes
Experimente online!
Dado o número de quadrados pretosb o número de quadrados brancos W , isso calcula:
Porque até tamanhoss , precisamos s2/ 2 quadrados de cada tipo (por exemplo, para s = 8 : 32. quadrados pretos e 32. quadrados brancos).
Por estranho tamanhoss , precisamos ⌊ s2/ 2⌋ quadrados de um tipo e ⌈ s2/ 2⌉ quadrados de outro tipo (por exemplo, para s = 5 : 12 quadrados pretos e 13 quadrados brancos, ou o inverso) . O parâmetro k é definido como 1 se m a x ( b , w ) ≥ m i n ( b , w ) + 1 , que representa esse quadrado extra de um lado.
fonte
Gelatina , 6 bytes
Experimente online!
Um link diádico que retorna o tamanho máximo da placa.
Conjunto de testes para todas as permutações de números até 20
Explicação
A resposta de Arnauld tem uma boa explicação para por que isso funciona; por favor, considere votá-lo também!
fonte
Haskell , 35 bytes
Experimente online!
Explicação
Esta resposta calcula a seguinte fórmula:
Por que essa fórmula funciona? Bem, vamos começar observando o seguinte:
Cada quadrado de comprimento lateral uniforme pode ser revestido por ladrilhos2 × 1 .
e
Cada quadrado de comprimento ímpar pode ser telhado, sobressalente um único1 × 1 quadrado, por 2 × 1 telhas.
Agora, observamos que, se colocarmos esses ladrilhos2 × 1 em um tabuleiro de xadrez, cada um ficaria no topo de um quadrado preto e no quadrado branco. Portanto, se fizermos um tabuleiro de xadrez uniforme, cada ladrilho precisa ter um par da outra cor, e se fizermos um tabuleiro de xadrez ímpar para cada ladrilho, mas um precisará de um par da outra cor. Isso nos diz que a resposta nunca é superior a ⌊ 2 min ( a , b ) + 1------------√⌋ . 2 min ( a , b ) é o número máximo de pares que podemos fazer e a+ 1 é a última quadrado que does not' precisa de um par. O problema é que, sea = b , não teremos o quadrado extra para o caso ímpar. Então, adicionamos outra condição: Nosso resultado não pode ser maior que⌊ um + b----√⌋ . Ou seja, não podemos fazer um quadrado com mais peças do que as disponíveis.
Então, pegamos a menor das duas opções.
Podemos notar que isso é o mesmo que a formulação de Arnauld, pois sea = b então 2 min ( a , b ) a + b
fonte
Ruby , 36 bytes
Experimente online!
x-~x
é uma versão para golfe2*x+1
; estamos subtraindo a negação de dois complementos de x de si mesma. Depois disso, estou apenas usando a fórmula desta resposta , mas recolhendo os doismin
s aninhados em um e, em seguida, usando a formatação de string para truncar para um número inteiro.fonte
Retina 0.8.2 , 50 bytes
Experimente online! O link inclui casos de teste. Explicação:
Classifique os números em ordem crescente. Vamos chamá-los
l
eh
.Converta para unário.
Computar
l + max(h, l + 1)
. Isso é equivalente a2 * min(b, w) + (b != w)
. Veja a resposta de @ Arnauld para saber por que isso funciona.Encontre a raiz quadrada inteira mais alta.
fonte
05AB1E ,
87 bytesExperimente online ou verifique todos os casos de teste .
Exlação:
Usa uma derivada trivial da fórmula @Arnauld usada em sua resposta JavaScript para salvar um byte:
fonte
Japonês , 11 bytes
Solução JS do Porto de Arnauld. Recebe entrada como uma matriz.
Tente
fonte
R , 32 bytes
Experimente online!
Toma
b
ew
de stdin.Usa a fórmula desta resposta , mas aproveitando o comportamento de
min
assumir o mínimo de todos os seus argumentos.fonte
Perl 6 ,
2926 bytesAgradecimentos a Jo King por -3 bytes.
Experimente online!
fonte
[min] @_
pode ser@_.min
e você pode mover[!=]
para o final para economizar nos colchetes. 26 bytesJaponês , 10 bytes
Solução JS do Porto de Arnauld.
Experimente online!
fonte
12, 12
.