Hacker News new | past | comments | ask | show | jobs | submit login
A turing machine in 133 bytes of javascript (swizec.com)
82 points by Swizec on Nov 28, 2011 | hide | past | favorite | 11 comments



$ uglifyjs function tm(I,t,e,s,i,c,k) {i=0;while(s!=e){c=t[i];k=(c)?I[s][c]:I[s].B;if(!k)return false;t.splice(i,1,k.w);i+=k.m;s=k.n;}return t;} function tm(a,b,c,d,e,f,g){e=0;while(d!=c){f=b[e],g=f?a[d][f]:a[d].B;if(!g)return!1;b.splice(e,1,g.w),e+=g.m,d=g.n}return b}


So it's two characters shorter?

I left the two ;} because my syntax highlighter was yelling at me that I'm doing something ugly and I was inside the 140B limit anyway.


No, not just two.

It stripped the space before the first { and between the "return" and "false".

False is represented as !1.

"(c)?foo:bar" is replaced by "c?foo:bar". Plus - semicolons are removed as you noticed.

But - really.. It's ugly enough as it is :)


I'm sure there's room left that the 140byt.es folks will find, but off the bat:

    e=0;while(d!=c)
    for(e=0;d!=c;)


This is the shortest solution somebody has come up with, 79 characters.

function(a,b,c,d,e){for(e=0;d<c;)with(a[d][b[e]||"B"])b[e]=w,e+=m,d=n;return b}

Source: https://gist.github.com/1400509


Got it down to 118 bytes ;)

    function tm(I,t,e,s,i,c,k){for(i=0;s!=e;i+=k.m,s=k.n){k=I[s][(c=t[i])||"B"];if(!k)return k;t.splice(i,1,k.w)}return t}
You could actually save one more byte by changing the name of the function, but that would be cheating, right ? ;-)

Edit, Refined it to get to 110:

    function tm(I,t,e,s,i,c,k){for(i=0;s!=e;t[i]=k.w,i+=k.m,s=k.n){k=I[s][(c=t[i])||"B"];if(!k)return k;}return t}


Looks great! If trimming javascript down to its pants is keeping you up at night, come and join us other golfers at http://140byt.es


The only thing more awesome than this would be a JS environment written for the turing machine which is able to run itself.


The last time I was working on one of these, I discovered the phrase http://en.wikipedia.org/wiki/Turing_tarpit

Not that these are all a waste of time or anything, you just need to remember not to take them too far.


A turing tarpit is a whole different beast. Brainfuck and whitespace are examples of a turing tarpit.

This is just codegolfing.


Should have called it l33t machine




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: