激動の2019 冷凍で鮮度十分

な鮭が義兄の実家がある北海道から送られてきました. 骨がたくさんあったので食べにくかったです.骨多いタイプの魚をきれいに食べる芸当を持っている人,すごいと思う.


この記事はICT Advent Calender 201929日目の記事です.

前日は1年生のたぴおかさんでした.NICT賞おめでとうございます.

tapiokamai.hatenablog.com

自己紹介

3-5に行くことが少なくなったので一応自己紹介をしておきます.

"kurokoji"は"くろこじ"と読みます.

2019年を振り返る

以下に今年の記憶に残った出来事を記します.

大学編入に合格した

岐阜大学工学部電気電子・情報工学科 情報コースの3年次編入試験に合格しました. 詳しいことは以下の記事に書いてあります.

kurokoji.hatenablog.com

OpenSiv3DのContributorになった

8月のOpenSiv3Dの開発者である@Reputelessさんに沖縄高専でOpenSiv3D勉強会を開いて頂いたことをきっかけに,開発のお手伝いをすることになりました.

ちなみに現時点でぼくが担当したのは,LinuxにおけるMessageBoxを実装するタスクです.以下のPRでマージされました.

github.com

自分が使っていたライブラリ・フレームワークに貢献出来るのって嬉しいですよ.みんなも余裕があればやりましょう.

PARADISE JAM 2019で最優秀賞を獲った

PARADISE JAM 2019というハッカソンで最優秀賞を貰いました.

テーマは火災で焼失してしまった「首里城」でした. いや,このテーマすごく難しくて,あまり攻め過ぎたネタで挑むと不謹慎になってしまうし,攻めないなら攻めないで他のチームとネタが被りそうなものでした.

もうちょっといい感じのテーマにして頂きたい.(まあ,それでも最優秀もらうのがぼくらなんだけどね〜〜〜〜〜〜〜〜〜〜〜)

チーム構成は以下.

チーム名: シクロウチ倉庫

全員12th,という最強の布陣を敷いてハッカソンに臨みました.

ぼくはアプリケーションのゲーム部分を担当しました.初めて加速度センサやジャイロセンサなどを使いましたが辛かったです.ちなみに大会中は「今までの開発で一番楽しくない」とか言ってましたが,終わってみれば結果が結果なので良かったかなと思っています.

他のチームに比べて面白さみたいなのは劣っていたかもしれませんが,完成度は我々が一番高かったです.ここは5年間積んできた経験の差が出たんじゃないかなあと思います.マネジメントもデザインも技術も.

初めてハッカソンに参加しましたが,5年間最後の良い思い出になりました.チームのみんなありがとう.

作ったアプリは以下から遊べます.音が出ます.(スマホのみ)

ChukuYatchi

#procon30 競技部門

#procon27, #procon28, #procon29 と3年連続で高専プロコン競技部門に出場していましたが,今年は受験と卒研があるということで一線から退き,後輩に優勝という夢を託しました.

ですが,#procon30 は競技経験者が1人のみということで,開発には参加しないもののサポートはしていました.Solverの作り方などなど.正直ちょっと干渉しすぎた感があるので反省しています. 結果としてはあんまり良くなかったかもしれませんが,来年は優勝するとひがし@higashi136_2くんが宣言していたので皆さん期待してください.ちなみに,来年からぼくは大学生であるにも関わらずに,Slackの#procon31_kyogiというチャンネルにinviteさせられました.

あと,YouTubeで1日目の競技部門の実況をしていました.まさか,途中で公式配信が止まって視聴者がぼくのほうに流れてくるとは思いませんでした.ヤフー株式会社はぼくにお金を払ってほしいです.

www.youtube.com

20歳になった

ついにお酒が飲める年齢になりました.とは言うものの,お酒はまだ1度しか飲んでいません.あんまり気分が良いものではなかったので1年に1回くらいで良いかなと思っています. タバコは絶対にやりません.

おわりに

卒業するまで3ヶ月しかないです.それまでに持ってる知識は後輩に継承していけたら良いなと思っています.

最後に韻を踏もうと思います.

日比谷線で日々野戦 飯食わなきゃ痩せんじゃね? と思っても日々響く『召し上がれ』 そこで出てきたキーマカレー ここまで来たら引き下がれん ヒリヒリする舌に一度停戦

Yeah

明日はびーまかの記事です.

2020(令和2)年度 岐阜大学3年次編入試験受験記

