Bei einer Ganzzahl müssen Sie die minimale Anzahl von Bits finden, die in N invertiert werden müssen , um sie in eine quadratische Zahl umzuwandeln . Sie dürfen nur Bits unter dem höchstwertigen invertieren .
Beispiele
- bereits eine quadratische Zahl ( 2 2 ), daher ist die erwartete Ausgabe 0 .
- kann durch Invertieren von 1 Bit in eine quadratische Zahl umgewandelt werden: 11000 → 1100 1 ( 25 = 5 2 ), sodass die erwartete Ausgabe 1 ist .
- kann nicht durch Invertieren eines einzelnen Bits in eine quadratische Zahl umgewandelt werden (die möglichen Ergebnisse sind 23 , 20 , 18 und 30 ), sondern durch Invertieren von 2 Bits: 10110 → 10 0 0 0 ( 16 = 4 2 ) , also die erwartete Ausgabe ist 2 .
Regeln
- Es ist in Ordnung, wenn Ihr Code zu langsam ist oder einen Fehler für die größeren Testfälle ausgibt, aber er sollte mindestens in weniger als 1 Minute unterstützen.
- Das ist Code-Golf !
Testfälle
Input | Output
----------+--------
4 | 0
22 | 2
24 | 1
30 | 3
94 | 4
831 | 5
832 | 1
1055 | 4
6495 | 6
9999 | 4
40063 | 6
247614 | 7 (smallest N for which the answer is 7)
1049310 | 7 (clear them all!)
7361278 | 8 (smallest N for which the answer is 8)
100048606 | 8 (a bigger "8")
Oder im kopier- / einfügefreundlichen Format:
[4,22,24,30,94,831,832,1055,6495,9999,40063,247614,1049310,7361278,100048606]
100048606
bei TIO nicht ausgeführt. Ist das ein Problem?Antworten:
Ruby, 74 Bytes
Probieren Sie es online!
Dies erzeugt einfach die Sequenz (die weitaus mehr als genug ist), XORs es mit n und nimmt dann entweder die Anzahl von 1s in seiner binären Darstellung, wenn die Anzahl von Bits geringer ist als oder gleich log 2 n oder sonst n . Es dauert dann die minimale Anzahl von Bits umgedreht. Die Rückgabe von n anstelle der Anzahl der umgedrehten Bits, wenn das höchste umgedrehte Bit größer als log 2 n ist, verhindert, dass diese Fälle als Minimum n ausgewählt werden[ 12, 22, … , N2] n Log2n n n Log2n n wird immer größer sein als die Anzahl der Bits, die es hat.
Vielen Dank an Piccolo für das Speichern eines Bytes.
quelle
(n^x*x).to_s 2;...
anstelle von(n^x*x).to_s(2);...
Gelee , 12 Bytes
Probieren Sie es online!
Testen Sie eine Testsuite!
Monadischer Link. Sollte golffähig sein.
Aber ich bin zu dumm, um mir einen Weg auszudenken, wie ich dasEs ist meine erste Antwort, bei der ich Filterung / Mapping / Looping im Allgemeinen zusammen mit einer dyadischen Kette erfolgreich verwende.³
s loswerden kann .Erläuterung
quelle
Schale , 20 Bytes
Probieren Sie es online!
Erläuterung
quelle
▼mΣfo¬←ṠMz≠ȯfo£İ□ḋπŀ2Lḋ
Spart 2 Bytes. RIP Sie perfekte Punktzahl.Perl 6 , 65 Bytes
Probieren Sie es online!
Ich fühle mich ein wenig schmutzig, wenn ich nach einem perfekten Quadrat suche, indem ich nach einem Punkt in der Zeichenfolgendarstellung der Quadratwurzel der Zahl Ausschau halte, aber ... irgendetwas, um Bytes zu entfernen.
quelle
05AB1E ,
2015 Bytes-5 Bytes dank @ Mr.Xcoder , der einen Port seiner Jelly-Antwort verwendet .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle (die drei größten Testfälle werden entfernt, weil nach 60 Sekunden eine Zeitüberschreitung eintritt; bei den anderen Testfällen dauert dies noch ca. 35-45 Sekunden).
Erläuterung:
quelle
Lnʒ‚b€gË}^b€SOß
. Es bricht leider Ihre TestsuiteJava (JDK 10) , 110 Byte
Probieren Sie es online!
quelle
&
anstelle von logischen und&&
Gaia , 18 Bytes
Near-Port meiner Gelee-Antwort .
Probieren Sie es online!
Nervenzusammenbruch
quelle
Brachylog ,
5641 BytesEs wird keine Rekorde brechen, aber ich dachte, ich würde es trotzdem posten
Probieren Sie es online!
quelle
x86-64-Assembly, 37 Byte
Bytecode:
Dies berechnet sogar das höchste Beispiel in weniger als einer Sekunde.
Herzstück des Algorithmus ist wie gewohnt xor / popcount.
quelle
mov
s mit einemxchg
mov %ecx,%eax
beurteilen kann, gibt es nur einen, der ein Byte ( ) speichern würde, und ich kann% ecx dort nicht sterben lassen.Wolfram Language (Mathematica) , 67 Byte
Probieren Sie es online!
BitLength
Pick
BitXor
Min
DigitCount
1
quelle
Kohle , 31 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Gelee , 20 Bytes
Probieren Sie es online!
quelle
Python 2 , 82 Bytes
Probieren Sie es online!
quelle
Japt
-g
, 20 BytesHier kann man Golf spielen.
Probieren Sie es online!
quelle
C (GCC) ,
9391 BytesProbieren Sie es online!
Bearbeiten: Ich denke, meine ursprüngliche Lösung ( Online ausprobieren! ) Ist ungültig, da eine der Variablen, die
m
global ist, um ein paar Bytes zu sparen, indem kein Typ angegeben wurde, außerhalb von initialisiert wurdef(n)
und daher zwischen den Aufrufen neu initialisiert werden mussteUngolfed und kommentierter Code:
Bearbeitungen:
quelle