challenge 重複する要素を取り除く

与えられたリストxsの中から、 2回以上出現するものを全部取り除いてください。

サンプル入力
[3, 1, 4, 1, 5, 9, 2, 6, 5]
サンプル出力
[3, 4, 9, 2, 6]

これはアレイのuniqの派生問題です。 リストとかアレイという言葉は言語によってまちまちの意味で使われているので、 「配列のようなもの」という漠然とした意味にとって構いません。

Posted feedbacks - OCaml

コスト高そうですが。。
1
2
3
open List;;

let only_unique l = [for x in l when find_all ((=) x) l |> length = 1 -> x];;

1
2
3
4
5
6
7
8
(*リスト内のxの数はn未満か*)
let rec count_lt lst n x =
  if n=0 then false else
  match lst with
  | [] -> true
  | hd::tl -> count_lt tl (if hd=x then (n-1) else n) x;;

let list_only lst = List.filter (count_lt lst 2) lst;;

Index

Feed

Other

Link

Pathtraq

loading...