流行っているようなので。ズンドコキヨシ
すでにやられていますが、Rxの教材として面白そう。
先人
C# と Reactive Extensions でズンドコキヨシ
コード
private static readonly string Zun = "ズン";
private static readonly string Doco = "ドコ";
private readonly string[] Pattern = new[] { Zun, Zun, Zun, Zun, Doco };
private bool KiyoshiSinging = true;
public void ZunDoco()
{
var rand = new Random();
var dis = Observable.Create<string>(observer =>
{
while (KiyoshiSinging)
{
var nextWord = rand.Next() % 2 == 0 ? Zun : Doco;
Console.Write(nextWord);
observer.OnNext(nextWord);
}
observer.OnCompleted();
return () => { };
})
.Buffer(5, 1)
.Subscribe<IList<string>>(next =>
{
if (next.Count < 5)
{
return;
}
if (next.SequenceEqual(Pattern))
{
Console.WriteLine("キ・ヨ・シ!");
this.KiyoshiSinging = false;
}
}, () => Console.WriteLine("終了"));
}
実行結果
ドコドコズンズンドコドコズンドコズンドコズンズンズンドコドコドコドコズンドコドコズンズンドコズンズンズンズンドコキ・ヨ・シ!
終了