@kotyのブログ

PythonとかAWSとか勉強会のこととかを、田舎者SEがつづります。記事のライセンスは"CC BY"でお願いします。

勉強会でfizzbuzz的なものをみんなで書いてみた

社内勉強会で、下記のようなお題でプログラミング大会的な催しをしてみた。

下記のような機能を持ったメソッドを実装してください。
クラス名、メソッド(関数)名、アクセス修飾子等は自由ですが、名前はレビューの対象としますので、処理内容を現すそれなりのものを考えてください。
入力:整数の配列
戻り値:文字列の配列
戻り値文字列の条件
・入力の整数配列の中から、3または5で割り切れる要素のみを抽出したものを文字列配列化したものであること
・ただし、3でも5でも割り切れる要素には文字列を付加(以下、付加文字列と表記)すること
 付加文字列の内容はクラスの外側から設定できること
 付加文字列の設定が無い場合は":hoge!"を既定値とすること
 クラスの概念のないプログラミング言語の場合は、メソッド(関数)の引数で付加文字列を指定すること
例:
 入力:1, 2, 3, 5, 10, 11, 12, 13, 15, 16, 17, 18, 19
 戻り値:"3", "5", "10", "12", "15:hoge!", "18"

解答者はみんなモチベーションの高い人ばかりだったので、彼らにとっては楽なお題になってしまい、またプログラミング言語の条件もなかったので「オレの中でナウでヤングな言語はコレだぜ!」ってな感じでプログラミング言語品評会のようになってしまいました。VB.NETC#、F#、JavaScriptpython、そしてVBA@accessなど、みなさん思い思いの実装をしていました。

かくいう私もF#にトライしてみました。書いてみたコードが下記です。

    module Study.ProductionFS
    open System.Linq

    type Filter() =
        class
            let mutable additionalString = ":hoge!"
            member this.FilterBy3and5multiples (list:int[]) = 
                list.Where(fun x -> (x%3 = 0) || (x%5 = 0))
                    .Select(fun x ->
                            if (x%15 = 0) then 
                                x.ToString() + additionalString
                            else
                                x.ToString()
                        ).ToArray()

            member this.AdditionalString
                with get () = additionalString
                and set (value) = additionalString <- value
        end

どーやらF#っぽい書き方じゃないらしい。のと、ProductionFSがnamespaceじゃなくてclassとして定義してることになってるような気がする。。。まあ初めてのF#ってことでこのまま掲載してみます。あと、はてなのシンタックスハイライトはF#に対応しているんでしょうか。。。?

何にしても、やっぱり勉強会は楽しいですね。

追記:シンタックスハイライトはocamlで代用しているとのコメントを頂きましたので、設定してみました。構文が似てるってことですかね。