
ajb:
Quoting George Russell
: The following declaration for a function for converting positive integers to Roman numerals is 181 characters long.
Is there a shorter one?
Being a judge, I can't write your obfuscated haskell contest entry for you. However, as a suggestion, you may be able to merge the if-then-else with the guard syntax. That should save a few characters.
roman=f[(i-j,i)|i<-[2,4..8],j<-[2,1]]where f(d@((a,b):c))n|n<1=""|n>=t!!a=s!!a:f d(n-t!!a)|1>0=if n+t!!b>=t!!a then s!!b:f d(n+t!!b)else f c n;s="mdclxvi";t=[1000,500,100,50,10,5,1]
I feel that obfuscated code should always have no space characters, and line-justified such that each line has the same width, and have the minimal number of keywords possible. And who uses alpha-numerics for varsyms anyway -- throw them out! All this is easy to achieve by turning off layout syntax, using extra parens, and rewriting keywords into lambda abstractions. At some point one loses the goal of writing the least number of characters, and instead looks for the most unreadable code. The point at which this happens should have a name.. Perhaps "the obfuscation horizon" - the point from which no code returns? Witness http://www.cse.unsw.edu.au/~dons/pretty.html as an example of this syndrome. -- Don