【月一最終回(?)】スツルムウントドランク

こんにちわ、kurokuです。

 

突然ですがいま僕は不機嫌です。(ABCでくそみたいな成績だったので(自業自得なんだよなぁ。。

そもそも今日一日を通して集中力があまりなかったです。コンテスト中もずっとそわそわしてました。

 

まぁそんな中でも記事を書いていきますよ。ええ。

トピックは、

・競プロ

・ゲーム制作

・CTF(Capture The Flag)

 

きょうぎぷろぐらみんぐ

冒頭でも書いたようにストレスの塊です。

競技プログラミングやめらんないんだけどwwwwww(錯乱

という状態がもうすぐ1年を迎えようとしています。(始めたのはもっと前だけど

 

今日のABC(ABC160)についていうと、今日みたいな5完速解き回(6問中5問が簡単なためどれだけ速くその5問を解くかで成績が大きく変動する回)は非常に苦手で、4問目で考察ミス、5問目でうんち構築をしたので遅い4完になってしまいました。

 

いつになったら水色行けるんでしょうね。

 

こんなストレスを抱えたまま半年~1年たつので禿げそうです。

というのも競プロをやる以上、Ratingを気にしてしまいます。一方で大学対抗のプログラミングコンテスト(一番?大きいコンテスト)ICPCは一発勝負です。なのでICPCアジア大会出場を目指している身としてはこんなRating、なんの役にも立たないんですよね。

とはいうものの、何か物事を長く続けるためには何らかのモチベーションがないと精神的にきつくなります。競技プログラミング(AtCoder等の競技プログラミングコンテストサイト)においてはモチベーションこそがRatingなわけです。

逆接が多くなってしまいましたが、つまりは、「競プロerは強くなる(Ratingが増える)とモチベーションが上がり、そうでないときは下がる」ということです。

これは非常にストレスになります。過去問を解いても解いても本番でミスして「この一週間何してたんだろ」と思ったり、「今週はなんもしてないから、明日のコンテストは出なくていいや」と思ったり。

 

まぁ、以上は僕ごときの愚痴です。

最終的には、「もっと強くなりてぇ~」というごく単純な理由で競プロを続けられています。学部にいる間は精進し続けようかと思います。

 

なにも競プロerとして食っていくわけでもないんでね、気楽にやればいいんです。

 

はい、機嫌なおった

ゲーム制作

今週の月曜日にすることねぇ~ってなったので、作りました。作成期間のわりにはなかなか達成感のあるゲームができました。

 

始業が延期されたので気が向いたらもう1作品でも作りたいと思います。

CTF

CTFについてもいろいろ触ってみました。

 

【CTFとは】

https://cybersecurity-jp.com/security-measures/33780

 

【モチベーションが上がるかもしれないCTFが題材の作品】

https://kakuyomu.jp/works/1177354054885669846

 

 

とりあえずハリネズミ本を買いました。

 

まだ一章しか読んでいませんが、、、

環境構築がだりぃ~~~~~~

Linux系は講義でちょっと触ったくらいなのでまじでなんもわからん。(特にPATHの通し方がわからん、どれがアプリケーションだよ

 

直接は関係ないですがホストOSとゲストOSとのファイル共有の設定にも3時間くらいかかった。だれかOS補完計画やってくれ。

 

 

 

って感じで、ほぼ環境構築しかやっていないのでとくに話すことはなかった。

 

日本のコンテストとしてはSECCONが秋くらい?にあるっぽいのでそれに出てみようかなと。(海外のコンテストはいっぱい開かれてる)

 

これもICPCと同様にメンバー募集です。

 

人数は、、、上限なしです。これが何を意味しているか分かるでしょうか?

 

CTFの出題範囲は、「リバースエンジニアリング」、「パケット解析」、「暗号解読」、「競プロ(またお前か)」、「データベース攻撃」などなど。そして時間制限は1~3日

 

 

 

あほか???

 初心者が1人でやるには競プロ以上に禿げてしまいます。

ダレカタスケテクレルヨネ?

 

別に本気でやろうとは(今のところ)考えていないので気軽にお声がけください。

まとめ

月一での投稿もとうとう最終回です。

なんとなく決めたことでしたが全うできてよかったです。(質の話はするな

 

 

感染症が流行していて大変ですが、皆さんも体調には十分気を付けましょう。

 

 

 

それではさようなら、またいつか

【月一】話のエントロピーがああぁぁぁ!(?)

皆さんこんにちわ、kurokuです~

2月は大学も春休みへ突入し、絶賛ぐーたら生活を送っています。

世間では新型肺炎が広がっていますが僕が関わる県にはまだ感染者がいない(っぽい?情弱かも)ので一安心といった気持ちです。皆さんも外出には気を付けて!(僕も新幹線で帰るので怖いね)

さて、今回は先月の記事で競プロかUnityについて書くといったので、それらについて雑に書きたいと思います。

Unity

そもそもなんで今更Unityについて学び始めたかというと、「AR(拡張現実)」について興味を持ったからです。

今までは情報工学よりも情報科学・情報理論のほう(特に暗号・セキュリティ)に興味を持ってたんですけど、うちの大学はそれ系の研究室がないのでどうしよっかな~と思ってたところ、こんなニュースが目につきました。

 

「ARコンタクトレンズ」https://www.itmedia.co.jp/news/articles/2001/17/news076.html

 

近未来的で素敵やん!

 

ところで皆さんは「アクセル・ワールド(AW)」というラノベ・アニメを御存じでしょうか?

この作品の作者は言わずと知れた「ソードアート・オンライン(SAO)」の作者、川原礫さんなのですが、僕はAWがとても好きで、VRではなくARに興味をもったのもこれが大きい気がします。(VRもARも似たようなもんですけど(こんなこと言ったら怒られるかも))

(一番好きな表紙はちょっとエッチなので二番目に好きな表紙)

AWの作中では「ニューロリンカー」というウェアラブル端末が普及していて、各人の脳波を読み取って本人認証をしていて(たしか)、他人のニューロリンカーを勝手に外すことはかなりの罪となっています。

 

AWもSAOみたいに(SAO見たことないけど)VRゲームを中心としたバトルで、人間関係あり、という作品なんですが、このゲームがすごい。

なんとゲームアプリを起動(?)すると思考が1000倍に加速され、現実時間で1.8秒しかたっていないのに、ゲーム内では30分も時間がたつことになります。

まぁAWの説明はここらにしておいて(面白そうと思った人はお声がけください(秋田の家に最新刊までそろっているので貸します))、こんな感じもあってARアプリ作りてぇなぁ(唐突)と思ったわけです。

 

開発環境はいろいろあると思いますが、調べると「ARKit」か「Vuforia」が有名らしい。これらはUnityを使った開発になるのでまずはUnityの基礎的な部分を学ぼうと思ったわけです。

 

とりあえず買ったのはどのサイトでもおすすめされている「猫本」(僕が勝手にそう呼んでるだけですが)

少し厚いですがイラストがあったり、繰り返し同じことが書いてあったりで、プログラミング初心者にはわかりやすく、基礎プログラミングはわかるUnity初心者にはサクサク作れて非常に有用な本だと感じました。(これも声をかけてくれればお貸ししますが、僕も見たいのでMAX1週間くらいで)

後者の僕は春休みに入って一週間程度で終わらせることができました。

んでまぁ、「Vuforia」とかについても調べよう~とおもって調べたら、なんとまぁ僕のiphoneには対応してませんでした~(ぴえん

この機会に新しいのに変えるか絶賛悩んでおります。

 

ここまでが2月のUnity関連。

競プロ

※特に色が変わったわけでもないので内容は薄いです。

 

ここのところ非常に伸び悩んでいる。まぁ精進の質が悪いと言われればそうなんですけど、D問題を早解き出来ないんですよね。C問題まで:10分以内、D問題:50分みたいなことが多すぎる。いかに感覚でやってきたか、ボロがでてますね。

 

一方で、DPについての実装力は少し上がったと思います。ただ、持つ状態を間違えるとそこで沼にはまってグダグダになっちゃいますけど。

最近はこの記事(https://qiita.com/e869120/items/f1c6f98364d1443148b3)を中心にやってますね。(※初級編とありますが難しい問題もあるので詰まったらさっさと次の問題に進んでみましょう)問題を解かずとも、アルゴリズムの解説だけ見れば知識が増えると思います。

僕はJOIの問題形式が苦手です。入力の形式がわかりづらいので設定した変数を間違えたりします。問題読んでないだけですけどね。

 

あとここ3日くらい?起きて(昼)ご飯を食べた後にバチャコンをやっています。内容は1時間で300~400を5問解くって感じの早解きを目的としたバチャですね。興味あったら是非。

僕のtwitter:@76want_pc

あとは…そうだな..

7月のICPC国内予選、秋大では2チーム確定(?)しているんですが、どちらのチームも1人ずつ足りていません。片方はTNPの(4月~)院生2人、もう片方はTNPの(4月~)3年2人です。出てみたいと思う人はいつでもいいですが、早めに声をかけてもらえると、教えられる事、時間が増えるのでチームとしても嬉しいと思います。どちらのチームも横浜大会に行けるポテンシャルはあると思います!(本当か自分)

まとめ

毎度のことながら一生懸命何かしたというわけではないので、内容は薄いですが、勘弁してください。

他に書くことがあるとするなら、CTF(capture the flag)ですか。春休み前にちょっと話題に出たんですが、全然手を付けてませんね。というのも競プロと違って環境構築~とか入門~みたいな情報が少なくてちょっとした時間では触れれないと感じました。(前提知識多そうだしね)

 

次回で【月一】の投稿は終わりですが(は?)、4月もどうせサークル勧誘的な記事を書くと思うので、もうちょっとだけ続くんじゃよ。

(来月も学校ないから、話題ないじゃん!急いで水色にならなければ)

 

といったところで今月は以上です。kurokuでした~体に気を付けて~

【月一】SCP概論Ⅰ【雑談】

はじめに

(1/31 24:18に書き始めました。ギリギリ1月ですね。月一投稿は守れていますね!えらい!)

 

こんにちは、kurokuです。今回はホワイトボードに題材が寄せられていなかったため、雑談回としてSCPについて紹介したいと思います。

自分が知っているSCPはほんの一部ですのでもし興味が湧いたら本家の記事や解説記事、動画でほかのSCPもみてみてください。

 

SCP一覧:http://ja.scp-wiki.net/scp-series

 

SCPってなんぞや?

簡単に言うと怪奇現象、異常存在のこと。物語シリーズの「怪異」みたいな。SCP財団という組織はこれらの存在を確保(Secure)、収容(Contain)、保護(Protect)することを目的に秘密裏かつ世界規模の活動を行っています。

各SCPは3つのオブジェクトクラスに分類されています。

<Safe>

正しく収容している限りは安全。

<Euclid>

収容が困難であったり、収容しても安全と限らない。知性、自我を持つオブジェクトは大体これ。

<Keter>

収容がほぼ不可能。必ずしも危険とは限らない。(大体危険)

SCP紹介

以降は有名、おすすめなオブジェクトの記事と若干の解説(あるものは)を書いていく。(ネタバレ防止のため、解説は折りたたんでおきます)

ホラー系は注釈入れます。

・王道系

SCP-173(http://ja.scp-wiki.net/scp-173)
(ちょいホラー?)

本家(英語サイト)では「The Original」という題がついている。題名からわかる通り、このSCPがきっかけでSCPの物語が作られるようになった。

通称「不死身のクソトカゲ」でおなじみのSCP。このSCPに対して財団の最高位委員会O5から破壊試験の命令がされている。これ以上の力をもつSCPを作ってはいけないとされるほど。

SCP-040-JP(http://ja.scp-wiki.net/scp-040-jp)
(ちょいホラー)

Twitterとかでも見られるネタ。JPというのは日本で生まれたSCPという意味でほかにもRU(ロシア)やCN(中国)など各国のSCPが存在する。ねこはいます。このSCPを初めてみたときは、ほんとに画像が頭から離れない感じでドキドキしましたね。あれはねこです。YouTubeとかにBB素材もあると思うのでよかったらどうぞ(誰もねこはそこに居ますいらないだろ)

イケメン「アベル」君ですね。補遺ではプロトコルで描かれた凶悪な存在とは違う一面も垣間見えます。

・感動系

感動系SCPの中では一番好きなSCPかもしれません。オブジェクトクラスNeutralizedとは破壊もしくは異常性がなくなったオブジェクトが属するクラスです。精神が宿る系の話はほかにも多くありそうです。

SCP-1983(http://ja.scp-wiki.net/scp-1983)
(微グロ・ちょいホラー)

死を悟ったエージェントによる手掛かりとDクラス職員(実験のための使い捨ての人材)の勇気によって無力化されたSCPです。読んでいてわかる通り、難解な内容(今回は間取りですけど)の記事もあるので考察のし甲斐があり面白いですよね。

・ギャグ系

オブジェクト名からわかる通りネタ系のSCPです。JはJoke(ジョーク)を意味しています。

カニですね。確かにカニです。ネタのためにページも弄ったとかにがえるとそこにもクスっとかにますよね。

・難解、考察系

文書を読んだだけだと「意味わからん」となりますが、補遺を読むと納得できます。このSCPは補遺で解説されているだけ親切ですね。

あれ?これだけSCP○○の表記がありませんね。記事の内容も、初めて出てくる名称がたくさん出てきています。そして最後のインタビュー記事、なぜ女性(兎)は苦しんだ様子なのでしょうか?


解説 このSCPを理解するためには「名称」を注意深く読むことが大切です。SCP内では「名辞する」という行為は、名辞した人間の存在が改変され、名辞した対象(とその付近にあるもの?)の概念が人間に流れ込み、肉体や名前が変化することを意味する。以上のルールを兎は知っており、博士に「博士と兎は学者仲間」という認識をさせようと何度もそう呼び掛けています。博士が学者仲間であることを認識した上で、兎が「そよ風が家の中を通り抜ける。」の一文前で「学者の友」と呼ぶことで博士という概念が兎に、兎の概念が博士に移りました。つまり、上の描写以降のピンク文字は博士、博士の言葉は兎の言葉ということです。泣いていたのは博士だったんですね。また、後記からわかるように名辞には周囲の現実改変能力もあるようです。もっと詳しい解説は以下のページを参考に。https://scpnote.com/archives/scp-4000.html

(疲れた。禁忌難しすぎ)

EXというのはExplainedオブジェクトクラスで、実はSCPじゃないねっていうオブジェクトに振られるクラスです。


解説 実は今我々が見ている色はSCPによって汚染されているという話。白黒写真こそが本来の色であり、汚染前の美しい色である。この汚染が止められないと考えた財団は人類に、今までの色も汚染後の色のものであると認識させることでEXとした。

 

・絶望・終焉系

K-クラス世界終焉シナリオとはその名の通り、世界の終わりです。特にこのSCPは自己増殖によるNK-クラスシナリオにつながり得ます。

まとめ

マジでSCPのことしか書いてないな。。。サークルのブログで書く意味なくない?

月一を維持するために1/31 27:50に書き上げたので許してください。何もしないけど。

 

この記事で紹介していないSCPがまだまだあるので(本当にまだまだ。7000個くらい)興味を持った人はぜひ調べてみて下さい!

 

以上kurokuでした。来月はちゃんとプログラムのこと書くから!(Unityか競プロか)

 

【月一】もう年末ってマ?

実家にいるときは親戚が来たり、餅の準備的なことがあって年末年始感がありますが、一人暮らしだとほんとに何もかんじないですよね。

どーも。kurokuです。

12/30、僕は15時に起きて、16時からRiJのマリオ5リレーを見てからこの記事を書いています。脳みそどこ…?ここ…?

RTA面白いからみんなもみよう!(見よう!)

 

RTAinJAPAN

https://www.youtube.com/channel/UCV8gEA4XEycdFx-myEpokLg

 

 

今回で2019年最後の記事となりますが、そんなの関係なしにつらつらと書いていきます。

さて、今回の題材としては「ゲーム制作でのポインタの使い方」、「ブログのおすすめ」があったのでそれについて触れていきます。

ポインタって何だっけ?

ポインタは変数をメモリ的に直接扱うことのできる型でした。

変数とはあくまでメモリ上のどこかに確保された領域であり、そのアドレスを指し示すのがポインタです。ポインタは*や&といった演算子を用い操作を行います。

*aと書けばアドレスaに格納されているものを表すことになりますし、&aなら変数aのアドレスを表すことになります。

例えばaをint型としてscanf(“%d”,&a)と書いた場合、変数a(のアドレス)に入力した値を格納します。ここで、aをはじめからアドレスを表す方で宣言した場合は以下のようになります。

int main() {
  int a_;
  int* a = &a_;         //ポインタは初期化が必須
  scanf(“%d”, a);       //3を入力
  printf(“%d\n”, *a); //3
  printf(“%d”, a_);     //3
}

scanf()入力された値をアドレスに格納するので、int*で宣言されたaには&をつける必要がありません。またa_とaは実質的に同じアドレスを指しているので、a_に入力していないにもかかわらず*a(アドレスaの中身)に値が格納されたことで、a_にも値が入ったということになっています。

ポインタを使おう! 使お… 使うの…?

さて、このポインタという概念ですがゲーム制作をする上では全く(は言い過ぎですが)意識する必要がないことが多いです。

皆さんはメモリを意識してゲームを作っているでしょうか?

「この値は高々10000だからshort型でいいや」とか「そんなに精度いらないからfloatで」とか考えてないですよね。その理由はリソースがたくさんあるからです。皆さんのPCのドライブは何GBくらいでしょうか。どんなに少なく見積もっても100GBはありますよね(知らんけど)。ゲーム会社が販売してるゲームでも100GBのメモリを必要とするゲームはないでしょう(多分)。

つまりラズパイなどのハードウェアをいじるのを除けば、メモリを意識する必要なんて今のご時世そうそうありません。なのでポインタのことなんて今年で忘れちゃいましょう!

なんて言うと思ったか!

いや、その通りなんですが、普通にプログラミングをしていてもポインタを使えると便利な場面が多々あります。

最たるものが関数への参照渡し。

以下のプログラムを考えます。

void f(int a,int b) {
  a = a + b;
}

void g(int* a, int* b) {
  *a = *a + *b;
}

int main() {
  int a = 3, b = 5;
  f(a, b);
  printf(“%d\n”, a);
  g(&a, &b);
  printf(“%d\n”, a);
}

これを実行すると

と表示されるはずです。ほとんど同じ関数なのになんで結果が違うのか、そもそもfでa=a+bされているんだから最初の表示も8じゃないのかという疑問が起こりますね。

なぜこんな挙動になるのか、関数では変数をコピーし、その新たな変数を変更するからです。

つまり上のプログラムで、関数fのaとmain関数内で定義したaのアドレスは異なり、関数fで足し算を行ったaはmain関数のaとは何の関係もないのです。

一方で、gではaのアドレスを関数に渡していますね。これを参照渡しといい、関数g内のaとmain関数内のaは同じものです。

 

これによって、ポインタを使えば関数内で変数の値を変更できることがわかりました。

ただし上のプログラムは関数fをvoid型ではなくint型にしてaを返せばよいです。これではあまり恩恵があるとは言えません。

 

しかし、複数の変数に対して操作を行いたい場合はどうでしょうか?

C言語では複数の型をまとめて扱う型がないので、複数の型の変数を返り値とする関数を作ることができません。

ここで参照渡しが威力を発揮するわけです。なぜなら返り値がいらないので。

 

また、ポインタが使われている代表的な構造として配列がありますが、C言語では固定長(つまり長さを決めたら増減できない)の配列しか宣言できません。が、mallocやcalloc、new演算子などを使うと任意の長さの(つまり可変長の)配列にすることができます。

これもメモリ上のアドレスをいくつか確保することにより実現されているのですが、メモリの領域にも種類があり、<s>よくわからない</s>複雑なので割愛します。

 

ということで、ゲーム制作に使うだろうポインタ知識はこのくらいで。

ブログは何がいいのか?

次の話題です。

ブログ始めたいけど、おすすめのブログあるか~って感じでしょうか。

自分もブログの種類詳しくないので、ゆる~く紹介していきます。

 

まずブログを2種類に分けたいと思います。

①発信のためのブログ

②まとめノート的なブログ

です。

 

①は自分が書いた記事をいろんな人に見てもらって、コメントをもらいたい。アフィで稼ぎたい。意見交換がしたい。など不特定多数に見られるのを前提とします。

一方で②はあくまで自分用。まとめノートやメモ書きなどとして書くものとします。

(正直非公開設定があると思うので分類がしなくてもですが)

 

①の代表例:

WordPress、はてなブログ、アメブロ、Qiiita

とかですかね(詳しくはhttps://ferret-plus.com/1301

 

②の代表例:

ScrapBox、note

とか…?(正直非公開にすればいいので

 

特に、理工系のまとめを書きたいならLaTeXで書けるScrapBoxがおすすめです。

 

LateXのコマンド一覧:

https://medemanabu.net/latex/latex-commands-list/

 

ただ、見やすくなりますが書くの面倒です。

また手書きしたものを画像として載せることもできます。(ペンタブ的なの持っていればそっちの方が楽)

 

あ、31日になりました。

 

まとめ

 

 

 

 

特になし。

 

ということで2019年最後の記事でした。

来年はインターン、TOEIC、研究室配属と大学が牙を剥いてくる一年になるかと思いますが、競プロやソフト製作も続けていきたいですね。

 

以上、kurokuでした~

【月一】競技プログラミングに触れる回

こんにちは、kurokuです。先月から始めたこの【月一】企画、第二回にして期限ぎりぎりとなってしまいました。先が思いやられますね。とりあえず年度内はこのペースを保っていきたいです。

題材提供

前回ホワイトボードで募集した題材の中に「DxLibで3D」というのがありました。これは厄介だ。なんといってもDxLibは2Dですら結構大変なコードの記述が必要です。例えば当たり判定なんかも、実装自体は軽めですが上下左右に適用したり、足場のふちに当たった際の判定など書かなければならないことが多くなってしまいます。

まぁDxLibのサンプルゲーム見ればなんとなくわかるやろ、と思って以下のページを見てみました。

https://dxlib.xsrv.jp/program/dxprogram_3D.html

その中でもゲームを作るのに重要そうなのは1とか19かなーってコードを眺めていました。

???

いや、それぞれどういう動作なのかはなんとなくわかりそうですが、デバッグ用のオブジェクトを置くのにも大変そう、変数の存在範囲が広すぎてパラメタがどんどん増えそう。といった感じがしてきてア。

そこで今回のタイトルは何だったでしょう?「競技プログラミング」?3Dゲームは?

はい、3Dゲームについての記事は書けませんでしたぁぁぁぁぁ

3Dゲーム作るならUnity使おう!マウス操作だけでオブジェクトが生成できる!(すごい!)Unityちゃんかわいい!

というわけで3Dゲームを作ってみたいって人はUnityをお勧めします。というかUnityなら何でもできます。(Unityがこの世界を作ったといっても過言

https://unity.com/ja

Unityは何といってもAsset storeが充実しています。Assetというのはいわば、物とか材質とかです。月末報告会でのまんじゅう君のUnityちゃんやYutaさんの車がそうです(多分)。これらには基本的なプログラムがあらかじめ作成されており、ゲームの動きさえ書いてしまえばOKという感じです!

ただ、Unityで使われている言語はC#で、バリバリにオブジェクト指向の考えを取り入れています。なのでC言語から入った人だとコードの違いに混乱してしまうかもしれません。幸い、ブログ記事などが多く書かれているので、C#が書けなくても調べさえすれば大丈夫なことが多いです。

本題

やっと前回の言い訳説明が終わったので、競プロの話をば。

競プロとはなんぞやというのは以前ガナリヤさんが書いた記事があるのでそちらを参考に。

http://akitatnp.wp.xdomain.jp/2019/03/23/tnp%e7%ab%b6%e3%83%97%e3%83%ad%e6%94%af%e9%83%a8%e3%81%ae%e6%b4%bb%e5%8b%95%e7%b5%90%e6%9e%9c%e3%81%a8%e4%bb%8a%e5%be%8c%e6%98%a5%e3%81%ae%e3%83%9d%e3%82%a8%e3%83%a0%e6%9e%a0/

(これリンクを短縮形で貼るのどうやってやるんだろうか

こうゆうのもあるよっていう紹介・体験を来週の水曜か金曜にやろうと思ってます。(2019/11/30現在)

冬コミのゲームできて(僕はまだ作ってませんが)当分はすることないやって人や少しでも興味があるって人は挑戦してもらいたいです。

内容としてはごくごく簡単めな問題を実際に解いてもらうって感じにしようと思います。配点としては100-100-100-200-200-300くらい?基本的に標準入力(scanf)、標準出力(printf)、if、for、配列ぐらいがわかっていれば解けるような問題を用意します。(1時間くらいを想定)

100点問題なんかはほんとに入力して、四則演算して、出力みたいなものですし、300点は少し頭を使うような問題と思ってもらえればいいと思います。

日本だとAtCoderが大きいコンテストサイトですかね。(来週の問題もAtCoderの問題を出題します)

https://atcoder.jp/?lang=ja

(ほぼ)毎週土曜21時からコンテストが開催されてます。よかったら参加してみましょう。

まとめ

競技プログラミングは名前からしていかついと思われがち(いや、しらんけど)ですが、やってみると楽しいです。競プロにはまっている人を見るとそんなに時間をとれないと思うかもしれませんが、たまに参加してみるでも全然いいと思います。

毎年夏~秋には大学対抗のICPCという世界規模の大会も開催されます。僕は学部生の内に一回は予選を突破して、横浜大会に出てみたいです。もし、一緒に出てくれる人がいたら全力でサポートするので、来週の回はそれの足掛かりにしてもらえればと思います。

そんな感じでまた来月~

kurokuでした!

【月一】C++っておいしいの?

はじめに

お待たせ。待った?どうもプログラミングサークルTNP所属の広報担当kurokuです。(キツ…

先日サークル内で役職の引継ぎがあり、見事、広報担当(ブログ・Twitter更新)になってしまいましたなりました。

引継ぎの際に反省会も行われ、更新頻度について触れました。いい機会なので僕の目標というか、目安として(最低でも)月一回はブログを更新していきたいと思います。

 

そうはいうものの、毎月更新するとなると話題がなくなります。ただでさえ僕はグラブル、YouTubeでしか時間をつぶしていない気がするので、こんなことなら別に書かなくてもいいよなぁとか思うわけです。(むしろ書かない方がいい

そこで、サークル室のホワイトボードにブログの題材として質問などを受け付けようと考えました。誰でもいいのでゲーム制作でわからないことやプログラミングについてなどどんなことでもいいので書いてみてください。(コメント等でも歓迎です!

それについて僕が少し勉強して、このブログでできるだけ簡潔に、情報共有ができればなと思います。

(ただ、あまりにおじさんを悩ませるような難しい質問をすると僕の独断でなかったことにしてしまうかもしれません…)

 

C++ってどうなの?

さて、いよいよ本題です!ホワイトボードに早速題材が書いてありました。

「C++について」

 

いやいや。。

(雑じゃない?)

 

まぁいいんです。書きます。こんな感じでどんどん題材ください!

(できればもうちょい具体的に!

C++とは、手続型プログラミング言語であったC言語にオブジェクト指向やジェネリックプログラミングの考えを取り込んだ言語です。それぞれわかりやすく言うと、

・手続型

 プログラムを順番に実行していく

・オブジェクト指向

 オブジェクト(データと処理内容)ごとに独立させる考え

・ジェネリックプログラミング

 型などを意識させないように抽象化して記述する

といった感じ。

一見してC言語をもりもりにパワーアップさせたのがC++といった感がしますが、それは間違いありません。

しかし、そんなC++にも弱点はあります。

それは文法が難しいこと。

 
(僕はC言語由来のプログラムしか書けないのでわかりませんが)多重継承というのを組み込んだせいでポリモーフィズムにも影響が出たりでなかったり(?)
 
 
 
 

よくわかんないですねーー。

 
 
 
ですがサークル内でゲームを作る分には使えて損はないです。ライブラリもリファレンスも結構多めですし、何よりC言語が書ければC++も書ける!

これで終わってもいいんですが、内容がなさすぎるのでどんなことができるのかについて軽く触れたいと思います。

#include<iostream>

#include<string>

int main(void) {

std::string s = “hello”;

std::cout << s << std::endl;  //hello

       return 0;

}

C言語だとchar型の配列で書く必要があった文字列もC++ではstring型(正確にはstringクラス)に格納することができます。それに加え、文字列同士の足し算や部分文字列(例えば”ell”)を取り出したりなんかもできます。

std::cout<<s+s<<std::endl;  //hellohello

std::cout<<s.substr(1,3)<<std::endl;  //ell

#include<iostream>
#include<vector>
int main(void) {
  std::vector<int> vec;
  vec.push_back(0);
  vec.push_back(1);
  vec.push_back(2);
  for (int i = 0; i < vec.size(); i++) {
    std::cout << vec[i] << std::endl;  //0,1,2
  }                   

      return 0;
}

vector型(クラス)は配列とほとんど同じ挙動をします。ただ、宣言の部分で要素数を書いていないにもかかわらず値を格納することができています。

vectorは可変長配列と言われ、要素数を自由に変化させることができます。上の例だと宣言時は要素数は0でしたがpush_back()するたびに自身で要素を増やし格納しています!(push_backは末尾に格納するメソッド(関数))

さらにvectorはジェネリックプログラミングの要素も持っています。宣言する際にvector<int>としていますが、これはint型を要素に持つvectorを宣言しています。たとえばintの部分をdoubleやboolあるいは、自作の型MyDataとしてもvector<int>と同じく扱うことができます!

最後に紹介するのは演算子のオーバーロードです。

関数やデータ構造をユーザ側で定義できるのは知っていると思いますが、演算子についてもユーザが定義することができます!

例えば、

#include
#include
std::vector<int> operator*(const std::vector<int>& vec, const int& t) {
  std::vector<int>v(vec.size());
  for (int i = 0; i < vec.size(); i++) {
    v[i] = vec[i] * t;
  }
  return v;
}
int main(void) {
  std::vector<int> v = { 0, 1, 2, 3, 4 };
  v = v * 5;
  for (int i = 0; i < v.size(); i++) {
    std::cout << v[i] << std::endl;  //0,5,10,15,20
  }
  return 0;
}

と書いてみます。本来vector<int>*intなんてできませんが自分で*を定義することでそれを実現できてしまいます!

しかし、演算子オーバーロードを闇雲に使うと演算子本来の挙動と整合性が取れなくなりとても危険です!詳しいことは各自で調べてもらうとして、できるだけあらかじめ実装されているものを使うようにしましょう。

まとめ

大したこと書いてないのでまとめもくそもないんですが、まぁC++はいろいろ楽だよってことが伝わればいいかなと思います。興味が出てきた人はC++について調べたり、聞いたりして闇をのぞき込んでみればいいと思います。

こんな感じの雑まとめをこれからも月一以上で出していくのでどうぞお楽しみに!kurokuでした~。

ICPC2019国内参加記 team_YARUDAKE編

初めまして!二年生のkuroku(でんそん)です。サークルのブログをはじめて執筆するのでどんな雰囲気で書けばいいかいまいちわかりませんが、先日行われたICPC国内予選の感想などを伝えられたらなと思います!

我々の先輩方の参加記(Tech_ONS編)もあるのでそちらも合わせてご覧ください!

(ブログ慣れてないのでリンクとか参考とかはTech_ONS編から飛ぶか自分で調べて!)

チーム概要

そもそもチームについてなんですが、他の有名つよつよ大学に比べてうちの大学の競プロer人口が少ないです(それはそう

なので、チームを組むにあたってはサークル内のゲーム制作ニキ(AtCoderにはお触り済み)たちに声をかけて一緒に出てもらうことになりました。

いっちーさん、まんじゅうくんありがとうございました。

準備としては国内模擬の際の1完でやばいと感じつつ、全探索とグラフのおべんきょをがんばったつもりでした(つもりね

国内予選当日

1コマ目の授業が監督の先生の授業だったので終了後挨拶に行って、リハーサルを一通りやって昼食、一つ授業を挟んで14:30にガナリヤさんと同着で会場入り。

なんとなく早く来たものの、普段VisualStudioの設定はそのままでやっているので環境構築RTAの練習もせず、1完はやだなぁとか考えていました。

そんなこんなで16:30になり、コンテストが始まりました。ほとんどのチームはA、Bあたりは分担して解くと思いますが、自分たちのチームはとりあえず3人で1問解こうみたいな感じの方針でした。

A問題は苦戦することなくAC(列が生徒だったのが少し気持ち悪かったですが(転置とったらどーですか

B問題は現在の座標を持って二重ループを回し、始点と終点のマンハッタン距離を測っていきました。しかしサンプルケースの答えが合わずインデックスがずれたか見てると、決定ボタンを押した回数も答えに入れるよと教えてもらい提出。実行時に9sくらいかかってたけど無視して提出したらACでした。

C問題に取り掛かり、mの制約をみて全探索っぺぇ~と思いながら考察へ。見立て通り分銅は「左に乗せる」、「右に乗せる」、「乗せない」の3通りしかないのでO(3^m)だとわかったのですが実装ができん(あれ、全探索。。。

30分くらい詰まったのでいったんDを見に行って、「これ、AtC●derでやったとこだ!」と思いつつよくわかりませんでした。順位表を見てもCを飛ばしてDをACしているチームは少なかったのでまたCに戻って頭を悩ましていました。

長いようで長かった3時間が過ぎ、初めてのICPC国内予選は2完という結果でした。感想としては全探索がしっかりかければ3完できそうだなぁっていうのと、チームでコンテストに参加するのはたのしいってところでしょうか。

今回の後日談(まとめ)

最近競プロ以外のことに目移りしまくりでしたが、ICPCはモチベ上昇にもなってもっと精進したいと思いました。

コンテスト終了後にガナリヤさんにC問題を教えていただいて、そういう勉強会的なのも面白いと思います。(もっと競プロerが増えればやってもいいねっておっしゃっていたのでもっと増えてどうぞ

ぼく個人の目標は今年中にAtCoder水色になることで、来年のICPCでは4完したいですね。(なお今のratingは…

まんじゅうくんも前回のABCでC問題を解けていたので来年は水色行けるでしょ(鼻ほじ←C解けなかったやつ

後輩たちにもどんどん競プロでハラス布教して勉強会できるくらいの人を集めてみたいですね。

来年のICPCに向けていろんな希望をもったところでこの記事を締めたいと思います。

以上、kurokuでした~!(文字だらけでごめんね!

Top