Biorąc pod uwagę liczbę całkowitą , musisz znaleźć minimalną liczbę bitów, którą należy odwrócić w aby przekształcić ją w liczbę kwadratową . Dozwolone jest tylko odwracanie bitów poniżej najbardziej znaczącego .
Przykłady
- już jest liczbą kwadratową ( ), więc oczekiwany wynik to . 0
- można zamienić na liczbę kwadratową, odwracając 1 bit: ( ), więc oczekiwany wynik to . 25 = 5 2 1
- 23 20 18 30 10110 → 10 0 0 0 16 = 4 2 2 nie można zamienić na liczbę kwadratową poprzez odwrócenie pojedynczego bitu (możliwe wyniki to , , i ), ale można tego dokonać poprzez odwrócenie 2 bitów: ( ), więc oczekiwany wynik to .
Zasady
- W porządku, jeśli Twój kod jest zbyt wolny lub generuje błąd dla większych przypadków testowych, ale powinien obsługiwać co najmniej w mniej niż 1 minutę.
- To jest golf golfowy !
Przypadki testowe
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")
Lub w przyjaznym formacie kopiuj / wklej:
[4,22,24,30,94,831,832,1055,6495,9999,40063,247614,1049310,7361278,100048606]
100048606
w TIO, czy to problem?Odpowiedzi:
Rubinowy, 74 bajty
Wypróbuj online!
To po prostu generuje sekwencję (co jest znacznie więcej niż wystarczające), XORs za pomocą , a następnie przyjmuje liczbę 1s w postaci binarnej reprezentacja, jeśli liczba bitów jest mniejsza lub równa , lub innym przypadku. Następnie zajmuje minimalną liczbę przerzuconych bitów. Zwrócenie zamiast liczby przerzuconych bitów, gdy najwyższy przerzucony bit jest większy niż uniemożliwia tych przypadków jako minimum, ponieważ zawsze będzie większe niż liczba bitów, które ma. n log 2 nnn log 2 nn[ 12), 22), … , N2)] n log2)n n n log2)n n
Dzięki Piccolo za uratowanie bajtu.
źródło
(n^x*x).to_s 2;...
zamiast(n^x*x).to_s(2);...
Galaretka , 12 bajtów
Wypróbuj online!
Sprawdź pakiet testowy!
Link monadyczny. Powinien być golfowy.
Ale jestem zbyt głupi, aby wymyślić sposób, aby się go pozbyćTo moja pierwsza odpowiedź, w której z powodzeniem używam filtrowania / mapowania / zapętlania ogólnie wraz z łańcuchem dynamicznym \ o /³
.Wyjaśnienie
źródło
Łuska , 20 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
▼mΣfo¬←ṠMz≠ȯfo£İ□ḋπŀ2Lḋ
oszczędza 2 bajty. RIP to idealny wynik kwadratowy.Perl 6 , 65 bajtów
Wypróbuj online!
Czuję się trochę brudny, jeśli chodzi o testowanie idealnego kwadratu, szukając kropki w reprezentacji ciągu pierwiastka kwadratowego z liczby, ale ... cokolwiek, by zgolić bajty.
źródło
05AB1E ,
2015 bajtów-5 bajtów dzięki @ Mr.Xcoder używający portu swojej odpowiedzi Jelly .
Wypróbuj online lub sprawdź wszystkie przypadki testowe (największe trzy przypadki testowe są usuwane, ponieważ przekroczą limit czasu po 60 sekundach; nadal zajmuje około 35-45 sekund w przypadku innych przypadków testowych).
Wyjaśnienie:
źródło
Lnʒ‚b€gË}^b€SOß
. Niestety psuje pakiet testowyJava (JDK 10) , 110 bajtów
Wypróbuj online!
źródło
&
zamiast logicznego i&&
Gaia , 18 bajtów
Bliski port mojej galaretki .
Wypróbuj online!
Awaria
źródło
Brachylog ,
5641 bajtówNie pobije żadnych rekordów długości, ale i tak pomyślałem, że to opublikuję
Wypróbuj online!
źródło
Zestaw x86-64, 37 bajtów
Kod bajtowy:
Cóż, to oblicza nawet najwyższy przykład w mniej niż sekundę.
Sercem algorytmu jest xor / popcount jak zwykle.
źródło
mov
z nichxchg
mov %ecx,%eax
) i nie mogę pozwolić, aby% ecx tam umarł.Wolfram Language (Mathematica) , 67 bajtów
Wypróbuj online!
BitLength
Pick
BitXor
Min
DigitCount
1
źródło
Węgiel drzewny , 31 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
Galaretka , 20 bajtów
Wypróbuj online!
źródło
Python 2 , 82 bajty
Wypróbuj online!
źródło
Japt
-g
, 20 bajtówMożna to zagrać w golfa.
Wypróbuj online!
źródło
C (gcc) ,
9391 bajtówWypróbuj online!
Edycja: Wydaje mi się, że moje oryginalne rozwiązanie ( Wypróbuj online! ) Jest nieprawidłowe, ponieważ jedna ze zmiennych
m
, globalna w celu zaoszczędzenia kilku bajtów przez nieokreślenie typu, została zainicjowana pozaf(n)
i dlatego musiała zostać ponownie zainicjowana między wywołaniamiKod nieposortowany i skomentowany:
Edycje:
źródło