Çıkış “Fit” sayıları


21

"Fit Numaraları"

Sam'in sıkıştırma için "mükemmel" bir fikri var! Yardım edebilir misin?


İşte Sam'in sıkıştırma planının bir özeti. İlk önce kesinlikle 2 ^ 16'dan küçük herhangi bir doğal sayının 10 temsilini yapın ve herhangi bir baştaki sıfır olmadan bir ikili dize olarak yazın.

1 -> 1
9 -> 1001
15 -> 1111
13 -> 1101
16 -> 10000
17 -> 10001
65535 -> 111111111111111

Şimdi bir veya daha fazla sıfırdan oluşan herhangi bir grubu tek bir sıfırla değiştirin. Bunun sebebi sayının azalmasıdır. İkili dizginiz şimdi böyle görünecek.

1 -> 1 -> 1
9 -> 1001 -> 101
15 -> 1111 -> 1111
13 -> 1101 -> 1101
16 -> 10000 -> 10
17 -> 10001 -> 101
65535 -> 111111111111111 -> 111111111111111

Şimdi ikili dizgiyi tekrar 10 taban göstergesine dönüştürüyorsunuz ve kabul edilebilir herhangi bir biçimde çıkarıyorsunuz. İşte test durumların. İlk tamsayı bir girişi temsil eder ve son tamsayı bir çıkışı temsil eder. Bazı numaraların değişmediğini ve bu nedenle "uygun" olarak adlandırılabileceğini unutmayın.

1 -> 1 -> 1 -> 1
9 -> 1001 -> 101 -> 5
15 -> 1111 -> 1111 -> 15
13 -> 1101 -> 1101 -> 13
16 -> 10000 -> 10 -> 2
17 -> 10001 -> 101 -> 5
65535 -> 1111111111111111 -> 1111111111111111 -> 65535
65000 -> 1111110111101000 -> 11111101111010 -> 16250


Herhangi bir dili kullanabilirsiniz, ancak Sam'in standart boşluklardan nefret ettiğini lütfen unutmayın. Bu kod golf olduğundan kod "sıkıştırılmış" sayılara yer açmak için mümkün olduğunca kısa olabilir.
Not: Bu kabul edilebilir bir sıkıştırma şeması DEĞİLDİR. Bunu kullanmak derhal kovulmanıza neden olur.
Atıf Yapılması Gereken: Bu konsept için kredi almıyorum. Bu @Conor O' Brien blog gelen gelir buraya uyum sayıların bu OEIS bakın. https://oeis.org/A090078


1
@
Conor'un

3
OEIS A090078 kullanışlı olabilir.
Adnan,

Çizgi romanı ben yazdım. <s> Ayrıca% 35 rep telif hakkı bekliyordum </s>;)
Conor O'Brien

Redüktör sorunu açıklar mı?
Rohan Jhunjhunwala

1
Neden 16, 8'e eşittir? 16 olmamalı 10000mı?
saat

Yanıtlar:


10

05AB1E , 8 6 bayt

b00¬:C

açıklama

b        # convert input to binary
 00¬:    # replace 00 with 0 while possible
     C   # convert to int

Çevrimiçi deneyin

Adnan sayesinde 2 bayt kaydedildi


Sen yerini alabilir „00'0tarafından 00¬:).
Adnan

@Adnan Güzel! Bunu düşünmedim.
Emigna

Onları neden açıkça dize olarak
ittiğimi

Evet, biraz sezgisel, ama işe yarıyor :).
Adnan

Bu kazanacak gibi görünüyor: D, daha fazla insanın katılabilmesi için kabul etmeden önce biraz daha zaman vereceğim.
Rohan Jhunjhunwala


7

JavaScript (ES6), 41 bayt

n=>+`0b${n.toString(2).replace(/0+/g,0)}`

7

Denizanası , 20 bayt

p
d
# S
,1
*
\dbi
 2

Çevrimiçi deneyin!

açıklama

  • i giriş.
  • b onu ikiliye dönüştürür (basamak listesi)
  • \dArgümanlar 2ve sayı listesi, sayı listesinin dher uzunluğu-2 alt dizesine (sayıya ikili sayı) uygulanır .
  • * sonuçların önemini alır: 00 0'a, her şey 1'e gider.
  • ,1 1'e sonuna kadar dokunduğundan, son rakam kaybolmaz.
  • # Sbiyukarıda hesaplanan listede 1 olan hanelerden birini seçer : 00'ın sol yarısı olmayanlar.
  • dsayıya geri döner ve psonucu yazdırır.

