Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

アイネクライネナハトムジーク

映画も小説もどちらも面白いってなかなかないことだなと思います。

令和5年度 大学入学共通テスト 情報関係基礎 第2問

令和5年度大学入学共通テスト 情報関係基礎の第2問は暗号に関する問題でした。 大学入試の問題にソリティア帝国とかシャッフル王国が登場することが面白いですね。

以下は、暗号化のルールですが、暗号文中での対応する文字列は、復号するときに一意に定まるようになっているというのがミソだと思います。

center_exam_info2023_2.py

問1だけ、実際にPythonで作ってみました。

実行

% python center_exam_info2023_2.py
平文:♣♠♣ => 暗号文:♠♠♡♠♡♠♠♡
平文:♡♣♢♣ => 暗号文:♡♠♠♡♠♠♠♠♠♡
暗号文:♠♡♡♠♡ => 平文:♠♡♠
暗号文:♠♠♠♠♠♡♠♡♠♡♡ => 平文:♢♣♠♠♡

関連

令和5年度 大学入学共通テスト 情報関係基礎 第3問

令和5年度大学入学共通テスト 情報関係基礎の第3問は綱渡りをしながら、各ロープに巻かれているリボンに触れることで特典を獲得して、できるだけ多くの得点を競うゲームでした。

具体的には、

  • ゲームのキャラクターは、1本目の55m地点から始める。
  • キャラクターができることは、
    • ロープを降りること
    • 同じ高さのまま次のロープに飛び移ること
  • リボンに触れると1点獲得できる

リボンの高さは以下の通り。

center_exam_info2023_3_fig2.py

まずは、全部で11本のロープで、合計55mであることから、各ロープを5mずつ降りるというシンプルな方法

実行

% python center_exam_info2023_3_fig2.py
得点は4点

center_exam_info2023_3_fig3.py

キャラクターが今いるロープでリボンを取れるときには、貪欲にリボンをとっていく方法

実行

% python center_exam_info2023_3_fig3.py
i=1, tokuten=1, takasa=55
i=2, tokuten=2, takasa=53
i=3, tokuten=3, takasa=31
i=4, tokuten=3, takasa=31
i=5, tokuten=3, takasa=31
i=6, tokuten=4, takasa=22
i=7, tokuten=5, takasa=13
i=8, tokuten=5, takasa=13
i=9, tokuten=5, takasa=13
i=10, tokuten=5, takasa=13
i=11, tokuten=6, takasa=0
得点は6点

center_exam_info2023_3_fig3_GENDO.py

貪欲にとっていきたいけど、GENDOを設けてあまり欲張らない方法

実行

i=1, tokuten=1, takasa=55
i=2, tokuten=2, takasa=53
i=3, tokuten=2, takasa=53
i=4, tokuten=3, takasa=37
i=5, tokuten=4, takasa=37
i=6, tokuten=5, takasa=22
i=7, tokuten=6, takasa=13
i=8, tokuten=6, takasa=13
i=9, tokuten=6, takasa=13
i=10, tokuten=6, takasa=13
i=11, tokuten=7, takasa=0
得点は7点

center_exam_info2023_3_fig4.py

大きな問題を小さな問題に分割して問題を解いていく方法。i本目までに獲得できる最高得点をKokomadeにメモしていきます。

実行

i=2, Kokomade[i]=2
i=3, Kokomade[i]=3
i=4, Kokomade[i]=3
i=5, Kokomade[i]=4
i=6, Kokomade[i]=5
i=7, Kokomade[i]=6
i=8, Kokomade[i]=6
i=9, Kokomade[i]=5
i=10, Kokomade[i]=7
i=11, Kokomade[i]=8
獲得可能な最高得点は8点

プログラムに工夫を加えることで、獲得できる得点が、4,6,7,8点と伸びていくのが面白いですね。

関連

機械仕掛けの太陽

これまで、知念実希人さんの本を20冊以上読んできたのですが、その中でも本書がNo.1かなと思います。新型コロナウイルスと対峙する医療関係者の物語。

まだまだコロナ禍は続いていますが、一人ひとりが、自分でできる感染対策を行なっていくことが、医療関係者の負担を減らしていくことなんだろうなと感じます。

D - Change Usernames

D - Change Usernames

rootから辿っていって、ループがないかチェックしています。ただし、入力例2のような場合、rootが存在しないことになるので、最後にチェックをしています。

最初、以下のような結果となり悩んだのですが、原因は、再帰の上限回数に達したためでした。

import sys
sys.setrecursionlimit(1000000)  # 再帰回数の上限を変更

を追加することで、すべてのテストケースをクリアすることができました。

abc285_d.py

分割数のリストを求めるPythonスクリプト

分割数のリストを求めるスクリプトを作ってみました。partition関数自体はわずか10行足らずなのですが、昔から再帰に苦手意識があって苦労しました。

partiton.py

実行

整数6を4つの和に分割しています。

% python partition.py
6 4
[1, 1, 1, 3]
[1, 1, 2, 2]
[1, 1, 3, 1]
[1, 2, 1, 2]
[1, 2, 2, 1]
[1, 3, 1, 1]
[2, 1, 1, 2]
[2, 1, 2, 1]
[2, 2, 1, 1]
[3, 1, 1, 1]

参考