Elias omega編碼:encoding
BackgroundElias omega編碼是一種通用編碼,可以將任意大小的正整數(shù)編碼成一個(gè)位流。給定一個(gè)正整數(shù)\$N\$,編碼算法如下如下:從世界上只有一個(gè)零輸出。如果\$N=
解答動(dòng)態(tài)
Jelly,11 10字節(jié) 對于較短的代碼有什么技巧嗎?
BL'???1ubf 一元鏈接接受一個(gè)正整數(shù),它產(chǎn)生一個(gè)1和0的列表。
在線嘗試!怎么做? 更新…
BL'???1UBF-鏈接:n例如,n=12?-從n開始收集,直到?jīng)]有更改:?-作為單子的最后三個(gè)鏈接:(3)(1)(0)B-到二進(jìn)制[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-翻轉(zhuǎn)[[3,12],[0]]B-到二進(jìn)制[[[1,1],[1,1,0,0]],[0]]F-壓扁[1,1,1,1,0,0]殼,16 13 11字節(jié)?Θ↑←?←L? 在線試用!
輸出一個(gè)平面布爾數(shù)組。
-2使用Jonathan Allan的答案中的想法。
Explanation ???Θ↑←?←L?—?jiǎng)?chuàng)建一個(gè)無限列表,使用:L?二進(jìn)制數(shù)字長度←遞減↑使用最長前綴:←遞減時(shí)不會(huì)出錯(cuò)的元素(1)Θ在0之前? 反轉(zhuǎn)??將每個(gè)轉(zhuǎn)換為二進(jìn)制并展平J,29字節(jié) 0(,~#:)~/@
。@,
u 2}。lt;:@#@#:^:a:迭代轉(zhuǎn)換為二進(jìn)制#:,獲取大小#,并遞減<;:,結(jié)果a:。#U 2}。最后兩個(gè)元素,所有數(shù)字最終達(dá)到的10.0…
。@,在0之前加上前綴并反轉(zhuǎn)。(,~#:)~/Reduce從右開始,將每個(gè)數(shù)字變回二進(jìn)制并加上前綴。J,29字節(jié)(遞歸方法) 0lt;:@#@])。`[@.(1=]) 聯(lián)機(jī)試用!
-3多虧了Bubbler的實(shí)現(xiàn),我們可以用1行it
直接實(shí)現(xiàn)遞歸公式。
JavaScript(ES6),50字節(jié)。toString(2) f=(n,s=0,b=n。toString(2))=gt;gt;n>;。∥?問?f(n,-~i)+q%2:f(i-2,1):“請?jiān)诰試用!
Zsh,50字節(jié) lt;${${1#?}:+`$0 ${$(([#2]$#1-1))#??}'`}$1${2-0} 在線試試!
純遞歸解決方案
lt;${${1#?}:+`$0 ${$(([#2]$#1-1))#??}'`}$1${2-0}$1#N${2-0}#$2,除非它是未設(shè)置的;那么替換為quot;${1#?}:+}#如果在刪除之后?從$1開始的任何數(shù)字都有剩余,然后替換為`$0`#Backtick subshell,$0是當(dāng)前程序${$([#2]$#1-1))#??}#取#length$1,減去1,替換為2#binary,刪除quot;Add空的第二個(gè)參數(shù),使${2-0}在遞歸時(shí)不替換任何內(nèi)容lt;<;#Print to stdoutPerl 5-n,58字節(jié) while($quot;%b";,$\$\=y///c-1}說@a,0 聯(lián)機(jī)試用!
Vyxal,s,13字節(jié) £0{¥
b:L?? 在線試用!
Stax,13 bytes ┴P&;:?▄?╙G2╟ì 運(yùn)行并調(diào)試帶有過濾器的it
A生成器。
Ruby,39 bytes f=-gt;1?f[/.$/=~x=quot;%n,x+s]:s} 在線試用!
將\$N\$作為整數(shù)的遞歸函數(shù)。正則表達(dá)式匹配返回二進(jìn)制表示形式\$N\$中最后一位的索引,相當(dāng)于比\$N\$.
Wolfram Language(Mathematica),54 bytes Rest[#gt;0//.A的位長度小一個(gè)_/;agt;地板@Log2@agt;a~IntegerDigits~2]&在線試用!
返回一個(gè)數(shù)字的StringJoin。
C(MinGW),79 bytes 使用itoa(),這是標(biāo)準(zhǔn)中非常缺乏的,但在Windows系統(tǒng)上是存在的。
因此,TIO鏈接包含該函數(shù)的劣質(zhì)版本,只支持基2。
d;f(n){int s[9]={0};d++;namp;f(strlen(s)-1,itoa(n,s,2));printf(--d?s: quot;,s);} 聯(lián)機(jī)試用!
Python 3,57 56 bytes 由于ovs節(jié)省了一個(gè)字節(jié)。!
f=lambda n:n>;1和f(len(f'{n:b}')-1)[:-1]+f'{n:b}0'或'0' 聯(lián)機(jī)試用!
輸入一個(gè)整數(shù)并返回一個(gè)字符串。
05AB1E,10字節(jié) ?[b?#xAEìglt;##前面加上二進(jìn)制字符串`′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′′;} 在線試用。
Ex夷平面:
n-quot;0quot;0gt;1//循環(huán),只要'n'大于1:;//每次迭代后;r=b+r,//在結(jié)果字符串n=b.length()-1前加'b',//將'n'設(shè)置為'b'的長度減去1 b=n.toString(n,2);//將'b'設(shè)置為'n'轉(zhuǎn)換為二進(jìn)制字符串返回r;}//在循環(huán)后,返回結(jié)果字符串'r`Perl 5(-l060p),51 bytes $\=($,=sprintfquot;,$\.$\,$\=-1+length$,而$\>;1}{ 請?jiān)诰試用!
木炭,16字節(jié) ←0W?θ?←?θ??Lθ?θ 在線試用!鏈接到詳細(xì)版本的代碼。接受二進(jìn)制輸入。前任夷平面:
←0 輸出尾隨的0。
w?θ? 重復(fù)直到N=1。
←?θ 將N前置到輸出。
??lθ?θ 用其二進(jìn)制遞減長度替換N。
20字節(jié)表示十進(jìn)制輸入:
Nθ←0W?θ?←??θ2??L?θ?θ 在線試用!鏈接到詳細(xì)版本的代碼。前任夷平面:
Nθ 輸入N.
←0 輸出尾隨的0。
w?θ? 重復(fù)直到N=1。
←??θ2 將N的二進(jìn)制表示形式前置到輸出。
???l?θθ 用其遞減的二進(jìn)制長度替換N。
R,70 64字節(jié) 函數(shù)(N,o=0){while(N>;1)o=c(N%/%2^((N=log2(N)%/%1):0)%%2,o);o} 聯(lián)機(jī)試用!
令我失望的是,偽代碼的一個(gè)毫無修飾的迭代實(shí)現(xiàn)比我最初的遞歸方法要短得多……
Red,119 115 bytes func[n][o:copyquot;until[t:copy[]until[insert t n%2 n:to 1 n/2 1lt;1]下一個(gè)o] 聯(lián)機(jī)試用!
K(ngn/K),2523bytes 1,/
0,2\'{x}(2/#1u2\)\ 在線試用!第2頁
- End
免責(zé)聲明:
本頁內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無關(guān)。本頁內(nèi)容僅供參考,請您根據(jù)自身實(shí)際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項(xiàng),請咨詢專業(yè)人士處理。