2019/05/25に実施された,岐阜大学3年次編入試験(推薦入試)に合格した. 以下に試験内容,やった対策などを述べる.

併願校

岐阜大学以外に願書を出した大学・専攻科.岐阜大学から合格通知があったのちに,この2校の受験日だったため受験自体はしていない.

志望学部・学科・コース

工学部 電気電子・情報工学科 情報コース

筆者の情報

出身校

沖縄工業高等専門学校 メディア情報工学

部活動

ICT委員会(いわゆるプログラミング部)

主に

など,競技系の大会に出ていた.

席次

岐阜大学の推薦試験では席次は関係ないため,具体的に覚えていないが,1~4年で平均して6位くらいだったと思われる.

TOEIC

これも推薦試験では必要ないが,落ちたらTOEIC必須の一般試験も受験するつもりであったため,述べておく.はっきり言って見せたくないほど低い.

  • 3年10月: 220(IP)
  • 4年10月: 420(IP)
  • 4年03月: 450

受験までのフロー

1~3年

なんとなく受験かなぁ,みたいな気持ちになっていた. 特に志望校も決めず部活に集中していた.

3年春休み

そろそろ進路を決めなければならない時期になり,焦り始める. 色々ネットで情報を集めて,とりあえず編入用の本を買う.

4年夏休み

学校の授業として必修のインターンシップに行く.ちなみに2社行った. 他の高専生・大学生と力比べをしてみて,そのまま就職しても全然戦えるなぁと思ってしまい,かなり進路に迷った.

4年10月~11月

高専プロコンも終わり,進路の最終決定に取り掛かる.4年間の高専生生活を経て 「プログラム理論・型システム」 が面白そうだなぁと思い,そのような研究室が高専にあればよかったが無いので大学進学を決意した.

志望校を決めるためにネットで探してみた結果,京都大や筑波大などの名門大にそのような研究室があることが分かったが,この時期から狙える頭と時間を持ち合わせていなかったため,その辺の大学は狙わないことにした.

さらに探すと,岐阜大や群馬大に同様の研究室があった.2校とも苦手な物理が受験科目になく,これなら勉強すれば間に合いそうだったため,志望校をこの2校と滑り止めの専攻科として決定した.

4年1~3月

岐阜大に推薦を出すことを心に決めていたが,落ちることを想定して,一般試験の対策をしていた.

岐阜大と専攻科の一般試験にはTOEICが必須であったため,TOEICの対策をしていた. また,同時に数学を勉強していた. 使った本などは,後に述べる.

5年4~5月

引き続き数学の対策と新たに専門科目の対策をしていた.専門科目はあんまり難しくなかったためそこまで本腰を入れてはやらなかった.

また,同じ学科の進学勢の人々と一緒に過去問を解いたりしていた.

試験

成績配分と合格基準

成績配分

面接 成績証明書 合計
配点 150 100 250

これにおける,成績証明書の換算法は,

1~4年の各科目の成績で,

  • 80点以上の科目数を A
  • 70点以上79点以下の科目数を B
  • 60点以上69点以下の科目数を C

また,総科目数を S

としたとき,

成績証明書の換算式
\frac{(A \times 5) + (B \times 3) + (C \times 1)}{S} \times 20

と換算する.

ぼくの場合,93点くらいでした.

合格基準

工学部全体の成績トップから順に合格となる.

  • 面接の得点が配点の60%未満の者
  • 成績証明書の得点が配点の80%未満の者

は不合格となる.

試験当日

試験前

クソ暑いことは分かっていたのでスーツを着ていかなかった. しかし,僕以外の人間のおそらく全員がスーツを着ていて笑ってしまった.

電気電子・情報工学を受ける人,それ以外のコースを受ける人で2つの部屋に分けられて待機していた.

暇だったのでTwitterをしながらリラックスしていた.

一発目に面接をした.

面接会場には,面接官の先生が3~4人いた.

これは良かったのかどうか分からなかったが,主に質問をしていた先生が志望する研究室の先生だった.

面接で聞かれたこと

(試験直後にメモしていたので内容は大体正確であるはず)

Q1. 志望動機は?
A1. (志望動機に書いたことをそのまましゃべる)

Q2. プロコンの開発とかで静的解析に助けられたって言ってたけど,どういうやつ?
A2. Lintとかです.

Q3. 好きな数学の証明ある?(質問した先生いわく,「証明が好きな人だと,この分野は楽しい」らしい)
A3. そんなことは考えたことがないのでないです.

