結果

問題 No.227 簡単ポーカー
コンテスト
ユーザー ichibanshibori
提出日時 2016-12-22 12:37:14
言語 OCaml
(5.5.0)
コンパイル:
ocamlfind ocamlopt -linkpkg -package zarith,str _filename_ -o a.out
実行:
./a.out
結果
AC  
実行時間 1 ms / 5,000 ms
+ 356µs
コード長 1,064 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 464 ms
コンパイル使用メモリ 21,604 KB
実行使用メモリ 9,908 KB
最終ジャッジ日時 2026-10-11 03:07:55
合計ジャッジ時間 1,893 ms
ジャッジサーバーID
(参考情報)
judge4_0 / judge1_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 15
権限があれば一括ダウンロードができます
コンパイルメッセージ
ocamlfind: [WARNING] Cannot read directory ./stublibs which is mentioned in ld.conf

ソースコード

diff #
raw source code

let group_by cmp lst =
  let rec group_by' lst result =
    match lst with
    | [] -> result
    | x::xs ->
      let value = cmp x in
      let lst1, lst2 = List.partition (fun v -> value = cmp v) lst in
      group_by' lst2 ((value, lst1)::result)
  in
  group_by' lst []

let list_max_by f lst =
  let rec list_max_by' lst result =
    match lst with
    | [] -> result
    | x::xs ->
      let v = f x in
      let result = max result v in
      list_max_by' xs result
  in
  if (List.length lst) <= 0 then failwith "list_max_by"
  else list_max_by' (List.tl lst) (f (List.hd lst))



let solve a_lst =
  let g_lst = group_by (fun a -> a) a_lst in
  let g_cnt = List.length g_lst
  and max_cnt = List.map (fun (_, l) -> List.length l) g_lst |>
                list_max_by (fun a -> a)
  in
  match g_cnt, max_cnt with
  | 4, 2 -> "ONE PAIR"
  | 3, 2 -> "TWO PAIR"
  | 3, 3 -> "THREE CARD"
  | 2, 3 -> "FULL HOUSE"
  | _, _ -> "NO HAND"

let () =
  let a_lst = read_line () |>
              Str.split (Str.regexp_string " ")
  in
  solve a_lst |> print_endline
0