Sie erhalten also eine POSITIVE Basis 10 (Dezimalzahl). Ihre Aufgabe ist es, die Binärziffern umzukehren und diese Basis-10-Zahl zurückzugeben.
Beispiele:
1 => 1 (1 => 1)
2 => 1 (10 => 01)
3 => 3 (11 => 11)
4 => 1 (100 => 001)
5 => 5 (101 => 101)
6 => 3 (110 => 011)
7 => 7 (111 => 111)
8 => 1 (1000 => 0001)
9 => 9 (1001 => 1001)
10 => 5 (1010 => 0101)
Dies ist eine Code-Golf- Herausforderung, daher gewinnt die Lösung, die die wenigsten Bytes verwendet.
Dies ist A030101 im OEIS.
code-golf
number
base-conversion
binary
juniorRubyist
quelle
quelle
Antworten:
Python , 29 Bytes
Probieren Sie es online!
Dies ist eine anonyme, unbenannte Funktion, die das Ergebnis zurückgibt.
Zuerst
bin(n)
wandelt das Argument in eine binäre Zeichenfolge. Normalerweise würden wir dies mit der Slice-Notation umkehren[::-1]
. Dies liest den String mit einem Schritt von -1 , dh rückwärts. Binären Zeichenfolgen in Python wird jedoch ein vorangestellt0b
, und daher geben wir das zweite Argument des Slicings als 1 an . Dadurch wird Python angewiesen, rückwärts zu lesen und am Index 1 zu enden , sodass die Indizes 1 und 0 nicht gelesen werden .Nachdem wir nun die rückwärts gerichtete Binärzeichenfolge haben, übergeben wir sie
int(...)
mit dem zweiten Argument als 2 . Dadurch wird die Zeichenfolge als Ganzzahl zur Basis 2 gelesen, die dann implizit vom Lambda-Ausdruck zurückgegeben wird.quelle
Python, 29 Bytes
Probieren Sie es online aus
quelle
JavaScript (ES6),
3028 Bytes2 Bytes dank @Arnauld eingespart
Dies berechnet im Grunde genommen bitweise die Umkehrung: Wir beginnen mit q = 0 ; während n positiv ist, multiplizieren wir q mit 2, trennen das letzte Bit von n mit
n>>1
und addieren es zu q mit|n%2
. Wenn n 0 erreicht, wurde die Zahl erfolgreich umgekehrt und wir geben q zurück .Dank der langen integrierten Namen von JS sind für die Lösung dieser Herausforderung auf einfache Weise 44 Byte erforderlich:
Wenn Sie eine Rekursion und eine Zeichenfolge verwenden, können Sie eine 32-Byte-Lösung erhalten, die dasselbe bewirkt:
quelle
f=(n,q)=>n?f(n>>1,q*2|n%2):q
fast funktioniert. Aber leider nicht fürn=0
.Java 8,
53474645 BytesDies ist ein Lambda-Ausdruck, der das gleiche Prinzip wie die Antwort der ETH hat (obwohl die Rekursion in Java zu ausführlich gewesen wäre, also schleifen wir stattdessen):
Probieren Sie es online!
Dies kann mit zugewiesen
IntFunction<Integer> f = ...
und dann mit aufgerufen werdenf.apply(num)
. Erweitert, ungolfed und kommentiert sieht es so aus:quelle
t*2
anstelle von(t<<1)
einem weiteren, indem Sie diese Berechnung von Schleifenkopf zu Schleifenkörper verschieben. Können Siex
stattx>0
für die Bedingung verwenden?x>>=1
durch ersetzt werden kann,x/=2
da es sich automatisch um eine Ganzzahlteilung handelt.t=t*2+
int+=t+
.)J, 6 Bytes
|.
umkehren&.
unter#:
Basis 2quelle
Gelee , 3 Bytes
Probieren Sie es online!
quelle
Mathematica, 19 Bytes
quelle
Labyrinth, 23 Bytes
Nun, das ist umständlich ... dies gibt die umgekehrte BINARY-Nummer zurück ... Vielen Dank an @Martin Ender, dass er sowohl auf meinen Fehler als auch auf meinen ID 10T-Fehler hingewiesen hat. Das funktioniert also nicht, ich muss eine andere Lösung finden.
quelle
# Labyrinth, 89 bytes
_
sich diese an den Kreuzungen befinden.C
48444342 Bytes-1 Byte dank Gurka und -1 Byte dank Anatolyg:
Vorherige 44-Byte-Lösung:
Vorherige 48-Byte-Lösung:
Ungolfed und Nutzung:
quelle
r
schon auf Null initialisiertr;f(n){r=0;
, zBr=0;
ist das nicht nötig? Auch kleiner Tippfehler: "Vorherige 48- Byte-Lösung"for
Schleifen immer mindestens so kurz wiewhile
Schleifen sind und oft kürzer.r;f(n){for(r=n&1;n/=2;r=2*r+n%2);return r;}
? 1 Byte kürzer, aber ich bin mir nicht sicher, ob es ein gültiges C (C99) ist.=
in+=
, um es kürzer und verschleierteRuby,
2928 Bytes"% b"% n formatiert die Eingabe n als Binärzeichenfolge, kehrt sie um und konvertiert sie dann zurück in eine Zahl
Verwendung / Testfälle:
quelle
2
ist die Basis, in die er konvertiert, undn
ist die Eingabe.->args{return value}
ist die rubinrote Lambda-Syntax.to_i(2)
?05AB1E , 3 Bytes
Probieren Sie es online!
quelle
Java (OpenJDK) , 63 Byte
Probieren Sie es online!
Danke an Poke für -12 Bytes und an Cyoce für -8 Bytes!
quelle
a
in diesem Kontext) möglich istprint
anstattprintln
zum Golfen :)StringBuffer
speichert ein Byte mehr alsStringBuilder
+""
anstelle von tun.toString()
?Perl 6 , 19 Bytes
quelle
$_
. Es wird nicht namentlich erwähnt, aber diebase
Methode wird darauf aufgerufen.{:2(.base(2).flip)}(10)
bei der REPL wird 5 ausgegeben. Damit erfüllt es die Standard-Code-Golf-Kriterien für eine Funktion.Haskell, 36 Bytes
Gleicher Algorithmus (und Länge!) Wie die JavaScript- Antwort von ETHproductions .
quelle
Bash / Unix-Dienstprogramme,
24 bis23 ByteProbieren Sie es online!
quelle
PHP, 33 Bytes
In base2 konvertieren, String umkehren, in dezimal konvertieren. In Datei speichern und als Pipe mit ausführen
-F
.keine eingebauten:
iterativ 41 Bytes
Während die Eingabe gesetzte Bits hat, platzieren Sie ein Bit von der Eingabe und verschieben Sie es zur Ausgabe. Als Rohr mit laufen lassen
-nR
.rekursiv, 52 Bytes
quelle
$r+=$r
. Aber ich kann mich eigentlich nicht erinnern, warum ich das in den Vordergrund gestellt habe.MATL , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
Pyth, 6 Bytes
Test-Suite hier verfügbar.
Erläuterung
quelle
Japt , 5 Bytes
Probieren Sie es online!
quelle
)
könnte auch ein Leerzeichen sein :-)Scala, 40 Bytes
Verwendung:
Erläuterung:
quelle
Mathematica, 38 Bytes
quelle
Groovy, 46 Bytes
quelle
it
bezieht sich auf das Argument, das einem Block IIRCCJam , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Batch, 62 Bytes
Erläuterung:
%1
Enthält im ersten Durchgang den Eingabeparameter, solange dieser%2
leer ist. Wir bewerten dahern
als die Hälfte von%1
undr
als+%1
Modulo 2 (der%
Operator muss verdoppelt werden, um es zu zitieren). Wennn
nicht Null, rufen wir uns als rekursiv übergebenen Schwanz aufn
und ein Ausdruck, der beim nächsten Durchgang ausgewertet wird, verdoppelt sichr
jedes Mal.quelle
C # 98 Bytes
quelle
R, 55 Bytes
Liest die Eingabe von stdin und verwendet folglich die
bin
Funktion aus demmiscFuncs
Paket, um von dezimal in einen binären Vektor zu konvertieren.quelle
Aufdringlich , 19 Bytes
Keine eingebaute Basisumwandlung!
Probieren Sie es online!
Pushy hat zwei Stapel, und diese Antwort macht ausgiebig davon Gebrauch.
Dieses Programm besteht aus zwei Teilen. Zuerst wird
$&2%v2/;F
, wandelt die Zahl in ihrer umgekehrten Binärdarstellung:In dem Beispiel 10 würden die Stapel bei jeder Iteration folgendermaßen aussehen:
Wir können sehen, dass nach der letzten Iteration
0, 1, 0, 1
auf dem zweiten Stapel erstellt wurde - die umgekehrten Binärziffern von 10,0b1010
.Der zweite Teil des Codes
L:vK2*;OS#
stammt aus meiner vorherigen Antwort, die Binär in Dezimal umwandelt . Mit der in dieser Antwort beschriebenen und erläuterten Methode werden die Binärziffern auf dem Stapel in eine Ganzzahl zur Basis 10 konvertiert und das Ergebnis ausgegeben.quelle
k, 18 Bytes
Beispiel:
quelle
C #, 167 Bytes
Erläuterung:
Hier werde ich n Werte iterieren und jedes Mal, wenn ein iterierter ganzzahliger Wert in einen Bytewert konvertiert wird, diesen Bytewert umkehren und diesen Bytewert in einen ganzzahligen Wert konvertieren.
quelle
STDIN
(ich denke das istconsole.Read()
aber du würdest es wahrscheinlich besser wissen als ich) undSTDOUT
. Wie auch immer, willkommen auf der Website, wenn Sie erfahrenere Tipps zum Golfspielen wünschen. C # Ich würde codegolf.stackexchange.com/questions/173/….Reverse()
kehrt zurückIEnumerable<char>
. DaConvert.ToInt32
IEnumerable nicht überlastet ist, wird eine Ausnahme ausgelöst. Auch die Antwort folgt nicht den Regeln für Code-Golf: 1) Da nichts angegeben ist, muss die Einreichung ein vollständiges Programm oder eine Funktion sein, nicht nur ein Ausschnitt. 2)using
Anweisungen müssen in derc / c ++ 136 Bytes
Es wird nicht gewinnen, aber ich wollte einen anderen Ansatz in c / c ++ 120 Bytes in der Funktion verfolgen
Um zu erläutern, was ich tue, habe ich die Protokollfunktion verwendet, um die Anzahl der von der Eingabe verwendeten Bits zu bestimmen. Dann eine Reihe von drei Bitverschiebungen nach links / rechts, innen / außen, gerade / ungerade, die die gesamte Ganzzahl spiegeln. Zum Schluss noch ein bisschen verschieben, um die Zahl wieder nach rechts zu verschieben. Die Verwendung von Dezimalstellen für Bitverschiebungen anstelle von Hex ist ein Problem, spart jedoch einige Bytes.
quelle