Q4. ETロボコンって何?(実績に書いていたため)
A4. レゴのマインドストーム使ってライントレースする大会です.

Q5. 愛媛大プログラミングコンテストって何?(実績に書いていたため)
A5. 競技プログラミングの大会です.

Q6. その大会で得られた面白い発見とかありますか?
A6. 競技プログラミングというものは,問題が与えられて解くだけなので,特に発見といったものはありませんでした.

Q7. 高専プロコンって何?(実績に書いていたため)
A7. 全国の高専生が集まってアプリを作ったり,競技部門ではある課題を解くプログラムを作って競いあったりします.僕は,その競技部門に3年間出ていました.

Q9. その3年間で印象に残ってることは?
A9. 28回大会の問題(パズルの問題)が面白かったです.(競技の内容説明).1回戦で1位になれたことが人生で一番嬉しかった.

Q10. その大会で得られた面白い発見とかありますか?
A10. ビームサーチというメタヒューリスティクスアルゴリズムを使うと大体いい感じの解が得られたことです.

Q11. 大学院行く?
A11. 今のところ行く予定です.

Q12. 大学に入って,勉学でもそれ以外でもいいのでやりたいことは何?
A12. ICPCという競技プログラミングの大会に出場したい.

試験後

うまく答えらなかったところもあり,手応えが無かった.

帰るときに,目の前でバスが3回連続で通り過ぎていったので悲しくなる.

試験における留意点

1. 口頭試問が実際には存在しない問題

募集要項の中で,以下のような文言がある.

面接(口頭試問を含む)及び成績証明書(調査書を含む)により,総合的に合否を判定します。なお,推薦書及び志望理由書は面接において参考資料とします。

引用元: 2020(令和2)年度工学部3年次編入学募集要項 p.11

口頭試問があるということだったため,ある程度数学や専門の勉強をしていた. しかし,実際には口頭試問が無かった.ネット上にはこのような情報は無かったため驚いた.もしかしたら,毎回募集要項に書いているだけで実際にやっているわけではないかもしれない.

2. 服装問題

スーツを着ずに普通の格好で面接を受けた.結果的にそのぼくは合格していたため,スーツの着用が合否に響かないことが証明された.これから大学編入試験に挑む全人類はぜひとも普段着で面接に臨んで頂きたい.無理して暑い時期にスーツを着る必要など無いのだ.ただ,それで落ちたからといってこのブログやTwitterにぼくへの責任を求めることはしないで頂きたい.

試験対策

一般対策

数学

  • 編入数学徹底研究: 頻出問題と過去問題の演習

これは絶対に買うべき.地方国立ならこれで十分だと思われる.1周半した. 個人購入.

編入数学徹底研究: 頻出問題と過去問題の演習

編入数学徹底研究: 頻出問題と過去問題の演習

  • スバラシク実力がつくと評判の線形代数キャンパス・ゼミ―大学の数学がこんなに分かる!単位なんて楽に取れる!

学校でやってない線形の範囲を勉強するために使った.1周した.学校の図書館から借りた.

  • 大学編入のための数学問題集

解説が結構丁寧.ぼくは難しそうなものをピックアップして解いた.特殊なルートで貰った.

大学編入のための数学問題集

大学編入のための数学問題集

あんまり使ってない.難しい.特殊なルートで貰った.

大学編入試験問題 数学/徹底演習(第3版)-微分積分/線形代数/応用数学/確率-

大学編入試験問題 数学/徹底演習(第3版)-微分積分/線形代数/応用数学/確率-

英語

  • TOEIC L & R TEST 出る単特急 金のフレーズ (TOEIC TEST 特急シリーズ)

単語を覚えるために使った.半分くらいやった.個人購入.

  • [新形式問題対応/音声DL付]TOEIC(R) L&Rテスト 直前の技術

英語が出来なくてもこれやったら200点上がった.意味が分かりません.学校の授業で使ってたもの.

[新形式問題対応/音声DL付]TOEIC(R) L&Rテスト 直前の技術

[新形式問題対応/音声DL付]TOEIC(R) L&Rテスト 直前の技術

  • 鉄緑会東大英単語熟語 鉄壁

3年生のときに買って少しだけやって挫折した.個人購入.

鉄緑会東大英単語熟語 鉄壁

鉄緑会東大英単語熟語 鉄壁

専門

