Eingang
Die Eingabe ist eine einzelne positive Ganzzahl n
Ausgabe
Der Ausgang ist n
mit dem höchstwertigen Bit auf gesetzt 0
.
Testfälle
1 -> 0
2 -> 0
10 -> 2
16 -> 0
100 -> 36
267 -> 11
350 -> 94
500 -> 244
Zum Beispiel: 350
in binär ist 101011110
. Durch Setzen des höchstwertigen Bits (dh des am weitesten links liegenden 1
Bits) wird die Ausgabe 0
in ein Bit umgewandelt 001011110
, das der dezimalen Ganzzahl 94
entspricht. Dies ist OEIS A053645 .
10
ergibt offensichtlich0
: DAntworten:
C (gcc) ,
49444039 BytesProbieren Sie es online!
quelle
i<=n
mitn/i
für -1 Byte. Dies ist nicht mein Golf, jemand anderes hat versucht, es in Ihrem Post zu bearbeiten, aber ich habe es zurückgesetzt, weil Änderungen für Golfposts gemäß unseren Community-Regeln nicht akzeptiert werden.Python 2 , 27 Bytes
Probieren Sie es online!
26 Bytes
Leider funktioniert dies nicht für
1
:Probieren Sie es online!
quelle
05AB1E , 5 Bytes
Probieren Sie es online!
Das Entfernen des höchstwertigen Bits von einer ganzen Zahl N entspricht dem Ermitteln des Abstands von N zur höchsten ganzzahligen Potenz von 2, die niedriger als N ist .
Daher habe ich die Formel N - 2 floor (log 2 N) verwendet :
.²
- Logarithmus mit Basis 2 .ó
- Floor auf eine ganze Zahl.o
- 2 erhöht auf die Potenz des obigen Ergebnisses.-
- Unterschied.quelle
b¦C
funktioniert auch ... nicht wahr? In Binär konvertieren, MSB ist immer auf Index 1, MSB entfernen, zurückkonvertieren.1
!Gelee , 3 Bytes
Probieren Sie es online!
Erläuterung
quelle
Ḅ
undḊ
Zwei-Byte - Codepoints? Dies würde die Gesamtgröße auf 5 Bytes ändern.C (gcc) - 59 Bytes
Diese gcc-Antwort verwendet nur ganzzahlige bitweise und arithmetische Operationen. Keine Logarithmen hier! Es kann Probleme mit der Eingabe von 0 geben und ist nicht portierbar.
Es ist meine erste Antwort auf dieser Website, daher würde ich mich über Feedback und Verbesserungen freuen. Ich hatte wirklich Spaß daran, bitweise Ausdrücke zu lernen.
quelle
main
, eine Funktion ist eine gültige Einreichung . Wenn Sie dies in eine Funktion umwandeln und die Eingabe als Argument für diese Funktion verwenden, werden 18 Byte gespart .MATL ,
86 BytesProbieren Sie es online!
Zwei Bytes gespart dank Cinaski. Der Wechsel zur Zuweisungsindizierung anstelle der Referenzindizierung war 2 Byte kürzer :)
Erläuterung:
quelle
4L
stattdessen verwendet hätten[2J]
. Ein weiterer Spaß 6 Bytes:tZlcW-
(funktioniert nur in MATLAB, nicht in TIO / Octave)Java (OpenJDK 8) , 23 Byte
Probieren Sie es online!
Entschuldigung, eingebaut: - /
quelle
n->n^1<<(int)Math.log2(n)
wird funktionieren und ist wahrscheinlich kürzer als 38 Bytes. Es war meine zweite (noch nicht getestete) Idee, wenn die nicht richtighighestOneBit
funktionierte. Aus Neugier, was war Ihre Lösungn->n^1<<(int)(Math.log(n)/Math.log(2))
weilMath.log2
es in Java nicht gibt. Nur P;Math.log
,Math.log10
undMath.loglp
verfügbar sind.Math.log2
gibt es in der Tat nicht ... Mein schlechtes. Sehen? Eine nette Methode (highestOneBit
) existiert, aber keine andere (Math.log2
). Java ist komisch ;-)Schale , 3 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Ohm v2 , 3 Bytes
Probieren Sie es online!
quelle
Python 2 , 27 Bytes
Probieren Sie es online!
Erläuterung
quelle
2**len(bin(n))/8
kann auch geschrieben1<<len(bin(n))-3
werden und funktioniert dann in 2 und 3 (keine Bytes gespeichert / hinzugefügt).Python 3 , 30 Bytes
-8 bytes dank caird coinheringaahing. Ich habe das aus dem Gedächtnis getippt. :O
Probieren Sie es online!
quelle
lambda n:int(bin(n)[3:],2)
?Mathematica, 37 Bytes
Probieren Sie es online!
quelle
JavaScript,
22 bis20 Byte2 Bytes dank ovs gespart
Probieren Sie es online!
Ein weiterer Ansatz, 32 Bytes
Probieren Sie es online!
quelle
.slice`1`^0
wenn.slice(1)^0
es genauso gut funktionieren würde, hahaJ, 6 Bytes
Ziemlich einfach.
Erläuterung
quelle
APL (Dyalog) , 10 Bytes
Tacit-Präfix-Funktion.
Probieren Sie es online!
2∘⊥
... decode von der Basis-2 ......
⍣¯1
negativer Zeit (dh in encode Basis-2)1↓
Lass das erste Bit fallen2⊥
Dekodiere von der Basis 2quelle
Ruby, 26 Bytes
-7 Bytes dank Ventero. -2 Bytes dank historicrat.
quelle
->n{n.to_s(2)[1..-1].to_i 2}
->n{/./=~'%b'%n;$'.to_i 2}
C (gcc), 38 Bytes
Eingebauter GCC verwendet.
quelle
31-
durch~
sollten zwei Bytes gespart werden.ARM-Assembly,
4643 Byte(Sie können das Zielregister beim Hinzufügen weglassen, wenn es mit der Quelle identisch ist.)
quelle
shr
/shl
/ nichtret
und möchte stattdessen etwas wielsr
/lsl
/bx lr
.Pyth, 5 Bytes
Testsuite.
Erläuterung:
quelle
Alice , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Japt , 6 Bytes
Probieren Sie es online!
Erläuterung
Wenn die Eingabe
1
fehlschlagen kann: 4 BytesProbieren Sie es online!
Erläuterung : Ruft die Eingabe binary (
¢
) ab, schneidet das erste Zeichen (Å
) ab und parst sie als binär zurück zu einer Zahl (n2
).quelle
Oktave , 20 Bytes
Probieren Sie es online!
quelle
APL (Dyalog Unicode) , 9 Bytes
Probieren Sie es online!
-1 Byte danke an Adam
quelle
⊢-2*∘⌊2⍟⊢
spart ein Byte.CJam , 7 Bytes
Probieren Sie es online!
Erläuterung:
Verwenden Sie das MSB (das immer 1 ist) erneut, um zu vermeiden, dass es gelöscht werden muss. das Äquivalent ohne diesen Trick wäre
{2b1>2b}
oder{2b(;2b}
.quelle
Retina ,
15 bis13 BytesProbieren Sie es online!
Ein- und Ausgabe in unary (die Testsuite enthält aus Bequemlichkeitsgründen die Konvertierung von und nach Dezimal).
Erläuterung
Dies ist in unary ziemlich einfach zu tun. Wir wollen nur die größte Potenz von 2 aus der Eingabe löschen. Wir können eine Potenz von 2 mit einigen Vorwärtsreferenzen abgleichen. Es ist tatsächlich einfacher, Werte der Form 2 n -1 abzugleichen , also werden wir das tun und eine 1 separat abgleichen:
Die Gruppe
1
stimmt entweder1
zu Beginn mit einer einzelnen überein, um die Sache anzukurbeln, oder sie stimmt doppelt mit der letzten Iteration überein. So passt es1
, dann2
, dann4
und so weiter. Da diese addiert werden, haben wir immer eine Potenz von 2, die wir mit der korrigieren1
am Ende .Aufgrund des nachfolgenden Zeilenvorschubs wird die Übereinstimmung einfach aus der Eingabe entfernt.
quelle
R , 28 Bytes
Probieren Sie es online!
Es ist am einfachsten, das höchstwertige Bit über zu berechnen,
2 ^ floor(log2(x))
anstatt Basisumwandlungen durchzuführen, die in R ziemlich ausführlich sindquelle
PARI / GP, 18 Bytes
Alternative Lösung:
quelle
n->n-2^logint(n,2)
? Die zweite Version wird in meiner PARI / GP-Version und in der von tio.run verwendeten Version nicht unterstützt . Ist das eine neue Funktion?exponent
wurde vor 5 Tagen hinzugefügt, verglichen mit dieser Herausforderung, die gestern hinzugefügt wurde. :)Haskell ,
3229 BytesProbieren Sie es online!
-3 Bytes dank @Laikoni
Ältere Lösung, 32 Bytes
Probieren Sie es online!
quelle
f=
in der ersten Variante nicht benötigen . Spart zusätzlichz<-2*y=x!z
ein Byte: Online ausprobieren!Excel, 20 Bytes
quelle
Excel,
3631 Bytes-5
Bytes dank @ IanM_Matrix1Nichts Interessantes.
quelle