fork download
  1. def solve!(input)
  2. input.sub!(/O*$/,'')
  3. t=2**$&.size-1
  4. oc,xc=%W(O X).map{|c|input.count(c)}
  5. t*4*2**oc+(
  6. xc==0 ? 0 : xc==1 ? 5+( oc==0 ? 0 : 5**oc ) : 1+4**(xc-1)*5**oc
  7. )
  8. end
  9.  
  10. def test(n,input,expected)
  11. actual=solve!(input).to_s
  12. puts "#{n}:"+(actual==expected ? "ok" : "ng ( #{actual} against #{expected} )")
  13. end
  14.  
  15. test(0, "X", "5")
  16. test(1, "O", "4")
  17. test(2, "XX", "5")
  18. test(3, "OX", "10")
  19. test(4, "XO", "9")
  20. test(5, "XOO", "17")
  21. test(6, "OXX", "21")
  22. test(7, "OXO", "18")
  23. test(8, "OOOX", "130")
  24. test(9, "OXXO", "29")
  25. test(10, "XXOX", "81")
  26. test(11, "XOXXO", "89")
  27. test(12, "OOOOX", "630")
  28. test(13, "OXOOO", "66")
  29. test(14, "OXOXOX", "2001")
  30. test(15, "OXOXXO", "417")
  31. test(16, "OXXOXX", "1601")
  32. test(17, "XXXOXOO", "345")
  33. test(18, "OOOOOXO", "3258")
  34. test(19, "OXXOXXX", "6401")
Success #stdin #stdout 0.03s 9776KB
stdin
Standard input is empty
stdout
0:ok
1:ok
2:ok
3:ok
4:ok
5:ok
6:ok
7:ok
8:ok
9:ok
10:ok
11:ok
12:ok
13:ok
14:ok
15:ok
16:ok
17:ok
18:ok
19:ok