二人組を作った時に一人余るのは私です。
ランダムにすればこの悲しみを地球上から消せるはず。
スクリーンショット
ソースにべた書きか引数か選べる。
先生との友好度を高めないために
JavaScriptには配列からランダムに値を取り出したり、シャッフルする関数はありません。
通常の良く考えつくランダム処理では、偏りがでることがあるようです。
毎回同じ人が先生と食べないように、偏りがないシャッフルを行いたいものです。
ここではフィッシャー - イェーツのシャッフル - Wikipediaというアルゴリズムを実装した
coolaj86/knuth-shuffle: The Fisher-Yates (aka Knuth) shuffle for Browser and Node.js
を使用しました。
コード
事前にnpm install knuth-shuffle
しておきます
lunch.coffee
module.exports = (robot) ->
robot.respond /(?:(?:お?(?:昼|ひる))|hiru|mesi|ランチ|らんち|ranti|lunch)(?:[^\s]*\s+(.*)?)?/i, (msg) ->
shuffle = require('knuth-shuffle').knuthShuffle
if !!msg.match[1]
member = msg.match[1].split(/\s+/)
else
member = 'ABCDEFGHIJ'.split('')
text = ':fork_and_knife:お昼ごはんの組み合わせを発表します:bangbang::fork_and_knife:\n'
shuffle(member)
while(member.length > 1)
comb = member.splice(0, 2)
text += ':couple_with_heart: ' + comb[0] + 'さんと' + comb[1] + 'さん:bangbang:\n'
if member[0]
text += ':sparkles::tada:先生と食べるのは' + member[0] + 'さんです:bangbang::+1::tada::sparkles:\n'
else
text += 'です:bangbang:\n'
msg.send text
TODO
- お弁当組とランチ組に分ける機能
- n人の組み合わせを指定できるようにする機能
- 余った人を最後の組み合わせに追加してあげる優しみ機能
- 実際の運用…