Problem:
Problem A: Register Phase

インターネットをより安全に活用するために、堅牢なパスワードを使うことは重要である。それと同時に、同じパスワードを使い回さないことも非常に重要である。どんなに強いパスワードを使っていても、一箇所で平文が流出してしまえば、破るのは非常に容易になってしまう。もちろん、全てのアプリケーションがパスワードをハッシュ化し、SALTを適切に使用していれば流出してもそのような被害は発生しないが、いまだにパスワードを平文で保存しているアプリケーションはあるのである。

さて、そろそろコンテストが始まる。チームのアカウントを登録しなくては…。

問題

パスワードを表す文字列が与えられる。その文字列が以下の条件を全て満たすか調べ、満たす場合は"VALID"と、ひとつでも満たさない項目がある場合は"INVALID"と出力せよ。

文字列長が6以上である

数字を一つ以上含んでいる

大文字英字を一つ以上含んでいる

小文字英字を一つ以上含んでいる

入力

パスワードを表す文字列が一行に与えられる。

出力

パスワードを表す文字列が問題の条件を全て満たすなら"VALID"と、満たさない条件があるなら"INVALID"と、一行に出力せよ。

制約

パスワードを表す文字列は1文字以上20文字以内である

パスワードを表す文字列は英大文字、英小文字、数字のみを含む

入出力例

入力1

password

出力1

INVALID

世界中で広く使われているパスワードである。

入力2

AizuCamp2013

出力2

VALID

素晴しいパスワードである。

入力3

1234

出力3

INVALID

暗証番号として広く使われている。

入力4

NaBiO3

出力4

VALID

ぎりぎり6文字以上である。

Solution in Scala (judge verdict: Accepted)


object Main extends App {

  import scala.io.StdIn._
  println(if (isValid(readLine.trim.toList)) "VALID" else "INVALID")
  def isLengthOver6(str: List[Char]): Boolean = str.size >= 6
  def isIncludeNumber(str: List[Char]): Boolean = str.exists(_.isDigit)
  def isIncludeUppercase(str: List[Char]): Boolean = str.exists(_.isUpper)
  def isIncludeLowercase(str: List[Char]): Boolean = str.exists(_.isLower)
  def isValid(str: List[Char]): Boolean = isLengthOver6(str) && isIncludeNumber(str) && isIncludeUppercase(str) && isIncludeLowercase(str)
}