CodeArc FE 学習アドベンチャー

Subject B

トレース練習から科目Bに入る

2 科目B
12 ドリル
8 本番ケース
0 / 20

科目B演習ミッション

表を作ってから答えを見る。自力で追えたカードに印を付けると、今日の進み具合が残ります。

科目Bの解き方キット

問題を読む前に、手を動かす型を決める

Trace

変数表を先に作る

代入される変数、条件で使う変数、戻り値を列にして、1行ごとに更新します。

Boundary

端の値を試す

0始まり、最後の添字、等号の有無を小さな例で確認してから選択肢を見ます。

Security

初動対応を先に選ぶ

攻撃名より、隔離、ログ保全、権限停止、影響範囲確認の順番を優先します。

本番ケース演習

科目Bの中心になる疑似言語と情報セキュリティを、表にして解く

疑似言語トレース 本番基礎

配列の累積和を追う

data <- [2, 5, 1, 4] sum <- 0 for i from 1 to 4 sum <- sum + data[i] endfor
i data[i] sum
  1. 配列が1始まりか0始まりかを問題文で確認する。
  2. sumは毎回上書きではなく加算される。
  3. 最後のsumだけでなく途中の 2,7,8,12 を残す。
ループ終了後の sum はいくつか。

12

条件分岐 本番基礎

カウンタ付き条件分岐

count <- 0 for each x in [3, 8, 6, 1, 9] if x >= 6 then count <- count + 1 endfor
x x>=6 count
  1. 境界値6を含むので、6はtrueとして数える。
  2. 条件がtrueの行だけcountを更新する。
  3. 8,6,9の3回でcountが増える。
最終的な count はいくつか。

3

ループ 本番標準

二重ループの出力回数

count <- 0 for i from 1 to 3 for j from 1 to i count <- count + 1 endfor endfor
i jの回数 count
  1. 内側の回数は常に3回ではなく、iの値に依存する。
  2. i=1で1回、i=2で2回、i=3で3回。
  3. 合計は1+2+3で考える。
最終的な count はいくつか。

6

探索 本番標準

二分探索の範囲更新

data <- [2, 4, 7, 9, 12, 15, 20] target <- 15 中央を比較し、targetが大きければ右側へ絞る
left right mid data[mid]
  1. 整列済みなので二分探索が使える。
  2. 最初の中央は9。15は9より大きいので右側へ絞る。
  3. 次の範囲の中央で15に到達する。
最初と2回目に比較する値は何か。

9, 15

データ構造 本番標準

スタックで括弧対応を見る

文字列: ( [ ] ) 開き括弧ならpush 閉じ括弧ならpopして対応を見る
文字 操作 スタック
  1. 開き括弧は後で対応するために積む。
  2. 閉じ括弧は直前の開き括弧と対応するか見る。
  3. 最後にスタックが空なら対応が取れている。
この文字列は括弧対応として正しいか。

正しい。最後にスタックが空になる。

データ構造 本番標準

キューの処理順

enqueue A enqueue B dequeue enqueue C dequeue
操作 キュー 取り出し
  1. キューは先入れ先出し。
  2. 最初のdequeueではAが出る。
  3. 次のdequeueではBが出る。
dequeueで取り出される値を順に答える。

A, B

情報セキュリティ 本番標準

ログから初動を選ぶ

09:00 login fail userA 203.0.113.8 09:01 login fail userA 203.0.113.8 09:02 login success userA 198.51.100.4 09:03 role changed userA admin
時刻 結果 IP 重要度
  1. 失敗後の成功は侵害済みの可能性として見る。
  2. 権限変更は被害拡大の合図。
  3. 証跡を消さず、アカウント停止と影響範囲確認を優先する。
最初に取るべき対応は何か。

アカウントを一時停止し、ログを保全して影響範囲を確認する。

関数 本番応用

擬似言語の戻り値を読む

function f(n) if n <= 1 return 1 return n * f(n-1) end f(4)
呼出し 戻り値 計算
  1. 終了条件 n<=1 で1を返す。
  2. f(4)=4*f(3), f(3)=3*f(2), f(2)=2*f(1)。
  3. 戻る順に 1,2,6,24 と計算する。
