fork download
  1.  
  2. F=
  3. ->i{n={}
  4. g=->x{n[x]||=[0,p]}
  5. t=y=0
  6. i.lines{|l|x=0
  7. l.chars{|c|x+=1
  8. '><'[c]&&(r=c.ord-61;s,d=[y,x-4*r],[y,x+2*r])
  9. '^v'[c]&&(r=c<?_?1:-1;s,d=[y+r*3,x],[y-r,x])
  10. s&&(g[s][1]=g[d])[0]+=1}
  11. y+=1}
  12. c,*_,s=n.values.sort_by{|v|v[0]}
  13. l=n.size
  14. s[0]>1?((t+=1;c=c[1])while c!=s):t=l-=1
  15. [t,l-t]}
  16.  
  17.  
  18. require 'minitest/autorun'
  19.  
  20. describe F do
  21.  
  22. def test_simple_case
  23. assert_equal [2, 6], F[<<-DOC]
  24. # --> # --> # --> #
  25. ^ ^ |
  26. | | |
  27. | | v
  28. # # <-- # <-- #
  29. DOC
  30. end
  31.  
  32. def test_harder_case
  33. assert_equal [3, 10], F[<<-DOC]
  34. # --> # --> #
  35. ^ |
  36. | |
  37. | v
  38. # --> # <-- # # --> #
  39. ^ ^ |
  40. | | |
  41. | | v
  42. # --> # # <-- # <-- #
  43. DOC
  44. end
  45.  
  46. def test_no_loop
  47. assert_equal [6, 0], F[<<-DOC]
  48. # --> # --> # --> #
  49. |
  50. |
  51. v
  52. <-- # <-- #
  53. DOC
  54. end
  55.  
  56. end
Success #stdin #stdout 0.09s 10656KB
stdin
Standard input is empty
stdout
Run options: --seed 38966

# Running tests:

...

Finished tests in 0.002014s, 1489.6928 tests/s, 1489.6928 assertions/s.

3 tests, 3 assertions, 0 failures, 0 errors, 0 skips