佐賀Groovy勉強会で今回行う予定のお題です。
1. 小町算
小町算を行い、その結果を表示するプログラムを作成し、それをGParsを用いて並列計算することで高速化を図ってください。
まずはwithPoolを使ってみることをお勧めします。
小町算は1×2×3×4+5+6+7×8+9=100のように、1□2□3□4□5□6□7□8□9=100の□に空白と+、−、×、÷を入れて正しい式として成立させる一種の遊び。今回は□に+、−、×、÷のみを入れることとし、全ての組み合わせを見つけることにする。
Hint:文字列をGroovyの命令として実行するためにはEvalクラス、コレクションから全ての順列を導くにはGroovyCollection.combinationを使うとよい。
def array = [1, 2, 3] def combi = GroovyCollections.combinations((1..2).collect{ array }) // arrayから2つ選びだす順列 println combi //=> [[1, 1], [2, 1], [3, 1], [1, 2], [2, 2], [3, 2], [1, 3], [2, 3], [3, 3]] def eval = new Eval() eval.me("println 'evaluation!'") // evaluation! と表示する
2. 数当てゲーム
数当てゲームをGParsを用いてアクターモデルで作りなさい。ただし以下の仕様を満たすこととする。
数当てゲームの仕様
1. アクターとして、gameとclientが存在する。
2. gameのアクターは最初に4桁の数字を決め、clientから送られてきた解答を受け付ける。
3. gameは合っている文字数をclientに返す。
4. gameはclientが正解を送ってきた場合は、正解であることをclientに返し、終了する。
5. clientはユーザーからの入力を受け付ける。
6. clientはユーザーからの入力をgameに送信する。
7. clientはgameからの返信を表示する。
8. clientは正解した場合、正解であることを表示して終了する。
3. Twitter検索
Twitter4Jを用いて、次の仕様を満たすプログラムを作成しなさい。ただし、GParsを用いて、より効率的に処理できることを目指しなさい。
仕様
1. #groovy、#scala、#java、#clojureのタグの付いたツイートを検索する。
2. 検索した結果、それぞれの最新50件のツイートから、ユーザーがそれぞれのハッシュタグをつけてツイートした回数をカウントする。
3. ハッシュタグごとにツイートした回数が多い順にユーザー名とツイート数を表示する。
Hint:
Twitterで#groovyのハッシュタグが付いた最新10件のツイートを表示するGroovyのプログラム
import twitter4j.* def twitter = new TwitterFactory().getInstance() def query = new twitter4j.Query() query.setQuery("#groovy") // 検索項目 query.setLang("ja") // 日本語から query.setResultType(twitter4j.Query.RECENT) // 最新のもの query.setRpp(10) // 最大件数 query.setPage(1) // 何ページ目を表示するか def result = twitter.search(query) // 上記クエリで検索 def tweetList = result.getTweets() // ツイートのリストを取得 tweetList.each {tweet -> println "@${tweet.fromUser} : ${tweet.getText()}" // 表示 }
お題について
一応このような形にしました。GPars自体を使っている解答がWeb上にあるものもありますが、できる限り見ないでやってみてください。
3番目の課題のような場合などが実践的な場合になるのかなと思います。
withPool、エージェント、アクター、データフローを駆使して、課題に挑戦してみてください。