## C演習Ⅰのその先 この記事は、[**2枚目 大阪工業大学 Advent Calendar 2023**](https://adventar.org/calendars/9140)の1日目の記事です。 12月に入りました、今日から**大阪工業大学 Advent Calendar 2023**がスタートします!今年も1枚目が埋まるほどの参加をいただいてBig感謝です。**空いている枠は今からでも参加可能**なので複数記事書きたい方や、新たに参加したい方、遠慮なく埋めてください! ::: success 今回の内容の大部分は**情報科学部**の1年生へ向けたものです、C演習Ⅰを受けている・履修した幣学erが次に何をするのか・何ができるのかを、僕の体験例を基に解説します。 ::: 準備はいいですか?それではいってみよ~ --- ### C演習Ⅰ まずはこの授業の単位を**確実に**取ってください。今年は試験と模擬をやる関係上、授業の解説時間が大幅に削られる回があって大変だと思いますが、頑張りましょう。 僕はSAをやっているので、何か質問があれば気軽に質問して下さい。 --- ### MineCraftBotContest 年末から年始にかけて募集がかかると思いますが、[MineCraft Education](https://education.minecraft.net/ja-jp)で敵Mobをたくさん倒せるbotをC言語で作ろうねーというコンテストがあります(~~対象は1年生らしいけど2年生が参加希望したらできなくないとかなんとか?知らんけど~~)。 ![0322_480](https://hackmd.io/_uploads/Hk-LtzUBp.png) ![zombie](https://hackmd.io/_uploads/H1zjn9HSa.png) 検出イメージと動作イメージ プレイヤーを操作するメソッドや画面上からゾンビなどの敵Mobを検出してくれるライブラリは提供されるので、それを使ってうまく動かすというものになります。[開催風景はこちら](https://www.oit.ac.jp/japanese/topics/index.php?i=9152) 僕も去年度これに参加しました。**開発をギリギリまでしていなかったので**痛い目を見ましたが。 **個人でもチームでも参加**できて、上位者にはキーボードやSSDなどの景品ももらえるのでぜひ参加してください! ↓ 去年の最優秀賞は1万円強のキーボードとSSDでした <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">学内のマイクラコンテスト最優秀賞いただきましたー<br>実装も本番の結果も全然ダメだったので選ばれたのは意外だったけどここ数日の寝不足が報われて(?)よかった <a href="https://t.co/tnPcZDO06v">pic.twitter.com/tnPcZDO06v</a></p>&mdash; ちくわ (@tikutikuwa_id) <a href="https://twitter.com/tikutikuwa_id/status/1639211039958110209?ref_src=twsrc%5Etfw">March 24, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> --- ### C演習Ⅱ・データ構造とアルゴリズム(通称デコリ・デゴリ)  2年前期の授業群です。この2つの授業は抱き合わせ販売みたいなもんです。たしかどの学科も必修ではなかったと思うのですが、他学科の先輩によるとこれをやっている前提としているかのような授業が後に出てくるみたいなので、受けた方がいいかもしれません。 なお、僕の所属学科であるIDはそんなことないです、多分。 ::: danger 但し、C演習Ⅰより難易度があがることは覚悟して受けてください。以前より主体的に授業に取り組むことが要求されますし、データ構造とアルゴリズムの実践的な位置づけの授業であるので、主にアルゴリズムの話が中心になります。 ::: --- ### 競技プログラミング学生プロジェクト これもまた年始を目途に募集をかけたいと思いますが、毎年7月に行われる[**ICPC 国際大学対抗プログラミングコンテスト**](https://icpc.iisf.or.jp/)の参加をする学生プロジェクトです。プログラミング初心者からでも取り組めるような講習会を予定しているので、興味ある人は是非!!!!!!!! これは**大宮や梅田の人も参加できる**と思うので是非!!!!!!!!(~~大事なことなので2k~~) 僕が来年アジア予選進出したいので**チームメンバーも絶賛募集中**です!!!!!絶賛b(ry 競技プログラミングってのは、**与えられた問題を与えられた制約・時間以内に解く競技**です。例えば以下の様な問題などをプログラミングで解きます。 >あなたは教師です、$N$人の生徒を持っています。それぞれの学生は$1$~$N$の1対1対応の学生番号を持っています。今、2番目に背が高い生徒を知りたいです。あなたは生徒の身長を直接尋ねることはできませんが、2人の生徒のどちらの身長が高いか低いかを知ることができます。この質問を$5N/4$回行うことでその2番目に身長が高い人の学生番号を教えてください。 但し、同じ身長の生徒の組は存在せず、必ず大小関係が成立するとします。 > リンク先より改題(https://yukicoder.me/problems/no/850) どうでしょう、答えは求められそうですか?この問題は工夫すると$N+log_2N$回程度の質問で答えを求めることができます。 <details><summary>解法(クリックすると見れます)</summary> まず、1番目に背の高い人は何回の質問で求められるでしょうか。トーナメント表のような感じで2人1組で背を比較して、高かった人同士でもう一度比較していくことで比較回数は$N/2+N/4+N/8+....$となるので$N-1$回で求めることができます。2番目に背が高い人はトーナメントのうちどこかで1番目の人と比較されているはずなので、候補は高々$log_2N$人であることがわかります。その中で背が一番高い人を求めればいいので、先ほどの方法と同様にすれば$log_2N$回程度で求まることがわかり、おおよそ$N+log_2N$回の質問に収まることがわかります。 </details> これは少し算数チックな問題ですが、グラフ理論で習うようなグラフアルゴリズムが問われる問題があったり、天才データ構造を使うような問題もあったりしてとても楽しいです。特に数学が好みな人なら間違いなくはまれそう。 ICPCに参加しない人でもAtCoderという競技プログラミングのコンテストを毎週行っている~~オンラインゲーム~~サイトがあるので、ぜひ参加してみてください。僕に直接聞いてくれれば色々教えます! --- ### その他学生プロジェクト 僕も詳しくは知らないですがいろいろあります。**ゲーム作ったりとか、ドローン飛ばしたり**とか(小並感) --- ### 国際PBL 夏休みに大学と海外大学提携プログラムに参加します。旅費の大部分が学校負担で降りるので、全ての費用を合わせて**1週間で3~6万程度**で楽しむことができます。 プログラミングをしないものもあるようですが、僕が経験したのはタイの学生と一緒に、Pythonで画像処理のプログラミングをすることで何かをしよ~というプロジェクトでした。詳しくはまた書きたいとは思うのですが、かなり楽しかったです。 [プロジェクトの様子はこちら](https://www.instagram.com/p/CxH1-O2y7CL/?igshid=MzRlODBiNWFlZA==) ↓実際のスライド例(名前や顔が映っている部分は削除しました) <iframe src="https://docs.google.com/presentation/d/e/2PACX-1vT3ZR0FYHmk9Xde3ftas_bz_qC5Awd3RR1XzN5clN85pj6uMRAUti-PkUUgdEmDkayky5B7UBrIIi_x/embed?start=false&loop=false&delayms=3000" frameborder="0" width="480" height="299" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe> **英語が不安な子でも割とコミュニケーションはなんとかなる**ので、チャレンジしてみるのもいいのではないでしょうか? 僕の班は伝言ゲームの伝言を変顔でするゲームを作りました。 様子はこんな感じ→[**SIITのインスタ**](https://www.instagram.com/p/CxH1-O2y7CL/?utm_source=ig_web_button_share_sheet) --- ### その他 IN科の研究室が開いているようなネットワーク勉強会(現在はやっていないそう)やセキュリティハンズオンなどの有志主催の勉強会などに参加するのもいいでしょう。あとはソイチャレとかPBLとか?(よくわからない) 勉強会や輪読会を仲間内で開いてもいいですし、資格の勉強をしてもよし。いろんなことにチャレンジしていきましょう! --- いかがでしたか? 折角プログラミングを勉強しているので、早いうちにステップアップを見込めるような会やアウトプットできそうな大会やコンテストなどにどんどん参加していきましょう!(意識高い系ではないです、大マジです) おそらく何かに気軽にチャレンジして気軽に失敗も成功もできるのは今だけなのだ……