• Source
    1. while c=$<.getc
    2. r=[]
    3. while c!=?:
    4. r<<[c.to_i]
    5. c=$<.getc
    6. end
    7. c=$<.getc
    8. pos=c.ord-56
    9. s=0
    10. r.each do |e|
    11. case (pos-e[0])%8
    12. when 0
    13. e<< true
    14. s+=1
    15. pos+=1
    16. when 1
    17. e<< true
    18. s+=1
    19. pos+=7
    20. end
    21. end
    22. if s>0
    23. 8.times do |i|
    24. pos=i+9
    25. r.reverse_each do |e|
    26. t=false
    27. case (pos-e[0])%8
    28. when 0
    29. t=true
    30. pos+=1
    31. when 1
    32. t=true
    33. pos+=7
    34. end
    35. break if t&&e[1]
    36. end and putc 65+i
    37. end
    38. else
    39. (0..c.ord-66).each do |i|
    40. putc 65+i
    41. end
    42. (c.ord-64..7).each do |i|
    43. putc 65+i
    44. end
    45. end
    46. putc $<.getc
    47. end
    48.