スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#雑記 剰余で分ける

anarchy golf にpartition by parity(偶奇による分割)という問題があります。
例えば[3;4;6;2;19]というリストを渡すと、
2
4
6
 
3
19
というように偶数、奇数別でソートされた形で表示しなさいという問題です。
 
ここではList.partitionを使ってやってみます。
 
> let partOddEvenAndDisp (inp:seq<int>) =
    let dispSub lst =
        lst |> List.iter(fun x -> printfn "%d" x)
    inp
    |> Seq.sort
    |> List.ofSeq
    |> List.partition(fun n -> n % 2 = 0)
    |> (fun (xl,yl) -> dispSub xl ;printfn "";dispSub yl) //xl,ylはlist 
;;
 
val partOddEvenAndDisp : seq<int> -> unit
 
(実行例)
 
> partOddEvenAndDisp [3;4;6;2;19;11;8;7;21;46;8;23];;
2
4
6
8
8
46
 
3
7
11
19
21
23
val it : unit = ()
 
ではこれを一般化して剰余によって分けて表示する関数partModAndDispを書いてみます。
 
例えば
> partModAndDisp  3 [3;4;6;2;19;11;8;7;21;46;8;23];;
3
6
21
 
4
7
19
46
 
2
8
8
11
23
 
val it : unit = ()
 
> partModAndDisp  4 [3;4;6;2;19;11;8;7;21;46;8;23];;
4
8
8
 
21
 
2
6
46
 
3
7
11
19
23
 
val it : unit = ()
 
となるような関数です。
Seq.groupByを使ってやってみました。コードは次の通りです。
 
> let partModAndDisp n (inp:seq<int>)=
    inp
    |> Seq.sort
    |> Seq.groupBy(fun x -> x % n)        
    |> Seq.sortBy (fun (r,_) -> r)
    |> Seq.iter (fun (_,modSeq) -> modSeq |> Seq.iter(fun x -> printfn "%d" x) ; printfn "");;
 
val partModAndDisp : int -> seq<int> -> unit
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。