まとめ:高度なループ制御
CoddyのGOジャーニー「論理とフロー」セクションの一部 — レッスン 5/68。
チャレンジ
簡単このチャレンジでは、ラベル付きの break ステートメントと switch および fallthrough を組み合わせて、セキュリティ監視システムを作成します。このシステムは、複数のセキュリティゾーンを検索して脅威を探し、連鎖的なアラートレベルでそれらを分類します。
2つの入力を受け取ります:
- 検索する脅威レベルを表す文字列(例:
"high") - 検索する最大ゾーン数を表す文字列(例:
"3")
以下のセキュリティゾーンデータが提供されています:
zones := [][]string{
{"low", "medium", "low"},
{"medium", "high", "low"},
{"critical", "medium", "high"},
{"low", "critical", "medium"}
}あなたのタスクは以下の通りです:
- 最初の入力から脅威レベルを解析する
- 2番目の入力から検索する最大ゾーン数を解析する
- ラベル付き
breakを使用したネストされたループを使用して、ゾーン内を検索する - ターゲットの脅威レベルが見つかったら、
"Threat found at zone [zone_number] position [position]"と出力し、ラベル付き break を使用して直ちに両方のループを抜ける - 脅威が見つかった後(または脅威が見つからなかった場合)、
switchステートメントとfallthroughを使用して、検索していた脅威レベルに基づいたセキュリティアラートを表示する
switch ステートメントは次のように動作する必要があります:
"critical"の場合: "CRITICAL: Lockdown initiated!" と出力し、fallthrough して high アラートも出力する"high"の場合: "HIGH: Security breach detected!" と出力し、fallthrough して medium アラートも出力する"medium"の場合: "MEDIUM: Increased monitoring active" と出力する"low"の場合: "LOW: Standard security protocols" と出力する
指定された数のゾーンを検索しても脅威が見つからない場合は、セキュリティアラートを表示する前に "Threat not found in searched zones" と出力してください。ゾーン番号とゾーン内の位置には 0 から始まるインデックスを使用してください。
自分で試してみよう
package main
import (
"fmt"
"strconv"
)
func main() {
// 入力を読み込む
var threatLevel string
var maxZonesStr string
fmt.Scanln(&threatLevel)
fmt.Scanln(&maxZonesStr)
// 最大ゾーン数を整数に変換
maxZones, _ := strconv.Atoi(maxZonesStr)
// セキュリティゾーンのデータ
zones := [][]string{
{"low", "medium", "low"},
{"medium", "high", "low"},
{"critical", "medium", "high"},
{"low", "critical", "medium"},
}
// TODO: 以下にコードを記述してください
// ラベル付きのbreakを使用した入れ子のループで脅威を検索します
// 脅威が見つかった場合はその場所を、見つからない場合は "Threat not found in searched zones" を出力します
// その後、セキュリティアラートのために fallthrough を使用した switch 文を使用します
}