★問題
あなたは、以下のようなキーボードのシミュレーションをするプログラムを作成したいと考えました。
・キーは a, b, ..., z と shift, capslock のみ
・a, b, ..., z キーと shiftキーを同時に押すと、対応する大文字が出力される
・capslockキーを押すと、再びcapslockキーが押されるまで大文字が出力される
キーボードで押されたキーが入力として与えられるので、
パソコンの画面に表示される文字列を出力してください。
★入力される値
入力は以下のフォーマットで与えられます
n
c_1
c_2
...
c_n
・入力される文字列数n
・c_1, c_2, ..., c_n は押下されたキー
・入力はn + 1行となり、末尾に改行を一つ含みます。
★期待する出力
押したキーによって表示される文字列を1行で表し、
最後に改行して出力してください。
★条件
すべてのテストケースにおいて、以下の条件をみたします。
1 ≤ n ≤ 10
c_1, c_2, ..., c_n は、以下のいずれかの文字列です。
・x
・shift x
・capslock
ただし、xは小文字アルファベット1文字(a, b, ..., z)を表します。
ただし、必ず何らかの文字列が表示されるものとし、
また、capslockキーが有効なときshiftキーは押されないものとします。
★回答
$n = trim(fgets(STDIN));
$s = "shift";
$cp = "capslock";
$cl = false;
$count = 0;
for ($i = 0; $i < $n; $i++) {
$c = trim(fgets(STDIN));
if($c === $cp && $count === 0){
$cl = true;
$count = 1;
}elseif($c === $cp && $count === 1){
$cl = false;
$count = 0;
}
if(strpos($c, $s) !== false){
$c = explode(" ", $c);
$c = strtoupper($c[1]);
echo $c;
}elseif($c !== $cp && $cl == true) {
$c = strtoupper($c);
echo $c;
}elseif($c !== $cp && $cl == false) {
echo $c;
}
}