Wkład
Dane wejściowe to pojedyncza dodatnia liczba całkowita n
Wydajność
Wyjście ma n
najbardziej znaczący bit ustawiony na 0
.
Przypadki testowe
1 -> 0
2 -> 0
10 -> 2
16 -> 0
100 -> 36
267 -> 11
350 -> 94
500 -> 244
Na przykład: 350
w pliku binarnym jest 101011110
. Ustawienie jego najbardziej znaczącego bitu (tj. Bitu najbardziej z lewej strony 1
), aby 0
przekształcić go w 001011110
ekwiwalent dziesiętnej liczby całkowitej 94
, czyli wyjścia. To jest OEIS A053645 .
10
oczywiście daje0
: DOdpowiedzi:
C (gcc) ,
49444039 bajtówWypróbuj online!
źródło
i<=n
zn/i
na -1 bajt. To nie jest mój golf. Ktoś inny próbował go edytować w swoim poście, ale wycofałem go, ponieważ zmiany postów do gry w golfa nie są akceptowane zgodnie z zasadami naszej społeczności.Python 2 , 27 bajtów
Wypróbuj online!
26 bajtów
Niestety nie działa to dla
1
:Wypróbuj online!
źródło
05AB1E , 5 bajtów
Wypróbuj online!
Usunięcie najbardziej znaczącego bitu z liczb całkowitych n jest równoważna do znalezienia odległości od N do najwyższej mocy całkowitą od 2 niższej niż N .
Dlatego użyłem wzoru N - 2 piętro (log 2 N) :
.²
- Logarytm z podstawą 2 .ó
- Piętro do liczby całkowitej.o
- 2 podniesione do potęgi wyniku powyżej.-
- Różnica.źródło
b¦C
działa również ... prawda? Konwertuj na binarny, MSB jest zawsze pod indeksem 1, usuń MSB, przekonwertuj z powrotem.1
!Galaretka , 3 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Ḅ
iḊ
dwu-bajtowych codepoints? To zmieni ogólny rozmiar na 5 bajtów.C (gcc) - 59 bajtów
Ta odpowiedź gcc używa tylko liczb całkowitych operacji bitowych i arytmetycznych. Brak logarytmów tutaj! Może mieć problemy z wejściem 0 i jest całkowicie nieprzenośny.
To moja pierwsza odpowiedź na tej stronie, więc chciałbym poznać opinie i ulepszenia. Na pewno dobrze się bawiłem, ucząc się wyrażeń bitowych.
źródło
main
, funkcja jest prawidłowym przesłaniem . Zmiana tego na funkcję i przyjęcie danych wejściowych jako argumentu dla tej funkcji pozwala zaoszczędzić 18 bajtów .MATL ,
86 bajtówWypróbuj online!
Zaoszczędził dwa bajty dzięki Cinaski. Przejście na indeksowanie przypisań zamiast indeksowania referencyjnego było o 2 bajty krótsze :)
Wyjaśnienie:
źródło
4L
zamiast[2J]
. Kolejna zabawa 6 bajtów:tZlcW-
(działa tylko w MATLAB, nie w TIO / Octave)Java (OpenJDK 8) , 23 bajty
Wypróbuj online!
Przepraszamy, wbudowane: - /
źródło
n->n^1<<(int)Math.log2(n)
będzie działać i prawdopodobnie będzie miało mniej niż 38 bajtów. To był mój drugi (jeszcze nie przetestowany) pomysł, jeśli tenhighestOneBit
nie działał odpowiednio. Z ciekawości, jakie było twoje rozwiązanien->n^1<<(int)(Math.log(n)/Math.log(2))
ponieważMath.log2
nie istnieje w Javie. ; P TylkoMath.log
,Math.log10
iMath.loglp
są dostępne.Math.log2
naprawdę nie istnieje ... Mój zły. Widzieć?highestOneBit
Istnieje jedna niezła metoda ( ), ale nie ma innej (Math.log2
). Java jest dziwna ;-)Łuska , 3 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
Ohm v2 , 3 bajty
Wypróbuj online!
źródło
Python 2 , 27 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
2**len(bin(n))/8
można również przeliterować1<<len(bin(n))-3
, a wtedy będzie działać zarówno w 2, jak i 3 (nie zapisano / nie dodano żadnych bajtów).Python 3 , 30 bajtów
-8 bajtów dzięki Cairney Coheringaahing. Wpisałem to z pamięci. : o
Wypróbuj online!
źródło
lambda n:int(bin(n)[3:],2)
?Mathematica, 37 bajtów
Wypróbuj online!
źródło
JavaScript,
2220 bajtówZaoszczędzono 2 bajty dzięki ovs
Wypróbuj online!
Inne podejście, 32 bajty
Wypróbuj online!
źródło
.slice`1`^0
kiedy.slice(1)^0
miałby równie dobrze działać, hahaJ, 6 bajtów
Dość proste.
Wyjaśnienie
źródło
APL (Dyalog) , 10 bajtów
Funkcja ukrytego przedrostka.
Wypróbuj online!
2∘⊥
... dekodowania z bazy-2 ......
⍣¯1
jednej negatywnej czasie (czyli kodowanie w bazie-2)1↓
upuść pierwszy bit2⊥
dekodować z base-2źródło
Rubinowy, 26 bajtów
-7 Bajtów dzięki Ventero. -2 bajty dzięki historicrat.
źródło
->n{n.to_s(2)[1..-1].to_i 2}
->n{/./=~'%b'%n;$'.to_i 2}
C (gcc), 38 bajtów
Używany wbudowany gcc.
źródło
31-
przez~
powinno zaoszczędzić dwa bajty.Montaż ARM,
4643 bajtów(Można pominąć rejestr docelowy przy dodawaniu, gdy jest on taki sam jak źródłowy)
źródło
shr
/shl
/ret
i zamiast tego chce czegoś takiego jaklsr
/lsl
/bx lr
.Pyth, 5 bajtów
Zestaw testowy.
Wyjaśnienie:
źródło
Alice , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Japt , 6 bajtów
Wypróbuj online!
Wyjaśnienie
Jeśli wprowadzanie
1
może się nie powieść: 4 bajtyWypróbuj online!
Objaśnienie : pobierz wejściowy binarny (
¢
), odetnij pierwszy znak (Å
), przeanalizuj jako binarny powrót do liczby (n2
).źródło
Oktawa , 20 bajtów
Wypróbuj online!
źródło
APL (Dyalog Unicode) , 9 bajtów
Wypróbuj online!
-1 bajt dzięki Adamowi
źródło
⊢-2*∘⌊2⍟⊢
zapisuje bajt.CJam , 7 bajtów
Wypróbuj online!
Wyjaśnienie:
Ponownie użyj MSB (zawsze 1), aby uniknąć konieczności jego usunięcia; ekwiwalent bez tej sztuczki to
{2b1>2b}
lub{2b(;2b}
.źródło
Siatkówka ,
1513 bajtówWypróbuj online!
Wejściowe i wyjściowe w jednostkowym (zestaw testowy dla wygody zawiera konwersję zi na dziesiętny).
Wyjaśnienie
Jest to dość łatwe do zrobienia w pojedynkę. Wszystko, co chcemy zrobić, to usunąć największą moc 2 z wejścia. Możemy dopasować potęgę 2 z niektórymi referencjami. W rzeczywistości łatwiej jest dopasować wartości formularza 2 n -1 , więc zrobimy to i dopasujemy jeden 1 osobno:
Grupa
1
albo dopasowuje jeden1
na początku, aby rozpocząć, albo dwukrotnie pasuje do tego, co zrobiła podczas ostatniej iteracji. Więc pasuje1
, wtedy2
, wtedy4
i tak dalej. Ponieważ sumy te się sumują, zawsze brakuje nam potęgi 2, którą naprawiamy1
na końcu.Ze względu na końcowe podawanie linii dopasowanie jest po prostu usuwane z danych wejściowych.
źródło
R , 28 bajtów
Wypróbuj online!
Najłatwiej jest obliczyć najbardziej znaczący bit,
2 ^ floor(log2(x))
zamiast przeprowadzać podstawowe konwersje, które są dość szczegółowe w Rźródło
PARI / GP, 18 bajtów
Alternatywne rozwiązanie:
źródło
n->n-2^logint(n,2)
? Drugi nie jest obsługiwany w mojej wersji PARI / GP ani w wersji używanej przez tio.run . Czy to nowa funkcja?exponent
został dodany 5 dni temu, w porównaniu do tego wyzwania, które zostało dodane wczoraj. :)Haskell ,
3229 bajtówWypróbuj online!
-3 bajty dzięki @Laikoni
Starsze rozwiązanie, 32 bajty
Wypróbuj online!
źródło
f=
pierwszego wariantu. Dodatkowoz<-2*y=x!z
zapisuje bajt: Wypróbuj online!Excel, 20 bajtów
źródło
Excel,
3631 bajtów-5
bajty dzięki @ IanM_Matrix1Nic interesującego.
źródło