Jadi, Anda diberi nomor basis 10 (desimal) POSITIF . Tugas Anda adalah membalikkan angka biner dan mengembalikan nomor basis 10 itu.
Contoh:
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)
Ini adalah tantangan kode-golf , jadi solusi yang menggunakan byte terkecil menang.
Ini adalah A030101 di OEIS.
code-golf
number
base-conversion
binary
juniorRubyist
sumber
sumber
Jawaban:
Python , 29 byte
Cobalah online!
Ini adalah fungsi anonim dan tidak bernama yang mengembalikan hasilnya.
Pertama,
bin(n)
ubah argumen menjadi string biner. Kami biasanya akan membalikkan ini dengan notasi slice[::-1]
. Ini membaca string dengan langkah -1 , yaitu mundur. Namun, string biner dalam Python diawali dengan0b
, dan oleh karena itu kami memberikan argumen kedua slicing sebagai 1 , mengatakan Python untuk membaca mundur berakhir pada indeks 1 , sehingga tidak membaca indeks 1 dan 0 .Sekarang kita memiliki string biner mundur, kita meneruskannya
int(...)
dengan argumen kedua sebagai 2 . Ini membaca string sebagai integer basis 2, yang kemudian implikasinya dikembalikan oleh ekspresi lambda.sumber
Python, 29 byte
Cobalah online
sumber
JavaScript (ES6),
3028 byteDisimpan 2 byte berkat @Arnauld
Ini pada dasarnya menghitung bit mundur satu per satu: Kita mulai dengan q = 0 ; sementara n bernilai positif, kita mengalikan q dengan 2, memutuskan bit terakhir dari n dengan
n>>1
, dan menambahkannya ke q dengan|n%2
. Ketika n mencapai 0, angka telah berhasil dibalik, dan kami mengembalikan q .Berkat nama bawaan JS yang panjang, menyelesaikan tantangan ini dengan cara mudah membutuhkan 44 byte:
Menggunakan rekursi dan string, Anda bisa mendapatkan solusi 32 byte yang melakukan hal yang sama:
sumber
f=(n,q)=>n?f(n>>1,q*2|n%2):q
hampir berhasil. Tapi sayangnya tidak untukn=0
.Java 8,
53474645 byteIni adalah ungkapan lambda yang memiliki prinsip yang sama dengan jawaban ETH (walaupun rekursi terlalu bertele-tele di Jawa, jadi kami menggunakan loop):
Cobalah online!
Ini dapat ditugaskan dengan
IntFunction<Integer> f = ...
, dan kemudian dipanggil denganf.apply(num)
. Diperluas, tidak diserang, dan dikomentari, terlihat seperti ini:sumber
t*2
alih - alih(t<<1)
, satu lagi dengan memindahkan perhitungan itu dari loop head ke loop body. Bisakah Anda menggunakanx
bukanx>0
untuk kondisinya?x>>=1
dapat diganti denganx/=2
karena akan secara otomatis menjadi divisi integer.t=t*2+
ket+=t+
.)J, 6 byte
|.
membalikkan&.
dibawah#:
basis 2sumber
Jelly , 3 byte
Cobalah online!
sumber
Mathematica, 19 byte
sumber
Labirin, 23 byte
Yah, ini aneh ... ini mengembalikan nomor BINARY terbalik ... Terima kasih @Martin Ender karena menunjukkan bug saya dan kesalahan ID 10T saya. Jadi ini tidak berhasil, saya harus mencari solusi lain.
sumber
# Labyrinth, 89 bytes
_
ada di persimpangan.C,
48444342 byte-1 byte berkat gurka dan -1 byte terima kasih kepada anatolyg:
Solusi 44 byte sebelumnya:
Solusi 48 byte sebelumnya:
Tidak digabungkan dan digunakan:
sumber
r
already initialized to zero herer;f(n){r=0;
, e.g. ther=0;
is unnecessary? Also minor typo: "Previous 48 bytes solution"for
loops are always at least as short aswhile
loops, and often shorter.r;f(n){for(r=n&1;n/=2;r=2*r+n%2);return r;}
? 1 byte shorter, but I'm unsure if it's valid C (C99).=
into+=
to make it shorter and more obfuscatedRuby,
2928 bytes"%b" % n formats the input n as a binary string, reverse, then convert back to a number
Usage/Test cases:
sumber
2
is the base he is converting to, andn
is the input.->args{return value}
is the ruby lambda syntax.to_i(2)
?05AB1E, 3 bytes
Try it online!
sumber
Java (OpenJDK), 63 bytes
Try it online!
Thanks to poke for -12 bytes and to Cyoce for -8 bytes!
sumber
a
in this context)print
instead ofprintln
for golfing :)StringBuffer
saves a byte overStringBuilder
+""
instead of.toString()
?Perl 6, 19 bytes
sumber
$_
. It isn't mentioned by name, but thebase
method is called on it.{:2(.base(2).flip)}(10)
at the REPL will print 5. So it meets the standard code-golf criteria for a function.Haskell, 36 bytes
Same algorithm (and length!) as ETHproductions’ JavaScript answer.
sumber
Bash/Unix utilities,
2423 bytesTry it online!
sumber
PHP, 33 bytes
convert to base2, reverse string, convert to decimal. Save to file and run as pipe with
-F
.no builtins:
iterative, 41 bytes
While input has set bits, pop a bit from input and push it to output. Run as pipe with
-nR
.recursive, 52 bytes
sumber
$r+=$r
. But I actually don´t remember why I put that in front.MATL, 4 bytes
Try it online!
Explanation
sumber
Pyth, 6 bytes
Test suite available here.
Explanation
sumber
Japt, 5 bytes
Try it Online!
sumber
)
could be a space too :-)Scala, 40 bytes
Usage:
Explanation:
sumber
Mathematica, 38 bytes
sumber
Groovy, 46 bytes
sumber
it
refers to the argument given to a block IIRCCJam, 8 bytes
Try it online!
Explanation
sumber
Batch, 62 bytes
Explanation: On the first pass,
%1
contains the input parameter while%2
is empty. We therefore evaluaten
as half of%1
andr
as+%1
modulo 2 (the%
operator has to be doubled to quote it). Ifn
is not zero, we then call ourselves tail recursively passing inn
and an expression that gets evaluated on the next pass effectively doublingr
each time.sumber
C#, 98 bytes
sumber
R, 55 bytes
Reads input from stdin and consequently uses the
bin
function from themiscFuncs
package to convert from decimal to a binary vector.sumber
Pushy, 19 bytes
No builtin base conversion!
Try it online!
Pushy has two stacks, and this answer makes use of this extensively.
There are two parts two this program. First,
$&2%v2/;F
, converts the number to its reverse binary representation:Given the example 10, the stacks would appear as following on each iteration:
We can see that after the final iteration,
0, 1, 0, 1
has been created on the second stack - the reverse binary digits of 10,0b1010
.The second part of the code,
L:vK2*;OS#
, is taken from my previous answer which converts binary to decimal. Using the method decsribed and explained in that answer, it converts the binary digits on the stack into a base 10 integer, and prints the result.sumber
k, 18 bytes
Example:
sumber
C#, 167 bytes
Explanation:
Here I will iterate n values and each time iterated integer value is convert to byte value then reverse that byte value and that byte value is converted to integer value.
sumber
STDIN
(I think that isconsole.Read()
but you would probably know better than I would) andSTDOUT
. Anyway, welcome to the site if you want more experienced advice in golfing C# I would recommend codegolf.stackexchange.com/questions/173/….Reverse()
returnesIEnumerable<char>
. AsConvert.ToInt32
doesn't have an overload for IEnumerable it throws an exception. Also the answer doesn't follow the rules for code golf: 1)As nothing is specified the submission has to be a full program or function not just a snippet. 2)using
statements must be included in the byte countc/c++ 136 bytes
It's not going to win, but I wanted to take a different approach in c/c++ 120 bytes in the function
To elaborate on what I am doing, I used the log function to determine the number of bits utilized by the input. Than a series of three bit shifts left/right, inside/outside, even/odd which flips the entire integer. Finally a bit shift to shift the number back to the right. Using decimals for bit shifts instead of hex is a pain but it saved a few bytes.
sumber