6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ランダムに二人組を作りお昼ごはんのお相手を決める

Last updated at Posted at 2016-08-02

二人組を作った時に一人余るのは私です。
ランダムにすればこの悲しみを地球上から消せるはず。

スクリーンショット

gohan.JPG

gohan2.JPG

ソースにべた書きか引数か選べる。

先生との友好度を高めないために

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人の組み合わせを指定できるようにする機能
  • 余った人を最後の組み合わせに追加してあげる優しみ機能
  • 実際の運用…

参考

6
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?