From: "Matthew Moss" <matthew.moss / gmail.com> > > For your task this week, I ask that you make your own signature such that > displays your email address when run through the Ruby interpreter. The > signature must fit within four lines of no more than 80 characters per line. > (If you still want to avoid outputting an email address, your script may > produce something else: a phone number, a funny quote, vCard, a poem to your > love, whatever...) Here's my solution... (longest line is 78 characters) ## Machines take me by surprise with great frequency. -- Alan Turing m=Hash[*"z_ymly_xolx_wclw_v.lv_uslu_ttlt_scls_r@lr_qklq_pllp_ollo_niln_mbl". scan(/(..)(...)/).flatten];t=Hash.new("_");i,s=0,"z";loop{v=m[s+t[i]] or break s,t[i],d=v.split(//);i+=(d=="r")?1:-1};p t.keys.sort.map{|k|t[k]}.join As I missed last week's quiz, I decided to combine the two and implement a Turing Machine which would execute a program to write my email address to the tape, the print the tape contents. The Turing Machine program looks like this: # state, character_under_tape_head, new_state, char_to_write, move_left_right z_yml y_xol x_wcl w_v.l v_usl u_ttl t_scl s_r@l r_qkl q_pll p_oll o_nil n_mbl A slightly less obfuscated version of the solution follows. (In the signature, I omitted using temporary variables when reading and writing the tape head t[i] .) ##-- m=Hash[*"z_ymly_xolx_wclw_v.lv_uslu_ttlt_scls_r@lr_qklq_pllp_ollo_niln_mbl".scan(/(..)(...)/).flatten] t=Hash.new("_") # the tape i=0 # tape index (negative index is OK) s="z" # current state register loop { c = t[i] v = m[s+c] or break s,c,d = v.split(//) t[i] = c i += (d=="r")?1:-1 } p t.keys.sort.map{|k|t[k]}.join ##-- Regards, Bill