Sie möchten ein quadratisches Schachbrett erstellen. Benachbarte Kacheln müssen sich wie ein Standardschachbrett schwarz und weiß abwechseln, und die untere linke Ecke kann entweder schwarz oder weiß sein.
Ihr Programm akzeptiert zwei positive ganze Zahlen, die Anzahl der schwarzen und die Anzahl der weißen Kacheln. Diese sind immer kleiner als 1024. Sie müssen nicht alle Kacheln verwenden.
Geben Sie die maximale Seitenlänge eines Schachbrettmusters aus, das mit der angegebenen Anzahl von Kacheln erstellt werden kann.
Testfälle:
12, 15 -> 5
8, 8 -> 4
4, 0 -> 1
Antworten:
JavaScript (ES7), 30 Byte
Probieren Sie es online aus!
Bei gegebener Anzahl der schwarzen Quadrateb und der Anzahl der weißen Quadrate w wird berechnet:
Für eine noch Größens , wir brauchen s2/2 Quadrate jeder Art (zB für s=8 : 32 schwarze Quadrate und 32 weiße Quadrate).
Für ungeradee Größens , brauchen wir ⌊s2/2⌋ Quadrate einer Art und ⌈s2/2⌉ Quadrate der anderen Art (zB für s=5 : 12 schwarze Quadrate und 13 weiße Quadrate, oder umgekehrt) . Der Parameter k wird auf 1 gesetzt, wenn m a x ( b , w ) ≥ m i n ( b , w ) + 1 , die dieses zusätzliche Quadrat auf einer Seite darstellt.
quelle
Gelee , 6 Bytes
Probieren Sie es online aus!
Ein dyadischer Link, der die maximale Boardgröße zurückgibt.
Testsuite für alle Permutationen von Zahlen bis 20
Erläuterung
Arnauld's Antwort hat eine gute Erklärung dafür, warum dies funktioniert; Bitte erwägen Sie auch, ihn zu stimmen!
quelle
Haskell , 35 Bytes
Probieren Sie es online aus!
Erläuterung
Diese Antwort berechnet die folgende Formel:
Warum funktioniert diese Formel? Lassen Sie uns zunächst Folgendes beachten:
Jedes Quadrat mit gleichmäßiger Seitenlänge kann mit2 × 1 Kacheln gekachelt werden.
und
Jedes Quadrat mit ungerader Länge kann gekachelt werden. Ersparen Sie ein einzelnes1 × 1 Quadrat durch 2 × 1 Kacheln.
Jetzt stellen wir fest, dass, wenn wir diese2 × 1 Kacheln auf ein Schachbrett legen, jedes auf einem schwarzen Quadrat und auf einem weißen Quadrat liegt. Wenn wir also ein gerades Schachbrett herstellen, muss jede Kachel ein Paar der anderen Farbe haben, und wenn wir ein ungerades Schachbrett herstellen, benötigt jede Kachel außer einer ein Paar der anderen Farbe. Dies sagt uns, dass die Antwort niemals mehr als Min 2 min ( a , b ) + 1- -- -- -- -- -- -- -- -- -- -- -- -√⌋ . 2 min ( a , b ) ist die maximale Anzahl von Paaren, die wir bilden können, und+ 1 steht für das letzte Quadrat, das kein Paar benötigt. Das Problem dabei ist, dass wenna = b wir nicht das zusätzliche Quadrat für den ungeraden Fall haben. Also fügen wir eine weitere Bedingung hinzu: Unser Ergebnis kann nicht mehr als⌊ a + b- -- -- -- -√⌋ . Das heißt, wir können kein Quadrat erstellen, das mehr Kacheln enthält, als wir zur Verfügung haben.
Wir nehmen also nur die kleinere der beiden Optionen.
quelle
Ruby , 36 Bytes
Probieren Sie es online aus!
x-~x
ist eine Golfversion von2*x+1
; Wir subtrahieren die Zwei-Komplement-Negation von x von sich selbst. Danach verwende ich nur die Formel dieser Antwort , reduziere aber die beiden verschachteltenmin
s zu einer und verwende dann die Zeichenfolgenformatierung, um sie auf eine Ganzzahl zu kürzen.quelle
Retina 0,8,2 , 50 Bytes
Probieren Sie es online aus! Link enthält Testfälle. Erläuterung:
Sortieren Sie die Zahlen in aufsteigender Reihenfolge. Nennen wir sie
l
undh
.In unary konvertieren.
Berechnen
l + max(h, l + 1)
. Dies entspricht2 * min(b, w) + (b != w)
. Siehe @ Arnauld's Antwort, warum dies funktioniert.Finden Sie die höchste ganzzahlige Quadratwurzel.
quelle
05AB1E ,
87 BytesProbieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erklärung:
Verwendet eine triviale Ableitung der Formel @Arnauld, die in seiner JavaScript-Antwort verwendet wird , um ein Byte zu speichern:
quelle
Japt , 11 Bytes
Port of Arnauld's JS-Lösung. Nimmt die Eingabe als Array auf.
Versuch es
quelle
R , 32 Bytes
Probieren Sie es online aus!
Nimmt
b
undw
von stdin.Verwendet die Formel aus dieser Antwort , nutzt jedoch das Verhalten von
min
, um das Minimum aller seiner Argumente zu übernehmen.quelle
Perl 6 ,
2926 BytesVielen Dank an Jo King für -3 Bytes.
Probieren Sie es online aus!
quelle
[min] @_
kann sein@_.min
und Sie können das[!=]
bis zum Ende verschieben, um auf den Klammern zu speichern. 26 BytesJapt , 10 Bytes
Port of Arnauld's JS-Lösung.
Probieren Sie es online aus!
quelle
12, 12
.