fork download
  1. =begin
  2. 【解答】
  3. 166,200,250,333,400,500,600,666,750,800,833
  4.  
  5. 【感想・工夫した点など】
  6. 何度か試行錯誤しましたが、ほぼストレートで解答にたどり着けたと思います。
  7. 想定時間の30分程度で解答が出せました。
  8. 解答の数列ですが、下記に現れる数値のように思います。
  9. ただ、1000 が含まれていないのがちょっと気になります。
  10.  
  11. 1000/6,1000/5,1000/4,1000/3,1000/2,1000/1
  12. 166, 200, 250, 333, 500, 1000
  13.  
  14. 2000/6,2000/5,2000/4,2000/3,2000/2
  15. 333, 400, 500, 666, 1000
  16.  
  17. 3000/6,3000/5,3000/4,3000/3
  18. 500, 600, 750, 1000
  19.  
  20. 4000/6,4000/5,4000/4
  21. 666, 800, 1000
  22.  
  23. 5000/6,5000/5
  24. 833, 1000
  25.  
  26. 6000/6
  27. 1000
  28.  
  29. ※値は切り捨て
  30.  
  31.  
  32. 【言語と処理系】
  33. ruby 1.9.3
  34.  
  35. 【ソースコード】
  36. =end
  37.  
  38. # ファイルから問題を読み込む
  39. def load_problems(filename)
  40. problems = File.open(filename, "r"){ |f|
  41. f.map{ |line| line.strip.split(' ') }
  42. }
  43. return problems
  44. end
  45.  
  46.  
  47. problems = load_problems("data.txt")
  48.  
  49. wrong_id =[]
  50. problems.each do |problem|
  51. id = problem[0]
  52. vertex_num = problem[1].to_i
  53. vertexes = problem[2].split(",")
  54. answer = problem[3].to_i
  55.  
  56. patterns = []
  57. triangles = vertexes.combination(3).to_a
  58. triangles.each do |triangle|
  59. # 隣の頂点との距離(2つの頂点で挟まれる等分された円弧の数)を求める
  60. # 3つの距離の組(順番を考慮する)をpatternに格納する
  61. # 頂点がアルファベットの文字で表されているので、ASCIIコードを利用する
  62. pattern = []
  63. (0...2).each do |i|
  64. pattern << (triangle[i+1].ord - triangle[i].ord) % vertex_num
  65. end
  66. pattern << (triangle[0].ord - triangle[2].ord + vertex_num) % vertex_num
  67. # pattarnの先頭が最小値になるように距離の組のローテーションを行う
  68. # これにより、同じパターンにそろえることができる
  69. min = pattern.min
  70. while pattern.uniq.length != 1 && (pattern[0] != min || pattern[-1] == min)
  71. pattern = pattern[1..-1] + [pattern[0]]
  72. end
  73. patterns << pattern
  74. end
  75. if answer != patterns.uniq.length
  76. wrong_id << id
  77. end
  78. end
  79.  
  80. puts wrong_id.join(",")
  81.  
Runtime error #stdin #stdout #stderr 0.01s 7420KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
prog.rb:40:in `initialize': No such file or directory - data.txt (Errno::ENOENT)
	from prog.rb:40:in `open'
	from prog.rb:40:in `load_problems'
	from prog.rb:47:in `<main>'