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