論理回路苦手なので使った.研究室に置かれてたものを借りた.

論理回路入門 第2版

論理回路入門 第2版

面接対策

してない.というより出来なかった.というのも,受験1週間前に担当教員とやろうと思っていたが,思いっきり体調を崩し1週間休んでしまった.結果的に受かったから良いものの,練習しないのはリスクが高いのでやったほうが良い.ちなみにぼくが緊張せずに出来たのはスーツを着なかったからである.スーツを着るな.

まとめ

編入試験対策は本当に早く始めたほうが良い.特に英語はマジでやってほしい.ぼくはやってなかったので,一般だったら落ちていた可能性が濃厚だ.

また,仲間を見つけたほうが精神衛生上良い.弊校のように,大学編入受験をする人が少ない場合はStudyPlusなどの勉強用SNSで仲間を見つけるのも良いかもしれない.

ちなみにぼくは勉強のログをStudyPlusでつけ続けていた.結構モチベーションになるのでオススメである.

岐阜大学編入試験の情報があまりにも無さすぎて,対策が取りにくかった.旧帝大やその他上位大の受験者は,ブログに書いてくれる人が多いので助かるのだが,岐阜大を含む地方国立は本当に情報が無いので辛い思いをする.受験した人々は後輩のために筆を執っていただきたい.

ぼくに質問がある人はコメント,もしくはTwitterで連絡してください.

ICPC2019 国内予選参加記

2019/07/12 に開催されたICPC国内予選に沖縄高専「NeMiKoji」チームの一員として参加した.

結果

3完114位.

チームメンバー

各ニックネームの一部を切り取ってくっつけたのがチーム名だ.

実施環境

  • 場所: 沖縄高専 2Fプログラミング演習室
  • OS: MacOS Mojave
  • マシン: MacBookPro(ディスプレイとキーボードとマウスをつなぐのでレギュレーション違反でない)
  • キーボード: HHKB US配列(チーム全員がUS配列触れるマンだったので)
  • 使用言語: C++17
  • エディタ: NeoVim(coc.nvim+clangdで補完が効くようになっている)

スタイル

この中でおそらくタイピング速度が一番はやいのと,HHKBに慣れているkurokoji(ぼく)がコーディングを担当.

基本的にぼくがコーディングしているときに,nemusouとmitoが考察をするスタイル.

コンテスト前

特別ICPCの対策をしているわけではなく,各々研究室で時間を潰した.

ぼくは寝ていて,mitoはAndroidStudioで遊んでいて,nemusouはベースの練習をしていた.

15:55くらいに起床して,「もう16:00なるやん!! 急ごう!!」と二人を急かしたが,開始が16:30であることに気づきウケた.

ライブラリはUnionFindだけ印刷した.ぶっちゃけ幾何とか出ても解けないので.

コンテスト中

A問題

A問題はやるだけだったので,やった.ぼくがコーディングしつつ2人はBの解読にかかる.

8:00でAC.

#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>

int main() {
  int n, m;

  while (std::cin >> n >> m, n != 0 || m != 0) {
    int v[n][m];
    for (int i = 0; i < m; ++i) {
      for (int j = 0; j < n; ++j) {
        std::cin >> v[j][i];
      }
    }

    std::vector<int> sum(n);

    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < m; ++j) {
        sum[i] += v[i][j];
      }
    }

    std::cout << *std::max_element(sum.begin(), sum.end()) << std::endl;
  }
}

B問題

「B問題のBはBFS」と思いながらコーディング.最近,全くといって競技プログラミングをしていなかったので蟻本を見ながら実装する.

ちょいちょいバグを埋め込んだので時間を食ってしまう.

34:30でAC.よく考えたらマンハッタン距離を足すだけなのに無駄なことをしてしまった.

#include <iostream>
#include <vector>
#include <queue>

const int INF = 100000000;
const int dx[] = {0, 1, 0, -1};
const int dy[] = {1, 0, -1, 0};
int h, w;

int bfs(const std::vector<std::string>& field, int sy, int sx, int gy, int gx) {
  using P = std::pair<int, int>;
  int d[100][100];

  for (int i = 0; i < 100; ++i) {
    for (int j = 0; j < 100; ++j) {
      d[i][j] = INF;
    }
  }

  P p = {sy, sx};

  std::queue<P> q;
  q.emplace(p);
  d[sy][sx] = 0;

  while (!q.empty()) {
    auto [y, x] = q.front();
    q.pop();

    if (y == gy && x == gx) break;
    for (int i = 0; i < 4; ++i) {
      int ny = y + dy[i];
      int nx = x + dx[i];
      if (0 <= ny && ny < h && 0 <= nx && nx < w && d[ny][nx] == INF) {
        q.emplace(ny, nx);
        d[ny][nx] = d[y][x] + 1;
      }
    }
  }

  return d[gy][gx];
}

