你刚被一家德国汽车制造公司雇用。作为一名工程师,您的第一项任务是编写一个计算ASCII字符串的生态足迹的程序。
字符的生态足迹计算如下:
用二进制语言编写字符的ASCII代码,并计算出1's的个数。
例如,A
的内存占用量为2,但O
的内存占用空间为5,更脏。
字符串的全局足迹是其字符的足迹之和。空字符串的占用空间为零。
您的程序必须接受ASCII字符串作为参数(通过命令行或输入),计算其生态足迹,并输出它。程序本身必须被ASCII编码。
不过还是有个小插曲。由于您的公司希望进入一个新的市场,更严格的环境规则,您需要调整您的程序,以便它的行为在“测试模式”不同。因此:
当接收字符串
test
作为参数时,程序应该输出0。
具有最小生态足迹的源代码获胜(是的,答案test
是被禁止的!)
发布于 2015-09-26 03:36:59
输出是在一元中,因为Lenguage/Brainfuck没有正确的方式打印基10中的整数。
实际的源代码包含
22360559967824444567791709913713659826044558304969374451791514225490473373040212332757409553558758107085015797320276213515502796255082717802632399123502087743818475438512153373406931103005017157351410347278489842099128517039634739852783737052963203448945756470632484148121769939122103257063633371522287190530269279693540898545359211009781370158317748609540216376596783541124510013448091325488601732964773653391702083563797082990404753843419895799343996435988722965711513708742853668363743953430527328863418281733901770990932025503662188187254784985474815936854540100376410040743052620419372327997519047616042603909398552951490180076364164838561112002025592431155898041427468731461614504254168899805662501979953318388813759833797929243626668399650485310047043700001093878284174322463350892654886806075148010832042248607926124030339950499631072150856939786062937034833055717723216663269161130154002679878012158315587925933383341827053312086716181702533743607685576475754259877651521989944802973721727159955208722180232955193930065862370838526521351991966172723976565264862909528310162816593997640732796289501819499741414526385058421824690665542546821941125191276568479078107133076037506211133628962099403163812267452274532219562823184225236020523509355625620557197876838014050964240952738109101849512504021041103516630358995290177306585560988278630098667702211916671663291473843258785929522017507744814910480115446168939335008597569919072874897148594826036210511162928991890818427747059833051607455121463371211282760364668765311589329918870071117807132901910082663054895226456039171170783440772764031568108965851688162729239711772886386306884508520204834432674839183166053019421652064937613583258148354531835035461504442885024563141848164279928769795684221364984104923764359842286827870778678989243517189772102669283996930513577004801536579491093711362942690905779844535371088542020595945700544234301668098553671685123172583259206072965508639556627967633275762621813851479909708616154198658896714629908456913467267354690109885368211752176196164620615081464122410029328694509842558492529684841818953632659248840216891072110853731776562597900145806210691868173380612838327841104919352821441230296200143603175486627682007399030356592930049570084097858148122367
空字节,相当于以下Brainfuck程序:
,[<<+++++++++++++++++++++++++++++++++++++++++++++++++>>>>>>,]
>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<
<<<++++++++++++++++++++++++++++
[-<----<<<<----<<<<----<<<<---->>>>>>>>>>>>>]
<----<<<<---<<<<+++++++++++<<<<----
<<<<
[>>>>>>>>>>>>>>>>>>>>>>>>]
>>>>
[>>>>>>>>>>>>>>>>>>>>>>>>]
>>>>
[>>>>>>>>>>>>>>>>>>>>>>>>]
>>>>
[>>>>>>>>>>>>>>>>>>>>>>>>]
>>>>
[>>>>>>>>>>>>>>>>>>>>>>>>]
>>>>
[
<<<<<<<<<<<<<<<<<<<<<<<<
<<<++++++++++++++++++++++++++++
[-<++++<<<<++++<<<<++++<<<<++++>>>>>>>>>>>>>]
<++++<<<<+++<<<<-----------<<<<++++
>>>>>>>>>>>>
[
-[<]<<[.<]
>>>
-[<]<<[.<]
>>>
-[<]<<[..<]
>>>
-[<]<<[.<]
>>>
-[<]<<[..<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[.<]
>>>
-[<]<<[..<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.<]
>>>
-[<]<<[..<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[.<]
>>>
-[<]<<[..<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[......<]
>>>
-[<]<<[.<]
>>>
-[<]<<[..<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[......<]
>>>
-[<]<<[..<]
>>>
-[<]<<[...<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[......<]
>>>
-[<]<<[...<]
>>>
-[<]<<[....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[......<]
>>>
-[<]<<[....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[......<]
>>>
-[<]<<[.....<]
>>>
-[<]<<[......<]
>>>
-[<]<<[......<]
>>>
-[<]<<[.......<]
<
]
]
在brainfuck.tk网上试一试。
Brainfuck代码的长度非常不理想--首先,我硬编码了所有ASCII字符的脚印--但是0是0.
发布于 2015-09-25 11:18:06
z=input();print([sum([bin(ord(i)).count("1")for i in z]),0][z=="test"])
发布于 2015-09-25 14:28:19
编辑Bug fix (没有计算每个字符的第1位)
一个完整的程序,通过弹出输入和输出。在Firefox中进行测试,应该可以在任何现代浏览器中工作。
B=(P=prompt)(H=D=0)
while(B!="test"&&(A=B.charCodeAt(H++)))while(A)D+=A&1,A>>=1
P(D)
一些工具(用Firefox测试)
w=c=>c.toString(2).split('').reduce(function(a,b){return a- -b})
t=[[],[],[],[],[],[],[],[],[]]
u=[[],[],[],[],[],[],[],[],[]]
for(c=1;c<256;c++)
c<33|c>126&c<161 ? t[w(c)].push('\\'+c) : u[w(c)].push('&#'+c+';')
for(i=0; i++<8;)
T.innerHTML+=i+': '+u[i].concat(t[i]).join(' ')+'\n'
function Calc()
{
var r='', t=0, b
I.value.split('').forEach(function(c) {
c = c.charCodeAt(), r += '\n&#'+c+' '+((256+c).toString(2).slice(1))+' : '
for(b=0;c;c>>=1) b += c&1
r += b, t += b
})
R.innerHTML='Total '+t+'\nDetail'+r
}
#I { width: 400px }
<b>Weight table</b><pre id=T></pre><br>
<b>Counter</b><br><textarea id=I></textarea><button onclick="Calc()">-></button> <pre id=R></pre>
https://codegolf.stackexchange.com/questions/58692
复制相似问题