Elias omega编码:encoding

2021-02-16 20:19

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 stdout

                  • Perl 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

                                                  免责声明:

                                                  本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。