| Bytes | Lang | Time | Link |
|---|---|---|---|
| 023 | JavaScript Node.js | 250628T122635Z | l4m2 |
| 003 | 05AB1E legacy | 250627T033018Z | Lucenapo |
| 029 | Haskell | 160212T215852Z | nimi |
| 040 | C | 160212T231616Z | a contra |
| 035 | Haskell | 160212T220411Z | xnor |
| 004 | Jolf | 160212T215130Z | Conor O& |
| 029 | JavaScript ES6 | 160212T212801Z | Andreas |
| 020 | Python | 160212T212116Z | xnor |
| 005 | Pyth | 160212T212418Z | Doorknob |
| 003 | Jelly | 160212T212456Z | lynn |
Haskell, 41 38 30 29 bytes
l="":[b:x|x<-l,b<-"01"]
(l!!)
Usage example: (l!!) 4 -> "10".
Starting with the empty list as the first element, walk lazily through the list and append the current element with 0 and with 1 in front of it.
Edit: @xnor saved 3 11 bytes. Thanks!
C, 40 bytes
f(n){if(++n/2)putchar(n%2+48),f(n/2-1);}
Converts the input to bijective base 2 (with symbols 0 and 1), like the other answers.
Haskell, 35 bytes
h 1=[]
h n=mod n 2:h(div n 2)
h.(+1)
Haskell doesn't have a binary built-in, so the (reversed) conversion is done manually. To remove the initial 1, the base case has 1 transform to the empty list.
Edit: Saved a byte by conjugating by the +1 instead.
h 0=[]
h m=1-mod m 2:h(div(m+1)2-1)
Jolf, 4 bytes
wBhj
hj input + 1
B converted to binary
w with first removed.
Very simple strategy, also happens to be the shortest.
JavaScript (ES6), 29 bytes
x=>(~x).toString(2).slice(2)
Same idea as xnor.
f=x=>(~x).toString(2).slice(2);
[...Array(100)].map((v,x)=>A.textContent+=x + ': ' + f(x) + '\n')
<pre id=A></pre>
Python, 20 bytes
lambda n:bin(~n)[4:]
Test:
>> [bin(~n)[4:] for n in range(16)]
['', '0', '1', '00', '01', '10', '11', '000', '001', '010', '011', '100', '101', '110', '111', '0000']
Doing lambda n:bin(n+1)[3:] increments the input, then takes the binary representation with the first symbol removed ([3:] because the prefix 0b is two chars chars). Since any positive number starts with 1 in binary, this uniquely gives a binary representation.
A byte is saved by instead using the bit complement ~n to get the negation -(n+1), and removing the negative sign by chopping off one more symbol.
Pyth, 5 bytes
t.BhQ
Simply a translation of xnor's answer into Pyth.
Q is eval()'d input(), h increments it, .B converts it to a binary string, and t takes the "tail" (which is everything except the first character).
Jelly, 3 bytes
‘BḊ
Same idea as xnor: maps 0 1 2 3 4 ... to [] [0] [1] [0 0] [0 1] ...; the code is basically increment → binary → remove first.