Otrzymujesz więc POZYTYWNĄ liczbę podstawową 10 (dziesiętną). Twoim zadaniem jest odwrócenie cyfr binarnych i zwrócenie podstawowej liczby 10.
Przykłady:
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)
To wyzwanie dla golfa , więc wygrywa rozwiązanie wykorzystujące najmniej bajtów.
To jest A030101 w OEIS.
code-golf
number
base-conversion
binary
juniorRubyist
źródło
źródło
Odpowiedzi:
Python , 29 bajtów
Wypróbuj online!
Jest to anonimowa, nienazwana funkcja, która zwraca wynik.
Najpierw
bin(n)
konwertuje argument na ciąg binarny. Zwykle odwrócilibyśmy to za pomocą notacji plastra[::-1]
. To odczytuje ciąg z krokiem -1 , tj. Do tyłu. Jednak łańcuchy binarne w Pythonie są poprzedzone znakiem0b
, i dlatego podajemy drugi argument krojenia jako 1 , mówiąc Pythonowi, aby czytał wstecz kończąc się na indeksie 1 , a tym samym nie czytając indeksów 1 i 0 .Teraz, gdy mamy wsteczny ciąg binarny, przekazujemy go
int(...)
z drugim argumentem jako 2 . Odczytuje to ciąg jako liczbę całkowitą podstawową 2, która następnie jest zwracana przez wyrażenie lambda implikacji.źródło
Python, 29 bajtów
Wypróbuj online
źródło
JavaScript (ES6),
3028 bajtówZaoszczędzono 2 bajty dzięki @Arnauld
Zasadniczo oblicza to odwrotnie jeden bit na raz: Zaczynamy od q = 0 ; podczas gdy n jest dodatnie, mnożymy q przez 2, odrywamy ostatni bit od n za pomocą
n>>1
i dodajemy go do q za pomocą|n%2
. Gdy n osiągnie wartość 0, liczba została pomyślnie odwrócona i zwracamy q .Dzięki długim wbudowanym nazwom JS rozwiązanie tego wyzwania w prosty sposób zajmuje 44 bajty:
Używając rekurencji i łańcucha, możesz uzyskać rozwiązanie 32-bajtowe, które robi to samo:
źródło
f=(n,q)=>n?f(n>>1,q*2|n%2):q
prawie działa. Ale niestety nien=0
.Java 8,
53474645 bajtówTo wyrażenie lambda, które ma tę samą zasadę, co odpowiedź ETH (chociaż w Javie rekurencja byłaby zbyt gadatliwa, więc zamiast tego zapętlamy):
Wypróbuj online!
Można to przypisać za pomocą
IntFunction<Integer> f = ...
, a następnie wywołać za pomocąf.apply(num)
. Po rozwinięciu, bez golfa i komentowania wygląda to tak:źródło
t*2
zamiast(t<<1)
, jeszcze jeden, przenosząc te obliczenia z głowy na pętlę. Czy możesz użyćx
zamiastx>0
warunku?x>>=1
można go zastąpić,x/=2
ponieważ automatycznie będzie to dzielenie liczb całkowitych.t=t*2+
nat+=t+
.)J, 6 bajtów
|.
rewers&.
pod#:
baza 2źródło
Galaretka , 3 bajty
Wypróbuj online!
źródło
Mathematica, 19 bajtów
źródło
Labirynt, 23 bajty
Cóż, to jest niezręczne ... zwraca odwrotny numer BINARNY ... Dzięki @Martin Ender za wskazanie zarówno mojego błędu, jak i błędu ID 10T. Więc to nie działa, będę musiał znaleźć inne rozwiązanie.
źródło
# Labyrinth, 89 bytes
_
znajdują się na skrzyżowaniach.C,
48444342 bajtów-1 bajt dzięki gurka i -1 bajt dzięki anatolyg:
Poprzednie rozwiązanie 44 bajtów:
Poprzednie rozwiązanie 48 bajtów:
Niegolfowane i użytkowanie:
źródło
r
już tutaj inicjowany do zerar;f(n){r=0;
, np. Czy nier=0;
jest to konieczne? Również drobna literówka: „Poprzednie rozwiązanie 48 bajtów”for
pętle są zawsze co najmniej tak krótkie jakwhile
pętle, a często krótsze.r;f(n){for(r=n&1;n/=2;r=2*r+n%2);return r;}
? 1 bajt krótszy, ale nie jestem pewien, czy jest to poprawne C (C99).=
do+=
zrobić to krótsze i bardziej ukrywaneRuby,
2928 bajtów„% b”% n formatuje wejście n jako ciąg binarny, odwraca, a następnie konwertuje z powrotem na liczbę
Przypadki użycia / testowe:
źródło
2
jest bazą, na którą konwertuje, in
jest wkładem.->args{return value}
jest składnią ruby lambda.to_i(2)
?05AB1E , 3 bajty
Wypróbuj online!
źródło
Java (OpenJDK) , 63 bajty
Wypróbuj online!
Dzięki poke za -12 bajtów i Cyoce za -8 bajtów!
źródło
a
w tym kontekście)print
instead ofprintln
for golfing :)StringBuffer
saves a byte overStringBuilder
+""
instead of.toString()
?Perl 6, 19 bytes
źródło
$_
. 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.
źródło
Bash/Unix utilities,
2423 bytesTry it online!
źródło
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
źródło
$r+=$r
. But I actually don´t remember why I put that in front.MATL, 4 bytes
Try it online!
Explanation
źródło
Pyth, 6 bytes
Test suite available here.
Explanation
źródło
Japt, 5 bytes
Try it Online!
źródło
)
could be a space too :-)Scala, 40 bytes
Usage:
Explanation:
źródło
Mathematica, 38 bytes
źródło
Groovy, 46 bytes
źródło
it
refers to the argument given to a block IIRCCJam, 8 bytes
Try it online!
Explanation
źródło
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.źródło
C#, 98 bytes
źródło
R, 55 bytes
Reads input from stdin and consequently uses the
bin
function from themiscFuncs
package to convert from decimal to a binary vector.źródło
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.źródło
k, 18 bytes
Example:
źródło
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.
źródło
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.
źródło