k
Suchen Sie bei gegebener Dezimalzahl die kleinste Ganzzahl n
, sodass die Quadratwurzel von n
innerhalb k
einer Ganzzahl liegt. Der Abstand sollte jedoch ungleich Null sein - n
kann kein perfektes Quadrat sein.
Vorausgesetzt k
, eine Dezimalzahl oder ein Bruch (je nachdem, was für Sie einfacher ist), sodass 0 < k < 1
die kleinste positive Ganzzahl ausgegeben wird, n
sodass die Differenz zwischen der Quadratwurzel von n
und der nächsten Ganzzahl zur Quadratwurzel von n
kleiner oder gleich, k
aber ungleich Null ist .
Wenn i
die nächste Ganzzahl zur Quadratwurzel von ist n
, suchen Sie nach der ersten n
Wo 0 < |i - sqrt(n)| <= k
.
Regeln
- Sie können nicht die unzureichende Implementierung von nicht ganzzahligen Zahlen in einer Sprache verwenden, um das Problem zu trivialisieren.
- Andernfalls können Sie davon ausgehen, dass dies
k
beispielsweise bei der Gleitkommarundung keine Probleme verursacht.
Testfälle
.9 > 2
.5 > 2
.4 > 3
.3 > 3
.25 > 5
.2 > 8
.1 > 26
.05 > 101
.03 > 288
.01 > 2501
.005 > 10001
.003 > 27888
.001 > 250001
.0005 > 1000001
.0003 > 2778888
.0001 > 25000001
.0314159 > 255
.00314159 > 25599
.000314159 > 2534463
Kommagetrennte Testfall-Eingaben:
0.9, 0.5, 0.4, 0.3, 0.25, 0.2, 0.1, 0.05, 0.03, 0.01, 0.005, 0.003, 0.001, 0.0005, 0.0003, 0.0001, 0.0314159, 0.00314159, 0.000314159
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
JavaScript (ES7),
5150 BytesProbieren Sie es online!
(schlägt fehl für die Testfälle, die zu viel Rekursion erfordern)
Nicht rekursive Version,
5756 BytesProbieren Sie es online!
Oder für 55 Bytes :
Probieren Sie es online!
(aber dieser ist deutlich langsamer)
quelle
J ,
3929 BytesNB. Diese kürzere Version verwendet einfach die @ alephalpha-Formel.
Probieren Sie es online!
39 Bytes, original, Brute Force
Probieren Sie es online!
Behandelt alle Testfälle
quelle
Japt ,
1816 Bytes-2 Bytes von Shaggy
Probieren Sie es online!
quelle
%1 &&
ist böse, nicht sicher, ob die Verwendung von Arnauld's Lösung kürzer wäre (vielleicht auch nicht)Z¬u1
zuZ
Beginn der Funktion.[1,-1]®*U²Ä /U/2 c ²-Z} rm
Pyth,
2221 BytesVersuchen Sie es online hier oder überprüfen alle Testfälle auf einmal hier .
Ein weiterer Hafen von alephalpha die ausgezeichnete Antwort , stellen Sie sicher , dass sie eine upvote macht!
Bearbeiten: Dank Kevin Cruijssen wurde ein Byte gespeichert
quelle
[-1,1]
in 3 Bytes zu erstellen , oder benötigen Sie eine zusätzliche Umkehrung, damit es zu 4 Bytes wird? Wenn es in 3 Bytes möglich ist, könnten Sie das tun und dann das*_d
to*d
und das+d
to ändern-d
. Hat Pyth nicht auch ein eingebautes Minimum, anstatt zuerst zu sortieren und zu nehmen?- ... d
wenn ich es in ändere, das spart mir ein Byte! Vielen Dank[1,-1]
oder handelt[-1,1]
. Ich habe das*d
und-d
mit meiner 05AB1E-Antwort verglichen, bei der ich keine Karte verwende, aber ein 2D-Array von einem anderen 2D-Array subtrahieren / mit diesem multiplizieren kann, sodass ich keine Karte benötige. Ich bin froh, dass ich in diesem Fall helfen konnte, ein Byte zu speichern. :) Und danke für die Inspiration für meine 05AB1E Antwort.Perl 6 ,
343329 Bytes-1 Byte danke an Grimy
Probieren Sie es online!
quelle
>=
durch>
. Quadratwurzeln von Ganzzahlen sind entweder ganzzahlig oder irrational, so dass der Gleichheitsfall nachweislich nicht eintreten kann.APL (Dyalog Unicode) , 27 Byte SBCS
Probieren Sie es online!
Monadischer Zug, der ein Argument nimmt. Dies ist eine Antwort von Alephalpha .
Wie:
quelle
C # (Visual C # Interactive Compiler) ,
898571 ByteProbieren Sie es online!
-4 Bytes dank Kevin Cruijssen!
quelle
n++
in die Schleife setzen, damit das Byte-1
aus der Rückgabe entfernt werden kann:k=>{double n=1,p;for(;Math.Abs(Math.Round(p=Math.Sqrt(0d+n))-p)>k|p%1==0;n++);return n;}
0d+
kann entfernt werden, oder nicht?n
war schon eine DoppelJava (JDK) ,
73-70ByteProbieren Sie es online!
-3 bytes
danke an @ceilingcatquelle
Java 8, 85 Bytes
Port der C # .NET-Antwort von Ausführungsform der Erfindung .
Probieren Sie es online aus.
Das
Math.round
kann alternativ auch so sein, aber leider ist es die gleiche Anzahl von Bytes:Probieren Sie es online aus.
quelle
MathGolf , 16 Bytes
Probieren Sie es online!
Kein großer Fan dieser Lösung. Es ist ein Port der 05AB1E-Lösung, die auf derselben Formel basiert, die die meisten Antworten verwenden.
Erläuterung
quelle
byte
In-Code-Golf angesehen? Weil einige Ihrer Charaktere mehr als ein einzelnes Byte benötigen. Ich meine nicht, dass ich nichts'ԓ'
Zeichen eigentlich 2 Bytes, aber der Rest sind 1-Byte-Zeichen.Viertens (gviertens) , 76 Bytes
Probieren Sie es online!
Erläuterung
Startet einen Zähler bei 1 und erhöht ihn in einer Schleife. Bei jeder Iteration wird geprüft, ob der absolute Wert der Quadratwurzel des Zählers - die nächste Ganzzahl ist kleiner als k - ist
Code Erklärung
quelle
Jelly , 13 Bytes
Ich habe es nicht geschafft, einen genaueren Ansatz als Alephalpha zu finden
- stimme seiner Mathematica-Antwort zu !
Probieren Sie es online!
Wie?
quelle
Japt , 14 Bytes
Versuch es
quelle
Perl 5
-p
, 42 BytesProbieren Sie es online!
quelle