制限時間内のキー入力検査
Posted feedbacks - Scala
JAVAから移植させていただきました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #!/bin/sh
exec scala "$0" /dev/`who am i | awk '{print $2}'`
!#
import java.io._
class InputChecker(var dev:String){
def devControl(mode:String) = {
Runtime.getRuntime.exec(Array("stty", "-f", dev, mode)).waitFor
}
def now = System.currentTimeMillis
def check(n:int, s:String):unit = {
val r = new BufferedReader(new InputStreamReader(System.in))
devControl("raw")
print("input("+s+")=>")
while(!r.ready) Thread.sleep(100)
val start = now
devControl("-raw")
val input = r.readLine
if(now - start > 1000 * n) return {println("TIME OUT");false}
if(s.equals(input)) return {println("OK");true}
return {println("NG");false}
}
}
val checker = new InputChecker(args(0))
checker.check(5, "ABCDEF")
checker.check(5, "ABCDEF")
checker.check(5, "ABCDEF")
checker.check(5, "ABCDEF")
checker.check(5, "ABCDEF")
|



raynstard
#3420()
Rating0/2=0.00
関数 InputCheckerは、以下の仕様を満たしてください。
たとえば、「InputCheker(5, "ABCDEF")」と指定した場合、 出力例はこんな感じです。
1. input(ABCDEF) =>と出力して入力待ちをし、ユーザーが「ABCDEF<ENTER>」を入力したとき、 入力開始から5秒以内ならば「OK」、5秒をこえていれば「TIME OUT」を出力します。 このとき、ユーザーがキーを押下しなければ1. を出力してから たとえ10秒たっていても「TIME OUT」にはならないので注意してください。 時間計測はあくまでユーザーが入力を開始してからです。
このお題はraynstardさんの投稿です。ご協力ありがとうございます。
[ reply ]