ジョンジョンボビプログラムできたよー
工場研修の生産性のなさに嫌気が差してきたので「ボ」「ン」「ジョ」「ヴィ」をランダムに表示して「ジョン・ボン・ジョヴィ」が揃ったら終了するプログラム作りました pic.twitter.com/xX4pyLbq3s
— YaGi (@yagiyyyy) 2014, 6月 2
public partial class Form1 : Form { private void form1_DoubleClick(object sender, EventArgs e) { JohnBon.Jovi(); } } public class JohnBon { private enum JBJToken { ボ, ン, ジョ, ヴィ } private static int[] answer = new JBJToken[] { JBJToken.ジョ, JBJToken.ン, JBJToken.ボ, JBJToken.ン, JBJToken.ジョ, JBJToken.ヴィ } .Cast<int>().Reverse().ToArray(); public static void Jovi() { Random jbjRandom = new Random(); int tokenCount = Enum.GetValues(typeof(JBJToken)).Length; //initial List<int> list = Enumerable.Range(0, answer.Length).Select(i => jbjRandom.Next(tokenCount)).ToList(); while (!answer.SequenceEqual(list.Take(answer.Length))) { list.Insert(0, jbjRandom.Next(tokenCount)); } foreach (JBJToken t in list.Cast<JBJToken>().Reverse()) { Console.Write(t.ToString() + "・"); } Console.WriteLine(); Console.WriteLine(string.Format("{0} Bon Jovis", list.Count)); Console.WriteLine(@" _人人人人人人人人人人人人人人_ > You Give Love a Bad Name <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄"); } }
╭( ・ㅂ・)و やったー
もちょっと短く
public static void Jovi() { Random jbjRandom = new Random(); int tokenCount = Enum.GetValues(typeof(JBJToken)).Length; //initial List<int> list = Enumerable.Range(0, answer.Length).Select(i => jbjRandom.Next(tokenCount)).ToList(); while (!answer.SequenceEqual(list.Take(answer.Length))) { list.Insert(0, jbjRandom.Next(tokenCount)); } Console.Write(string.Join("・", list.Cast<JBJToken>().Reverse().Select(t => t.ToString()).ToArray())); Console.WriteLine(string.Format(@" {0} Bon Jovis _人人人人人人人人人人人人人人_ > You Give Love a Bad Name <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄", list.Count)); }
Consoleへの出力を先にLINQ使って文字列にすることで1行に。
解説(いらない
- トークンを数値と文字の媒介にするために列挙型に。
- IEnumerable<T>.SequenceEqual()で答え合わせ。
- 最新の6*1個のトークンを切り出すためにIEnumerable.Take()を使う。ただTakeでは末尾から取れないんでリストを逆順に作っとく
- 出力する段ではリストを再度逆順にしてキャストしてからSelectでstring配列にしてstring.Join()で結合
╭( ・ㅂ・)و