f(4) の戻り値はいくつか。

24

ミニドリル

実問題の前に、1テーマずつ手を動かす

変数 入門

代入の順序を追う

x=1, y=2, z=3 から x←y, y←z, z←x を順に実行した後の y,z を答える。

  1. 代入前の値を横に書く
  2. 1行実行するたびに変わった変数だけ更新する
  3. 最後に問われた変数だけ読む
答え

y=3, z=2

条件分岐 入門

境界条件を外さない

score が 60 以上 79 以下のときだけ true にしたい。直前で score<60 が false だったとき、追加条件は何か。

  1. 既に分かっている条件を使う
  2. 60と79を両方テストする
  3. 80が混ざらないか確認する
答え

score<=79

配列 入門

配列の入替を1周だけ試す

array={1,2,3,4,5} を逆順にする処理で、left=1 のとき right と代入先を追う。

  1. 要素番号が1始まりか確認する
  2. right=要素数-left+1 を計算する
  3. tmp を使って上書き順を守る
答え

right=5。array[5] と array[1] を交換する。

情報セキュリティ 入門

ログの異常点を見る

同じ利用者で短時間に失敗ログインが増えた後、別IPで成功している。最初に疑う事象を答える。

  1. 時刻順に並べる
  2. 失敗回数と成功の位置を見る
  3. IPや利用者の変化を見る
答え

総当たりまたはパスワードリスト攻撃後の不正ログインを疑う。

ループ 基礎

ループ回数を表にする

i=1, sum=0。i<=3 の間、sum←sum+i, i←i+1 を繰り返す。最後の sum は何か。

  1. 列に i と sum を作る
  2. sum を更新してから i を増やす
  3. i=4 で条件が false になることを確認する
答え

sum=6。1+2+3 まで加算し、i=4 で止まる。

ループ 基礎

while の終了条件を読む

n=16 から n>1 の間 n←n/2 を繰り返す。代入は何回行われるか。

  1. 16,8,4,2,1 と値を書く
  2. 1になった時点で次の条件判定をする
  3. 代入された回数だけ数える
答え

4回。16→8→4→2→1 で4回代入する。

配列 基礎

最大値更新を追う

data={3,8,5,9} を左から見て max を更新する。max が変わる値を順に答える。

  1. 最初の値を max にする
  2. 次の値が max より大きいときだけ更新する
  3. 更新された値だけを記録する
答え

3, 8, 9。5では更新しない。

データ構造 基礎

スタックの取り出し順

push A, push B, pop, push C, pop, pop の順に操作したとき、pop で出る値を順に答える。

  1. 右側をスタックの上として書く
  2. push は右に追加する
  3. pop は右端から取り出す
答え

B, C, A。スタックは後入れ先出し。

探索 応用

線形探索の比較回数

data={4,7,2,9,5} から 9 を線形探索する。比較は何回か。

  1. 先頭から順に比べる
  2. 見つかった位置で止まる
  3. 比較した要素数を数える
答え

4回。4,7,2,9 の順に比較して止まる。

探索 応用

二分探索の中央を選ぶ

昇順 data={1,3,5,7,9,11,13} で 11 を探す。最初と2回目に比較する値は何か。

  1. 中央の添字を選ぶ
  2. 探す値が大きければ右半分に絞る
  3. 絞った範囲で再び中央を見る
答え

最初は7、2回目は11。右半分に絞る。

読解 応用

トレース表の列を決める

疑似言語に i, j, count が出てきた。表に最低限どの列を作るか。

  1. 代入される変数を拾う
  2. 条件で使われる変数も拾う
  3. 出力や戻り値に関わる列を残す
答え

i, j, count の列を作る。条件判定に使うなら比較結果もメモする。

情報セキュリティ 応用

セキュリティ手順を選ぶ

不審な添付ファイルを開いた直後にPCが暗号化された。最初に避けるべき行動は何か。

  1. 被害拡大を止める
  2. 証跡を消さない
  3. 復旧や報告の前に勝手な操作をしない
答え

ログやファイルを削除すること。まず隔離し、担当者へ連絡する。