• Source
    1. def solve(input)
    2. z,ip,dir=0i,-1i,0
    3. memo={z*3+ip=>0}
    4. input.scan(/[ac]*F/).each_with_index{|m,j|
    5. dir=(dir+(m.size-1)*(?b<=>m[0]))%5
    6. if dir==0
    7. ip=-ip
    8. else
    9. z+=ip*1i**(dir/2+3)
    10. ip*=1i*c=dir%2*2-1
    11. dir+=c
    12. end
    13. t=memo[k=z*3+ip] and return [j+1,t]*?,
    14. memo[k]=j+1
    15. }
    16. ?-
    17. end
    18. def test(n,input,expected)
    19. actual=solve(input)
    20. puts "case #{n}: " + ( actual==expected ? "ok" : "ng ( #{actual} against #{expected} )" )
    21. end
    22. test(0, "FcFcFaF", "3,0" )
    23. test(1, "FccFaaFcFcF", "-" )
    24. test(2, "ccFaF", "-" )
    25. test(3, "cFcFaaF", "-" )
    26. test(4, "aFccFcFcF", "4,1" )
    27. test(5, "cFaFaFaFaaF", "4,0" )
    28. test(6, "cFccFaFaaFaF", "5,1" )
    29. test(7, "cFaaFaaFcFcFccF", "5,2" )
    30. test(8, "aaFaFaaFaFccFaFccF", "6,0" )
    31. test(9, "aaFaaFcFccFcFccFccFaF", "6,1" )
    32. test(10, "aFccFccFaaFccFcFcFcFaF", "7,4" )
    33. test(11, "ccFaaFaaFaFccFaaFaFcFccFaaF", "-" )
    34. test(12, "aaFaFaFcFaFaaFaFaFaaFccFaaFaaF", "8,3" )
    35. test(13, "aaFccFaFaFccFaaFaaFaaFccFccFcFaFaF", "13,10" )
    36. test(14, "aFaFaaFaaFaaFccFaFccFaFaaFccFccFaaFccF", "11,0" )
    37. test(15, "ccFccFcFaaFaaFaFccFaaFaFcFaaFaaFcFcFcF", "10,2" )
    38. test(16, "aaFaaFaaFccFccFaFaaFaaFaFccFcFcFccFaaFaFccFccF", "10,3" )
    39. test(17, "ccFaFccFaaFaaFcFccFaFcFccFccFaaFccFaFaaFaFaFccF", "11,3" )
    40. test(18, "cFcFaFaaFaFccFaaFcFaFaaFccFaFaaFccFaFcFaaFccFcF", "12,0" )
    41. test(19, "cFaFaaFcFaaFaaFaFccFaaFcFaaFccFaaFccFaFcFccFaFaFaFcFcF", "19,16" )
    42. test(20, "aFaFccFaaFccFccFaFccFaFaaFccFaaFccFcFccFaFaFccFaaFccFcF", "15,11" )
    43. test(21, "aFccFccFccFaaFaaFcFcFaaFccFaFcFccFaaFaFcFaaFcFaFccFccFaFaF", "23,20" )
    44. test(22, "cFaFaaFcFaFaaFccFccFaaFaFccFccFccFaFaFccFccFccFaaFcFcFcFaF", "22,18" )
    45. test(23, "aFcFaFccFccFaFccFaaFaFaaFaaFaFcFaFcFcFcFaFaFaaFaaFaFaaFcFccFaF", "14,4" )
    46. test(24, "cFaFaaFcFaFccFcFccFaFaaFaaFaFcFccFccFaFcFaFaaFccFaFaFccFcFaFaFaaF", "22,19" )
    47. test(25, "aaFaaFaFcFccFaaFcFaaFccFaFaFcFaFaaFaFaFaFcFccFaFaaFcFcFccFccFccFcF", "16,11" )
    48. test(26, "cFaaFaFcFaFaaFccFaaFaFccFccFaaFccFcFaFaaFaaFaFccFcFccFccFaFaaFcFcFaF", "26,23" )
    49. test(27, "cFaaFccFaFcFaFcFaaFccFaFccFaaFcFaFaaFccFaaFccFcFaFaaFaFcFccFccFaFcFaaFccFcF", "-" )
    50. test(28, "ccFccFaaFaFccFaaFaaFcFccFaaFaFcFccFccFccFaFaaFcFaFccFaaFcFcFaFccFaFccFaaFaaFaF", "-" )
    51. test(29, "aaFccFaFccFccFaaFccFaFcFccFaFccFcFcFaFcFcFaaFaaFcFccFccFcFaFaaFaFcFcFaaFaaFaaF", "19,5" )
    52. test(30, "aFaaFccFaFaaFaaFccFccFaFcFaaFaaFaaFccFaFccFaaFaaFaFccFccFcFaaFaFccFccFaFcFaaFccF", "-" )
    53. test(31, "aaFaFaaFcFccFccFaFcFaaFaaFaFccFccFccFaFaaFccFcFaaFccFaaFccFaaFccFccFccFcFaaFcFaaFccF", "30,23" )
    54. test(32, "aaFccFaFaaFccFcFaFccFaFcFccFaaFccFaFcFaaFccFaaFaFccFccFccFcFccFaFccFcFaaFaFcFccFcFaFaaF", "32,17" )
    55. test(33, "ccFcFcFaFaaFaFaaFccFcFccFaFcFaFccFaaFcFccFcFaaFcFaaFcFaaFaaFcFaaFaFaFaFaaFccFaaFcFcFaFaF", "18,14" )
    56. test(34, "ccFaFaaFaaFcFaaFaaFaaFaaFaaFaFccFcFaaFaFcFccFaaFcFaFaaFccFccFaaFcFaaFaaFaaFccFaaFcFcFaFaFccFaFcFccF", "17,0" )
    57. test(35, "aaFccFccFaFcFaFcFaFccFccFccFaFccFccFcFaFcFaaFccFcFccFccFaaFcFccFaaFccFccFaFccFcFcFaaFaFccFcFaaFaaFcF", "24,11" )
    58. test(36, "aaFccFaFccFaaFaaFcFaFcFaFcFaaFaaFccFaFcFaFaaFcFaaFaFcFaaFccFcFaaFccFaaFccFaaFccFcFaFcFaFccFaaFaaFccFaaF", "-" )
    59. test(37, "aFaaFaFaaFcFccFaaFccFaFcFaaFccFccFcFcFaFaFcFccFcFccFaaFcFaFcFaaFcFaFaaFccFaaFccFaFaaFaFcFaFccFaFaaFaFaaF", "17,14" )
    60. test(38, "aaFcFaaFccFaaFaaFcFaaFccFccFaFcFaFcFccFcFaaFaaFaFcFaFcFaaFcFaFaaFaFccFccFccFcFaFaFcFcFaFcFaaFcFaaFcFcFaaF", "27,23" )
    61. test(39, "ccFaFccFaFcFaFccFcFaaFccFccFcFaFccFccFaaFaaFaFaaFcFaaFccFcFaaFcFccFaaFcFaFccFccFaFccFaaFaaFcFcFccFaFccFcFcF", "25,18" )
    62. test(40, "cFcFccFaFaaFaaFccFccFcFccFccFaFcFaaFcFccFccFcFccFaFaFaFaFaFaaFaFcFaFccFcFccFaaFccFaaFccFcFaFaaFccFaFccFcFaaF", "16,4" )
    63. test(41, "aFcFcFaaFcFaaFcFaFaaFaaFaaFaFcFccFccFccFaFaaFaFaaFaaFcFcFccFaFaaFcFaFaaFccFaaFcFccFcFcFccFaaFcFaFccFaaFaaFccF", "19,15" )
    64. test(42, "ccFaaFcFaFccFaFccFaFcFaaFaaFccFaaFccFcFaFaFccFaFaaFaFaaFaFaaFaaFccFaaFaFcFaaFaFaFcFaaFcFaFaaFaaFcFccFaaFaFaFaF", "22,17" )
    65. test(43, "aaFcFaaFaFcFccFccFaFaFccFaFaaFaFcFccFaaFaaFaaFcFccFccFaFaaFccFcFaFaFcFaaFcFcFcFccFccFaaFcFcFaFccFccFccFaaFcFaaFcF", "14,5" )
    66. test(44, "cFcFaFccFaaFaFccFaFccFaaFaFccFaaFaaFccFaaFccFaaFccFaFaaFaFaFaaFaaFccFaFcFaaFcFcFaFaFcFcFcFaFaaFcFaFcFaaFccFccFcFaaFaFccF", "10,1" )
    67. test(45, "ccFaFcFaaFcFccFaFccFaaFccFaaFaaFcFaaFccFaaFccFccFcFaaFaaFcFaaFccFaaFcFcFaaFaFaFccFcFaFaFaFccFccFccFccFccFccFcFcFccFccFcF", "25,13" )
    68. test(46, "aFccFaFcFaFcFaaFaaFcFaaFccFaFaaFaFcFaFaaFaaFaaFccFaaFaaFccFccFccFccFccFaaFaFcFaFaFccFaFccFcFccFcFcFccFcFccFccFccFccFccFaF", "18,8" )
    69. test(47, "cFaaFcFaaFaFcFccFaaFcFccFcFaFccFaaFaaFccFccFccFaFcFccFcFaaFcFcFccFcFccFaFaFccFccFcFaFaFaaFcFaFcFccFccFccFaaFaFaFccFcFccFccF", "25,22" )
    70. test(48, "aaFcFccFcFaFcFaFaFcFccFaFaaFaFcFccFccFaaFccFccFaaFaaFccFaaFaaFccFaaFccFcFaaFaFcFaFcFccFaaFccFaFaFccFaaFcFaaFaFccFaaFaaFccFccFcFaF", "-" )
    71. test(49, "aFaaFccFccFaaFaaFccFccFaaFaaFaFcFccFaFcFaaFaFccFaaFccFaFcFaFccFaaFaaFaFccFaFaaFaaFcFaaFccFaaFcFaFccFccFaaFaaFaaFaaFccFcFccFaaFaFaaFaaF", "-" )
    72. test(50, "aaFcFccFccFaFccFaFccFaaFaaFaaFccFaaFaaFccFaaFccFaFaaFccFccFaaFcFccFaFccFcFaaFaFccFccFccFaaFaFccFccFaFaaFccFccFccFaaFccFccFaFaFcFaFccFccF", "-" )
    73.