Elias omega编码:encoding
BackgroundElias omega编码是一种通用编码,可以将任意大小的正整数编码成一个位流。给定一个正整数\$N\$,编码算法如下如下:从世界上只有一个零输出。如果\$N=
解答动态
Jelly,11 10字节 对于较短的代码有什么技巧吗?
BL'???1ubf 一元链接接受一个正整数,它产生一个1和0的列表。
在线尝试!怎么做? 更新…
BL'???1UBF-链接:n例如,n=12?-从n开始收集,直到没有更改:?-作为单子的最后三个链接:(3)(1)(0)B-到二进制[1,1,0,0][1,1] [1][0]L-长度4 2 1 1’-减量3 1 0 0gt;[12,3,1,0]?1-在1处拆分[[12,3],[0]]U-翻转[[3,12],[0]]B-到二进制[[[1,1],[1,1,0,0]],[0]]F-压扁[1,1,1,1,0,0]壳,16 13 11字节?Θ↑←?←L? 在线试用!
输出一个平面布尔数组。
-2使用Jonathan Allan的答案中的想法。
Explanation ???Θ↑←?←L?—创建一个无限列表,使用:L?二进制数字长度←递减↑使用最长前缀:←递减时不会出错的元素(1)Θ在0之前? 反转??将每个转换为二进制并展平J,29字节 0(,~#:)~/@
。@,
u 2}。lt;:@#@#:^:a:迭代转换为二进制#:,获取大小#,并递减<;:,结果a:。#U 2}。最后两个元素,所有数字最终达到的10.0…
。@,在0之前加上前缀并反转。(,~#:)~/Reduce从右开始,将每个数字变回二进制并加上前缀。J,29字节(递归方法) 0lt;:@#@])。`[@.(1=]) 联机试用!
-3多亏了Bubbler的实现,我们可以用1行it
直接实现递归公式。
JavaScript(ES6),50字节。toString(2) f=(n,s=0,b=n。toString(2))=gt;gt;n>;!!我?问?f(n,-~i)+q%2:f(i-2,1):“请在线试用!
Zsh,50字节 lt;${${1#?}:+`$0 ${$(([#2]$#1-1))#??}'`}$1${2-0} 在线试试!
纯递归解决方案
lt;${${1#?}:+`$0 ${$(([#2]$#1-1))#??}'`}$1${2-0}$1#N${2-0}#$2,除非它是未设置的;那么替换为quot;${1#?}:+}#如果在删除之后?从$1开始的任何数字都有剩余,然后替换为`$0`#Backtick subshell,$0是当前程序${$([#2]$#1-1))#??}#取#length$1,减去1,替换为2#binary,删除quot;Add空的第二个参数,使${2-0}在递归时不替换任何内容lt;<;#Print to stdoutPerl 5-n,58字节 while($quot;%b";,$\$\=y///c-1}说@a,0 联机试用!
Vyxal,s,13字节 £0{¥
b:L?? 在线试用!
Stax,13 bytes ┴P&;:?▄?╙G2╟ì 运行并调试带有过滤器的it
A生成器。
Ruby,39 bytes f=-gt;1?f[/.$/=~x=quot;%n,x+s]:s} 在线试用!
将\$N\$作为整数的递归函数。正则表达式匹配返回二进制表示形式\$N\$中最后一位的索引,相当于比\$N\$.
Wolfram Language(Mathematica),54 bytes Rest[#gt;0//.A的位长度小一个_/;agt;地板@Log2@agt;a~IntegerDigits~2]&在线试用!
返回一个数字的StringJoin。
C(MinGW),79 bytes 使用itoa(),这是标准中非常缺乏的,但在Windows系统上是存在的。
因此,TIO链接包含该函数的劣质版本,只支持基2。
d;f(n){int s[9]={0};d++;namp;f(strlen(s)-1,itoa(n,s,2));printf(--d?s: quot;,s);} 联机试用!
Python 3,57 56 bytes 由于ovs节省了一个字节!!!
f=lambda n:n>;1和f(len(f'{n:b}')-1)[:-1]+f'{n:b}0'或'0' 联机试用!
输入一个整数并返回一个字符串。
05AB1E,10字节 ?[b?#xAEìglt;##前面加上二进制字符串`′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′;} 在线试用。
Ex夷平面:
n-quot;0quot;0gt;1//循环,只要'n'大于1:;//每次迭代后;r=b+r,//在结果字符串n=b.length()-1前加'b',//将'n'设置为'b'的长度减去1 b=n.toString(n,2);//将'b'设置为'n'转换为二进制字符串返回r;}//在循环后,返回结果字符串'r`Perl 5(-l060p),51 bytes $\=($,=sprintfquot;,$\.$\,$\=-1+length$,而$\>;1}{ 请在线试用!
木炭,16字节 ←0W?θ?←?θ??Lθ?θ 在线试用!链接到详细版本的代码。接受二进制输入。前任夷平面:
←0 输出尾随的0。
w?θ? 重复直到N=1。
←?θ 将N前置到输出。
??lθ?θ 用其二进制递减长度替换N。
20字节表示十进制输入:
Nθ←0W?θ?←??θ2??L?θ?θ 在线试用!链接到详细版本的代码。前任夷平面:
Nθ 输入N.
←0 输出尾随的0。
w?θ? 重复直到N=1。
←??θ2 将N的二进制表示形式前置到输出。
???l?θθ 用其递减的二进制长度替换N。
R,70 64字节 函数(N,o=0){while(N>;1)o=c(N%/%2^((N=log2(N)%/%1):0)%%2,o);o} 联机试用!
令我失望的是,伪代码的一个毫无修饰的迭代实现比我最初的递归方法要短得多……
Red,119 115 bytes func[n][o:copyquot;until[t:copy[]until[insert t n%2 n:to 1 n/2 1lt;1]下一个o] 联机试用!
K(ngn/K),2523bytes 1,/
0,2\'{x}(2/#1u2\)\ 在线试用!第2页
- End
免责声明:
本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。