피타고라스의 창 >> 타자 타율이 0.334면, 타자는 최소 287타수가 필요하다는 사실의 증명

5월 15th, 2009 by Leave a reply »

피타고라스의 창 >> 타자 타율이 0.334면, 타자는 최소 287타수가 필요하다는 사실의 증명.

재밌는 문제가 보여서 풀어보았다.

타자 타율이 0.334면, 타자는 최소 몇 타석이 필요한가? (TAOCP에 나온 문제라고 함)

a타수 b안타의 타율이 b/a이므로, 반올림 해서 0.334의 타율이 되려면, a와 b가 0.334 <= b/a < 0.3345를 만족해야 한다. 이를 만족하는 최소 자연수 a를 찾으면 된다.

아래는 Ocaml 코드.

  1. let c1 = 1000.0 /. 334.0 in
  2. let c2 = 10000.0 /. 3345.0 in
  3. let rec range i j = if i > j then [] else i :: (range (i+1) j) in
  4. let min_int_between i1 i2 =
  5. let minv,maxv = min i1 i2, max i1 i2 in
  6. match compare minv maxv with
  7. -1 -> if maxv - minv > 1 then Some (minv+1) else None
  8. |    _ -> None
  9. in
  10. let hit a b = (float b) /. (|>float a) in
  11. let blist = range 0 200 in
  12. let aoptlist = List.map (fun b ->
  13. let f1,f2 = c1 *. (|>float b), c2 *. (|>float b) in
  14. let i1,i2 = (truncate (ceil f1)), (truncate f2) in
  15. (b,min_int_between i1 i2)) blist
  16. in
  17. List.iter (fun (b,aopt) ->
  18. match aopt with
  19. None -> ()
  20. | Some a -> Printf.printf "%d/%d %f\n" b a (hit a b)) aoptlist;;

아래는 결과.

96/287 0.334495
97/290 0.334483
98/293 0.334471
99/296 0.334459
100/299 0.334448

즉, 적어도 287타수는 해야 0.334의 타율을 얻을 수 있다. 저 블로그의 내용을 보면 연분수 전개라는 방법이 있다는데 뭔지는 모르겠다. 아예 이름이 생소한데, 학교에서 배운 적은 없는 것 같다..

Advertisement

1 comment

  1. 속눈썹맨 님의 말:

    연분수 전개 어떻게 하는 지는 모르겠지만, 간단한 연분수라면 아마도 수열비슷해서 미지수 놓고 푼 거 배운 것 같아..

댓글 남기기