6

Python 2,36 bayt

f=lambda n:n and f(n/2)<<(n%4>0)|n%2

Temel dönüştürme yerleşikleri veya dizge işlemleri olmadan doğrudan özyinelemeli uygulama. Daha az golf oynadı:

f=lambda n:n and[f(n/2),n%2+2*f(n/2)][n%4>0]

n4'ün katı olduğunda , ikilik 0'da ikili olarak sona erer, bu yüzden birini 2'ye bölerek böleriz. Aksi halde nayrılır (n%2) + 2*(n/2), son ikili basamağı n%2tek başına bırakırız ve diğer basamaklarda tekrar ederiz n/2.


n%2Gereksiz değil mi?
xsot

@ xsot Ne demek istediğinden emin değilsin. Yapmak |nyanlış sonuçlar verir.
xnor

Sana bütün yerini alabilir demek (n%4>0)|n%2olan (n%4>0).
xsot

@ xsot Öncelik şu şekildedir (f(n/2)<<(n%4>0)) | n%2.
xnor,

Ah, o zaman benim kötüüm. Değişimin en düşük önceliğe sahip olduğunu düşündüm.
xsot

5

Bash (sed + bc), 60 55 43 bayt

echo $[2#`bc<<<obase=2\;$1|sed s/00\*/0/g`]

Düzenle:

  1. değiştirildi sed -E 's/0+için sed 's/00*ve değiştirilmiş yankı ve boru ile bc değer geçirmek için kullanılır <<<.
  2. @Digital Trauma tarafından mükemmel öneri!

örnek:

$ bash script.sh 65000
16250
$ bash script.sh 15
15
$ bash script.sh 9
5

1
sed + bc de benim ilk düşüncemdi. echo "obase=2;$1"|bc|sed 's/00*/0/g;s/^/ibase=2;/'|bc2 bayt daha kısa
Riley,

1
Kendi yararınıza boru ve kaçar kullanın: echo $[2#`bc<<<obase=2\;$1|sed s/00\*/0/g`]. Ancak dcve tr daha kısa hale getirin .
Dijital Travma

1
@DigitalTrauma: Teşekkürler, bu harika! @Riley: güzel fikir, böyle biraz daha kısa olurdu:bc<<<"obase=2;$1"|sed 's/00*/0/g;s/^/ibase=2;/'|bc
Master_ex

Eğer kullanırsanız tr -s 0sed yerine 36 bayt aşağı alabilirsiniz
Riley

@Riley: Doğru, ancak Digital Trauma zaten diğer bash cevabında kullanıyor, bu yüzden kullanmamayı tercih ediyorum :)
Master_ex 17:16

4

Perl 6 ,  31  27 bayt

{:2(.base(2).subst(:g,/0+/,0))}
{:2(.base(2)~~{S:g/0+/0/})}

Açıklama:

-> $_ {
  # convert from base 2
  :2(

    # convert to base 2
    $_.base(2)

    # substitute
    .subst(
      :global,
      / 0+ /,  # all substrings made of 0s
      '0'      # with one 0
    )
  )
}

Örnek:

my &fit-compress = {:2(.base(2)~~{S:g/0+/0/})}
say fit-compress 1;     # 1
say fit-compress 9;     # 5
say fit-compress 15;    # 15
say fit-compress 13;    # 13
say fit-compress 16;    # 2
say fit-compress 17;    # 5
say fit-compress 65535; # 65535
say fit-compress 65000; # 16250

# number created with 「:2( [~] <0 1>.roll: 256 )」
say fit-compress 80794946326210692074631955353531749442835289622757526957697718534769445507500
# 4240335298301026395935723255481812004519990428936918

4

MATL, 11 9 8 bayt

BFFOZtXB

Bu sürüm sadece MATLAB'de çalışır çünkü strrepMATLAB'de mantıksal girdiler kullanılabilir. Burada, açıkça yazmak için mantıksal girdileri yayınlayan Octave (9 bayt) (ve böylece çevrimiçi tercüman) çalışacak bir versiyonudur double.

Çevrimiçi deneyin

açıklama

    % Implicitly grab input
B   % Convert decimal to binary
FF  % Create the array [0 0]
O   % Number literal
Zt  % Replaces all [0 0] with [0] (will replace any number of 0's with 0)
XB  % Convert binary to decimal
    % Implicitly display

4

Python 3, 55 , 50 bayt.

Sp3000 sayesinde 4 bayt kurtardı.

Oldukça basit bir çözüm.

import re
f=lambda x:eval(re.sub('0+','0',bin(x)))

4
0bSadece evalyerine tutabilir misin ?
Sp3000,

@ Sp3000 Kesinlikle yapabilirsiniz! Önerin için teşekkürler!
Morgan Thrapp

Anonim lambdalara izin verilir; kullanarak bunu 48 bayta daraltabilirsinizlambda x:eval(re.sub('0+','0',bin(x))) <insert newline here> import re
MilkyWay90

3

Javascript (ES6), 40 bayt

n=>'0b'+n.toString(2).replace(/0+/g,0)-0

1
Korkarım bu bir snippet. Görev tanımında aksi belirtilmediği sürece, çözümlerin ya tam program ya da işlev olması beklenir.
Manat çalışması

İşlev kullanmak istemiyorsam Javascript'te "tam program" olması gereken nedir? Tavsiye lütfen.
cychoi

Node.js ile Örnek: console.log(+('0b'+parseInt(process.argv[1]).toString(2).replace(/0+/g,0))).
Manat çalışması

Konu dışı. Kod bloğunuzda @Master_ex ile aynı sorun var. Bazı popüler kabuk config komut dosyalarının terminali kirlettiği için mi? Ya da SE'nin suçu?
cychoi

1
En kısa düzeltme, N=>geçerli bir işlev sunumu yapan hazırlığı yapmak olacaktır.
Martin Ender

3

Aslında, 14 bayt (rekabet etmeyen)

├`'0;;+(Æ`Y2@¿

Çevrimiçi deneyin!

Bu gönderi rakip değil çünkü Æ bu zorluğun yayınlanmasından sonra .

Açıklama:

├`'0;;+(Æ`Y2@¿
├               bin(input) (automatically discards leading zeroes)
 `'0;;+(Æ`Y     call this function until the output stops changing:
  '0;;+           push "0", "00"
       (Æ         replace "00" with "0" in binary string
           2@¿  convert from binary to decimal

O zaman rakip bir versiyonunu yayınla!
Sızdıran Rahibe



2

PHP, 53 51 Bayt

<?=bindec(preg_replace("/0+/",0,decbin($argv[1])));

Konsoldan bir argüman alır.

Sayesinde:

@ manatwork "0" yerine 0


1
Çoğunlukla "0"ve 0aynı şekilde ele alınır.
Manat çalışması

@ manatwork Teşekkürler. Kendimi görmem gereken çok açıktı.
Jeroen

2

Perl, 38 + 1 ( -p) = 39 bayt

$_=oct"0b".sprintf("%b",$_)=~s/0+/0/gr

İhtiyaçları -p(Eklediğim vadede bayrağı -ldaha okunabilir hale getirmek için bayrak, ancak aksi gerekmedikçe):

perl -plE '$_=oct"0b".sprintf("%b",$_)=~s/0+/0/gr' <<< "1
9
15
13
16
17
65535
65000"

Kod hakkında söylenecek çok şey var: sayıyı binary ( sprintf"%b") değerine dönüştürür, ardından sıfır bloklarını yalnızca bir sıfır ile değiştirir ve sonucu ondalık ( oct"0b".) değerine dönüştürür .


2

C #, 112 91 bayt

int x(int x)=>Convert.ToInt32(Rege‌​x.Replace(Convert.ToS‌​tring(x,2),"0+","0"),2);

TuukkaX sayesinde -8 bayt


int f(int x){var a=Regex.Replace(Convert.ToString(x,2),"0+","0");return Convert.ToInt32(a,2);}- Regex kullanarak 94 bayt. Çok fazla C # çözümü görmedim, System.Text.RegularExpressionsbu yüzden de burada izin verilebilir ...?
Yytsi

int f(int x){return Convert.ToInt32(Regex.Replace(Convert.ToString(x,2),"0+","0"),2);}86 bayt.
Yytsi


Ben de o sayfayı kullandım, fakat işe yaramadı, ben de farklı bir sayfa kullandım. Ayrıca gerekli C # versiyonundan da bahsetmelisiniz.
Yytsi

mothereff.in/byte-counter mevcut çözümünüz için 79 bayt hesaplar. Çözümü elle
yazmam

2

Java, 75

int f(Integer x){return x.valueOf(x.toString(x,2).replaceAll("0+","0"),2);}

Test programı:

public class Fit {
    int f(Integer x){return x.valueOf(x.toString(x,2).replaceAll("0+","0"),2);}

    public static void main(final String... args) {
        final Fit x = new Fit();
        System.out.println(x.f(65000));
    }
}

Java 8 lamda dönüştürür x-> blah; daha az sayıda bayt için
Rohan Jhunjhunwala

int f (Tamsayı x) {return x.parseInt (x.toString (x, 2) .replaceAll ("0 +", "0"));} daha az sayıda bayt için
Rohan Jhunjhunwala

@RohanJhunjhunwala Bu yanlış, üs 2'yi kullanması gerekiyor. Lambda gelince, tür belirtimi olmadan eksik olduğunu hissediyorum.
aditsu

oh tamam, diğer java cevabı aynı tekniği kullanıyor
Rohan Jhunjhunwala



1

PowerShell v2 +, 69 bayt

[convert]::ToInt32(([convert]::ToString($args[0],2)-replace'0+',0),2)

( PowerShell'de ikiliye dönüştürmek için daha kısa bir yol )

Girdi alır $args[0], [convert]::ToString(int,base)girdi tamsayısını ikili temel dizgeye dönüştürmek için .NET'in yerleşikini kullanır . Bu -replace, bir veya daha fazla sıfırın herhangi bir işlemini tam olarak sıyrılmak için filtreden geçirilir 0. Bu sonuçtaki dize, [convert]::ToInt32(string,base)ikiliyi bir tamsayıya dönüştürmek için diğer yöne geri gönderilir . Bu tamsayı boru hattında bırakılır ve çıktı gizlidir.

Test Kılıfları

PS C:\Tools\Scripts\golfing> 1,9,15,13,16,17,65535,65000|%{"$_ -> " +(.\output-fit-number.ps1 $_)}
1 -> 1
9 -> 5
15 -> 15
13 -> 13
16 -> 2
17 -> 5
65535 -> 65535
65000 -> 16250

1

SILOS’ta "Yalnızca" 417 baytta başvuru

golfed

readIO :
i + 1
I = i
z = 1 
n = 32
b = n
z = 1
n = b
lbla
n - 1
GOSUB p
j = i
j - p
if j b
if z c
z = 1
GOTO e
lblc
b - 1
if n a
GOTO f
lblb
z = 0
A = a
A + 1000
set A 1
i - p
lble
a + 1
if n a
lblf
q = 1000
e = q
e + b
i = 0
lbl>
d = q
d - e
if d ?
n = b
n - i
GOSUB p
g = get q
g * p
o + g
i + 1
q + 1
GOTO >
lbl?
o / 2
printInt o
GOTO z
funcp
p = 1
Z = n
lblQ
if Z C
GOTO D
lblC
Z - 1
p * 2
GOTO Q
lblD
return
lblz

İşte referans uygulaması tamamen ungolfed. Bonus bir özellik olarak, bir cevaba ulaşmak için gereken adımları verir.

/**
*Reference Implementation in the high quality S.I.L.O.S language.
*/
readIO Enter a number to "compress"
//some declarations
i + 1
I = i
z = 1 
//the above is a flag which shows whether or not a zero was last outputted
n = 32
b = n
//maximum number of input bits
printLine Original Binary



lblbinLoop
n - 1
GOSUB pow
j = I
j - p
if j printOne
if z ENDLOOP
print 0
GOTO ENDLOOP
lblprintOne
z = 0
print 1
I - p
lblENDLOOP
if n binLoop




printLine  
printLine Binary "Compressed"


z = 1
n = b


lbltopA
n - 1
GOSUB pow
j = i
j - p
if j printAOne
if z DontPrint
z = 1
print 0
GOTO ENDLOOPA
lblDontPrint
b - 1
if n topA
GOTO endOfBin
lblprintAOne
z = 0
print 1
A = a
A + 1000
set A 1
i - p
lblENDLOOPA
a + 1
if n topA

lblendOfBin

printLine  
printLine -----------
printLine Base 10 Output
print Out Bits:
printInt b

q = 1000
e = q
e + b
i = 0
lblOutputDec
d = q
d - e
if d DONE
n = b
n - i
GOSUB pow
g = get q
g * p
o + g
i + 1
q + 1
GOTO OutputDec
lblDONE
printLine
printLine ---------
o / 2
printInt o

GOTO funcs
//function declarations must be wrapped in gotoes to avoid the interpreter from complaining (breaking)

/**
*This will store the nth power of two in the "p" variable
*/
funcpow
p = 1
Z = n
lbltop
if Z continue
GOTO end
lblcontinue
Z - 1
p * 2
GOTO top
lblend
return

lblfuncs

İsteğe bağlı olarak aktarım silindi. Düzenlemek için düzenleme geçmişini görüntülemek için çekinmeyin, aksi takdirde bu repo'ya gidin. bir tercüman .

65000 için örnek çıktı

Enter a number to "compress"
65000
Original Binary
1111110111101000 
Binary "Compressed"
11111101111010 
-----------
Base 10 Output
Out Bits:14
---------
16250

4
Referans uygulamaları asılsız olduklarından ve bu nedenle ciddi rakipler olmadıklarından, cevap olarak değil, meydan okuma organında olmalıdır.
Mego,

Tamam, golf oynarım.
Rohan Jhunjhunwala

Bu meydan okuma gövdesini bu @Mego
Rohan Jhunjhunwala ile

@TimmyD Bir saniye şimdi golf oynuyorum
Rohan Jhunjhunwala

@Mego Ben şimdi golf oynadım
Rohan Jhunjhunwala


1

Retina , 30 bayt

.+
$*1;
+`(1+)\1
$1;
1;
1
;+
0

Çevrimiçi deneyin!

Ve burada Retina'nın ilk cevaplar arasında olacağını düşündüm ...


@randomra Açıklama sorusu OP soruyorum
Leaky Nun

Retina, ikili dönüşüm için ikili dönüşüm veya ikili dönüşüm için ikili dönüşüm yapabiliyor mu? Ben ikisini de hariç tutacağım, Retina
Rohan Jhunjhunwala'yı

@RohanJhunjhunwala: Evet, öyle
Business Cat

Is it possible to make this convert to unary or decimal? Ideally I would like to see decimal, but I will accept either.
Rohan Jhunjhunwala

1

Java, 152 143 138 bytes

interface C{static void main(String[]b){Integer i=0;System.out.print(i.parseInt(i.toString(i.parseInt(b[0]),2).replaceAll("0+","0"),2));}}
  • 9 bytes less thanks to @RohanJhunjhunwala. I prefer to keep it as a fully functioning program with main and the like. However, of course it can be golfed more otherwise.
  • 5 bytes less thanks to @LeakyNun's suggestions.

1
class A{public static void main(String[] a){Integer i;System.out.print(i.parseInt(i.toBinaryString(i.parseInt(a[0])).replaceAll("0+","0"),2));}} for 8 bytes of saving
Rohan Jhunjhunwala

wrap it in a lambda expression for even more saving and remove class definitions, and your set.
Rohan Jhunjhunwala

@RohanJhunjhunwala:Ah! The Integer i; part is simple and fantastic!
Master_ex

1
It works, but may produce a warning (as opposed to an error) on most sane IDE's. The thing is, you can always call static methods from a non static context, but you can never call a non-static method from a static context. While using this technique is strongly strongly discouraged in production code, it is legal java.
Rohan Jhunjhunwala

1
codegolf.stackexchange.com/questions/6671/… Is a good read to get more familiar with the lesser known (dare I say shadier) "features" of the java language.
Rohan Jhunjhunwala

1

Dyalog APL, 19 bytes

{2⊥⍵/⍨~0 0⍷⍵}2∘⊥⍣¯1

TryAPL online!

This function is really an "atop" of two functions, the first function is:

2∘⊥⍣¯1 the inverse of binary-to-decimal conversion, i.e. binary-from-decimal conversion
two 2 is bound to -to-decimal
repeat the operation negative one time ¯1 (i.e. once, but inverted)

In the second function, the above's binary result is represented by :

{2⊥⍵/⍨~0 0⍷⍵}
0 0⍷⍵ Boolean for where {0, 0} begins in ⍵
~ Boolean negation, so now we have ᴛʀᴜᴇ everywhere but at non-first zeros in zero-runs
⍵/⍨ use that to filter ⍵, so this removes our unwanted zeros
2⊥ convert binary-to-decimal


1

TSQL, 143 bytes

Not using build ins to convert from and to binary.

Golfed:

DECLARE @i INT=65000

,@ CHAR(99)=''WHILE @i>0SELECT @=REPLACE(LEFT(@i%2,1)+@,'00',0),@i/=2WHILE @>''SELECT @i+=LEFT(@,1)*POWER(2,LEN(@)-1),@=STUFF(@,1,1,'')PRINT @i

Ungolfed:

DECLARE @i INT=65000

,@ CHAR(99)=''
WHILE @i>0
  SELECT @=REPLACE(LEFT(@i%2,1)+@,'00',0),@i/=2

WHILE @>''
  SELECT @i+=LEFT(@,1)*POWER(2,LEN(@)-1),@=STUFF(@,1,1,'')

PRINT @i

Fiddle


+1 for not using built ins. My S.I.L.O.S answer (reference implementation) does the same, but it got downvoted as people didn't think it was a serious competitor. Is the new line significant?
Rohan Jhunjhunwala

@RohanJhunjhunwala the new line is not significant. I am counting the characters of the code after the input variable has been defined and assigned a value.
t-clausen.dk

ok amkes sense -
Rohan Jhunjhunwala

@RohanJhunjhunwala I think it is cool that you use an unconversial language to solve Codegolf questions. It does seem you have unnecessary code to add extra information - probably only in your ungolfed version though. You should always try to provide the shortest code possible, cutting corners and abusing language querks(within the scope of the question). If possible you should provide a fiddle, so muggles me can test it
t-clausen.dk

The ungolfed version contains unnecessary code, but the golfed version contains no additional code. I can transpiler it into java if you want me to test it.
Rohan Jhunjhunwala

1

CJam, 16

q~2b1+0a%0a*);2b

Try it online

It's quite long due to lack of regex.

Explanation:

q~     read and evaluate the input number
2b     convert to base 2 (array of 1s and 0s)
1+     append a 1 to deal with trailing zeros
0a%    split by [0], dropping empty pieces; only chunks of 1s are left
0a*    join by [0]
);     discard the 1 we appended before
2b     convert back from base 2

1

Java, 64 bytes

i->{return i.parseInt(i.toString(i,2).replaceAll("0+","0"),2);};

Test Program

public static void main(String[] args) {
    Function<Integer, Integer> function = i -> {
        return i.parseInt(i.toString(i, 2).replaceAll("0+", "0"), 2);
    };

    System.out.println(function.apply(1)); // 1
    System.out.println(function.apply(9)); // 5
    System.out.println(function.apply(15)); // 15
    System.out.println(function.apply(13)); // 13
    System.out.println(function.apply(16)); // 2
    System.out.println(function.apply(17)); // 5
    System.out.println(function.apply(65535)); // 65535
}

1

CJam, 23 bytes

ri2be`{_:g:>{:g}&}%e~2b

Try it online!

Explanation

ri          e# Read input as an integer
2b          e# Convert to binary
e`          e# Run-length encoding. Gives a nested (2D) array with run-lengths 
            e# and binary digits
{           e# This block is mapped over the outer array, i.e. is applied to
            e# each inner array
   _        e#   Duplicate the inner array
  :g        e#   Signum of each element of inner array
  :>        e#   This gives true if second element (digit) is false and first
            e#   element (run-length) is not zero. If so, we need to set that
            e#   run-length to 1
  {:g}&     e#   If that's the case, apply signum to original copy of inner
            e#   array, to make run-length 1
}%          e# End block which is mapped over the outer array
e~          e# Run-length decoding
2b          e# Convert from binary. Implicitly display

1

Ruby, 37 35 bytes

Saved two bytes thanks to manatwork.

->a{a.to_s(2).gsub(/0+/,?0).to_i 2}

The naive approach. (:


Regarding "0", see the 2nd point in sepp2k's tip. Regarding .to_i(2), where there is no ambiguity on where a parameter belongs, the parentheses are optional.
manatwork

1

C, 37 bytes

f(x){return x?f(x/2)<<!!(x%4)|x&1:0;}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.