int main() {

  while (std::cin >> h >> w, h != 0 || w != 0) {
    std::vector<std::string> field(h);
    std::string s;

    for (int i = 0; i < h; ++i) {
      std::cin >> field[i];
    }

    std::cin >> s;

    int sum = 0;
    int fy = 0, fx = 0;
    for (auto&& c : s) {
      bool flg = false;
      int gy, gx;
      for (int i = 0; i < h; ++i) {
        for (int j = 0; j < w; ++j) {
          if (c == field[i][j]) {
            gy = i;
            gx = j;
            flg = true;
            break;
          }
        }
        if (flg) break;
      }

      sum += bfs(field, fy, fx, gy, gx);
      fy = gy;
      fx = gx;
    }

    std::cout << sum + s.size() << std::endl;
  }
}

C問題

先に問題を読んでいた二人から説明を聞きながら考察.なんかDPみたいなことするんだろうか,ウーンと唸りながら考えていた.mitoが分銅のパターンを列挙できそうみたいなことを言っていた.

これ全列挙したら時間足りなくね? と思ったのでまた考察に入った.その間に二人にはD問題を見てもらっていた.

よくよく考えたら計算量は  O(3^ M \times 100) なので制約を考慮すると現実的な時間に終わるやんというのに気づき実装を始める.

2:21:28にAC.通ったときはみんなでハイタッチした.めっちゃ嬉しかった.(けど時間かかりすぎ!!!!)

#include <iostream>
#include <vector>
#include <map>
#include <cstdint>
#include <unordered_map>

using lint = std::int_fast64_t;
int n, m;
int a[100], w[10];
std::map<lint, int> cand;

void func(int i = 0, int sum = 0) {
  if (i == m) {
    cand[sum]++;
    return;
  }

  func(i + 1, sum + w[i]);
  func(i + 1, sum - w[i]);
  func(i + 1, sum);
}

int main() {
  while (std::cin >> n >> m, n != 0 || m != 0) {
    cand = std::map<lint, int>();
    for (int i = 0; i < n; ++i) {
      std::cin >> a[i];
    }
    for (int i = 0; i < m; ++i) {
      std::cin >> w[i];
    }

    func();

    int cnt = 0;
    bool ok[100] = {};
    for (int i = 0; i < n; ++i) {
      for (auto&& e : cand) {
        if (a[i] == e.first) {
          cnt++;
          ok[i] = true;
        }
      }
    }

    std::map<lint, int> cand2;
    if (cnt == n) {
      std::cout << 0 << std::endl;
    } else {
      for (int i = 0; i < n; ++i) {
        std::unordered_map<lint, bool> m;
        if (ok[i]) continue;
        for (auto&& [key, value] : cand) {
          if (m[std::abs(a[i] - key)]) continue;
          cand2[std::abs(a[i] - key)]++;
          m[std::abs(a[i] - key)] = true;
        }
      }

      bool flg = false;

      for (auto&& [key, value] : cand2) {
        if (value == n - cnt) {
          std::cout << key << std::endl;
          flg = true;
          break;
        }
      }

      if (!flg) {
        std::cout << -1 << std::endl;
      }
    }
  }
}

D問題

全然分からなかった.とりあえずそれっぽいやつを書こうとしたけどC問題に時間を掛けすぎてタイムオーバー.

コンテスト後

3人とも互いに「最近競プロやってない割には頑張ったじゃない?」と褒め称えた.

実は昨年もmitoとぼくと先輩で参加したのだが,1完に終わって悔しかった記憶が残っていた.それに比べると3完なので良いよね.

感想

役割をちゃんと分業できたので,チームワークは割と良かったと思う.

予選は通過出来なかったが,良い経験だった.PCKぶりにチームで競プロをしたので楽しかった.

来年からぼくは岐阜大学に進学するのでこのチームで出場出来ないが,岐阜大でも仲間を見つけてICPC出場したい.(岐阜大ICPC出たことなさそうだが)

競技プログラミング引退したはずだったけど楽しいので復帰しそう?