B - chess960 Editorial by cirno3153


正規表現による実装を紹介します。

二つのBの位置の偶奇が異なるとは、間に挟まっている文字が偶数個であるということです。 これは、2文字の0個以上の繰り返しがBの間に挟まっているということで、B(..)*Bで表現できます。

Kが二つのRの間にあるとは、R、任意の文字列、K、任意の文字列、Rがこの順に並んでいるということです。任意の文字列は.*なので、これはR.*K.*Rで表現できます。

fun main() {
  val S = readLine()!!
  val check1 = S.matches(Regex(".*B(..)*B.*")) // Bの位置の偶奇が異なる
  val check2 = S.matches(Regex(".*R.*K.*R.*")) // KがRに挟まれている
  println(if (check1 and check2) "Yes" else "No")
}

posted:
last update: