プログラミング演習Ⅲ(2023)

【課題6-05】連想配列の練習 - その4

プロジェクトタイプC#コンソールアプリ※
プロジェクト名Prac_6_05
ソリューション名PET6
ターゲットフレームワーク.NET 6.0 (長期的なサポート)
最上位レベルのステートメントを使用しない使用しない(チェックオン)

※ 「コンソールアプリ(.NET Framework)」ではないので注意せよ!

_のテンプレートコードには,【課題6-01】と同じ DateTime型の配列scheduleに加えて, 日付(DateTime型の値)に対して文字列(string型の値)を 対応付ける連想配列holyDays が用意されている(中身は秘密; この設問ではこの連想配列の中身はあらかじめ設定されているので変更する必要はない).

【課題6-01】と同じように,配列scheduleの内容をコンソール(黒画面)に表示する際に, その日付に対するエントリーが連想配列holyDaysに存在する場合は,日付に加えて対応付けられた文字列も表示せよ

注意

表示の際は,各要素を出力結果のように1行に1つずつ_の形式で表示すること.

その日付に対応するエントリーが存在する場合
添え字 .... i番目の要素(←に対応する文字列)
  • 凡例
    • 添え字
      • その要素の添え字(インデックス)1.最初の要素はゼロ.
    •  .... 
      • 文言.半角スペース + 半角ピリオド + 半角ピリオド + 半角ピリオド + 半角ピリオド + 半角スペース
    • i番目の要素
      • その要素の値.「年4桁-月2桁-日2桁」のフォーマットで表示すること.
    • (
      • 文言.半角開き丸カッコ
    • ←に対応する文字列
      • 連想配列holyDaysに含まれている,i番目の要素に対応する文字列.
    • )
      • 文言.半角閉じ丸カッコ
    • 改行
それ以外の場合
添え字 .... i番目の要素
  • 凡例
    • 添え字
      • その要素の添え字(インデックス)1.最初の要素はゼロ.
    •  .... 
      • 文言.半角スペース + 半角ピリオド + 半角ピリオド + 半角ピリオド + 半角ピリオド + 半角スペース
    • i番目の要素
      • その要素の値.「年4桁-月2桁-日2桁」のフォーマットで表示すること.
    • 改行
出力フォーマット

なお,仮に配列の内容(要素数や各要素の値)が変更されたとしても正しく動作するようにすること.

プログラムの概形は_のようにすること(必ず以下をコピーしProgram.cs全体を上書きすること).

テンプレートコード
 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
namespace Prac_6_05
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 処理対象の配列(変更してはならない)
            DateTime[] schedule = new[]
            {
                new DateTime(2023,  5,  3), new DateTime(2023,  6,  9), new DateTime(2023, 10,  9),
                new DateTime(2023,  6, 22), new DateTime(2023,  4,  5), new DateTime(2023, 11, 26),
                new DateTime(2023,  1,  1), new DateTime(2023, 12,  5), new DateTime(2023,  6, 27),
                new DateTime(2023, 10, 15), new DateTime(2023, 12, 22), new DateTime(2023, 12,  1),
                new DateTime(2023, 10,  6), new DateTime(2023,  3, 21), new DateTime(2023,  4, 30),
                new DateTime(2023,  5,  4), new DateTime(2023,  7, 16), new DateTime(2023, 11, 30),
                new DateTime(2023,  8, 28), new DateTime(2023,  8, 11), new DateTime(2023,  4, 21),
                new DateTime(2023,  7, 12),
            };

            // 日付->文字列の対応付けを行う連想配列(中身は秘密; 変更してはならない)
            Dictionary<DateTime, string> holyDays = GetSecretTable();

            /************************************************************/
            /*                                                          */
            /*                         空欄                             */
            /*                                                          */
            /*           配列 schedule の内容を設問に指定された         */
            /*           フォーマットで表示する.                       */
            /*                                                          */
            /************************************************************/

        }// end of Main()

        #region 変更してはならない
        private static readonly string sSecretTableSource 
            = "H4sIAAAAAAACCn3S3UrDMBQH8PvB3qH02kCTde7jTn0F30aEtd1mWecUZbUow5t1H9AJU4ezduxh0tPVtzBOQZMdhVz+zp9/"
            + "TnJSLGiazgxWIgYV59gw6tuj1zUdWk52E+p7sqlJJnMv0zjm1oMqGaFK2lsMd6t8EsB6gfgSYbLPghDcNiJNwpQOwQyuuogs"
            + "i1hZth+zp/5XBwSbEubWmltTbnfw5LKCr7fYRnCF0IpcY/GCsOrOxuZzhNUIrcpp/ShvWKhk8vU3Yw9dKTXUZ+X2K3cG3Em4" 
            + "00Q83VmsfwZdH5VKB/CG0HnOmvd5NEA8Uz/hu+/BbIQ/2f5/tWE4TpPbH29+/jFldSI5XZ2L8KznpsseJBeSZ6pPl43cjaAV" 
            + "5tPRkWizmXjKgPKHfg8cIgNiPX8PHHwPFAunH9sS7nyoAwAA";
        private static Dictionary<DateTime, string> GetSecretTable() 
        {
            byte[] gzipBytes = Convert.FromBase64String(sSecretTableSource);            

            using (var gzip = new GZipStream(new MemoryStream(gzipBytes), CompressionMode.Decompress))
            {                
                using (var ms = new MemoryStream()) 
                {
                    gzip.CopyTo(ms);
                    return JsonSerializer.Deserialize<Dictionary<DateTime, string>>(Encoding.UTF8.GetString(ms.ToArray()))!;
                }//using
            }//using
        }// end of GetSecretTable()
        #endregion
        
    }// end of class Program
}// end of namespace

正しく実装できた場合,実行結果は_のようになる.

0 .... 2023-05-03(憲法記念日)
1 .... 2023-06-09(スポーツ大会)
2 .... 2023-10-09(スポーツの日)
3 .... 2023-06-22
4 .... 2023-04-05
5 .... 2023-11-26
6 .... 2023-01-01(元日)
7 .... 2023-12-05
8 .... 2023-06-27
9 .... 2023-10-15
10 .... 2023-12-22
11 .... 2023-12-01(開学記念日)
12 .... 2023-10-06
13 .... 2023-03-21(春分の日)
14 .... 2023-04-30
15 .... 2023-05-04(みどりの日)
16 .... 2023-07-16
17 .... 2023-11-30
18 .... 2023-08-28
19 .... 2023-08-11(山の日)
20 .... 2023-04-21
21 .... 2023-07-12
実行結果

ヒント

なし


  1. C#では「何番目」はゼロ開始なので注意せよ.例えば,先頭から数えて最初の要素は「0番目」,先頭から数えて4個目の要素は「3番目」となる. ↩︎ ↩︎

Last updated on 2023-11-14
Published on 2023-11-14

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.