なんかアレのアレをアレするとこ

プログラミングに関することが書けたらいいのになぁ

AtCoderにおける高橋くんのお話

目次

 

はじめに

この記事はKogakuin Univ Advent Calendar 2019 13日目の記事です。

adventar.org

さて、はじめましての方ははじめまして。そうじゃない方は......おりませんわな。だって初めてはてブに記事書くしなんならアカウントも数日前に取ったばっかだし。てなわけで記事の本題に入る前に少し自己紹介をさせていただきます。

紙幣と申します。今年度よりKogCoderに所属しました。特になんもできません。AtCoderも灰色コーダーです。何書きゃええねん。てなわけで今回の記事です。よろしくお願いします。

そもそもAtCoderってなあに

まあざっくり言うと競技プログラミング略して競プロが出来るサイトの1つですね。8日目にyudegakiさんがガッツリ語ってるので詳しくはそちらの記事をご覧ください(丸投げ)。

yudegaki.hatenablog.com

AtCoderにおける高橋くんについて

さて本題ですね。先ほどのyudegakiさんの記事でも言われてるようにAtCoderには文面が面白い問題がいくらか存在します。またAtCoderの問題には高橋くんという人物がよく登場します*1。そしてこれらが合わさった結果高橋くんはAtCoderの問題文内で奇怪なことに巻き込まれたり*2理解できない行動を起こしたり*3しがちです。今回はそんな高橋くんが登場する問題の中から「それわからんなんてことある??」とか「それ忘れたらあかんやろ......」みたいな問題をいくらか紹介したいと思います。

なお、今回の記事は問題選出の方針(と筆者の実力の低さ)の関係で比較的易しい問題ばかりとなっています。万が一上級者が読んでいたら温かい目で見守ってください。ここのコードこうするといいよ~とかあったらコメントで教えてくださるとありがたいです。僕と同じく初心者の方が読んでいたら一緒にこれらの問題で練習してつよくなりましょう。

ABC039B - エージェント高橋君

TK国のエージェントである高橋君は、とある正整数 X を青木君から受け取りました。

しかし実は青木君はAO国のスパイであり、本来渡すべき正整数を 4 乗したものを渡していました。

つまり、本来渡すべき正整数を N とすると、X=N4 です。

高橋君は非常に優秀なのでこれを見破りましたが、計算が苦手なので元の正整数、つまり N はなんだったのかがわかりません。

なので代わりにあなたが N を求めてください。

出典: B - エージェント高橋君

 いや非常に優秀なら4乗根計算してくれよ......。ちなみに僕が書いたコードはこんな感じです(自力で解きたい人のためにコード直貼りは避けてACした提出へのリンクを貼ります。使用言語はC++です。以下別の問題についても同様です)。

Submission #8924451 - AtCoder Beginner Contest 039

ABC015A - 高橋くんの研修

高橋くんは、ソフトウェア会社に勤めています。 その会社では、短い変数名はバグを生む原因だと信じられており、長い変数名を使う習慣があります。

いま高橋くんは 2 つの変数名を思いつきましたが、残念なことにその長さを見分けることが出来ません。

いろんな意味で可哀想な彼の代わりに、与えられた 2 つの小文字アルファベットのみからなる文字列のうち、文字数が長い方の文字列を求めてください。

 出典: A - 高橋くんの研修

 文字列の長さが比較できない高橋くん。文字数のカウントくらい出来てくれ。僕が書いたコードはこんな感じ。

Submission #8924760 - AtCoder Beginner Contest 015

ABC019A - 高橋くんと年齢

どんどん酷さが増していきます。

高橋くんは自分の年齢を忘れてしまいました。

ひとまず 3 人の友達を集めることに成功したので、その 3 人が予想する高橋くんの年齢の中央値を、高橋くんの年齢として代用することにしました。

高橋くんに代わって 3 つの整数 a,b,c から中央値を求めるプログラムを書いてください。

3 つの整数の中央値とは、それらを小さい順に並べて中央に位置する整数のことです。

出典: A - 高橋くんと年齢

 自分の年齢を忘れる。忘れたから友達3人合わせて年齢推定してもらってそれを代用するってのもおかしい。そもそも友達3人集めてる暇あったらその前に自分の身分証明書を探せ。僕の書いたコードはこちら。

Submission #8443186 - AtCoder Beginner Contest 019

ABC012A - 週末

高橋君は、週末が大好きです。高橋君は英語のデジタルカレンダーを使っているのですが、高橋君は英語の曜日を読むことができません。
カレンダーに表示されている曜日が与えられるので、あと何日で週末かを計算するプログラムを作成してください。
出典: A - 週末

英語の曜日を読めない。いや、読めないこと自体は百歩いや一万歩譲って許すわ。読めないもんを買うな。んでまあ僕が提出したコードはこんな感じです。

Submission #8931166 - AtCoder Regular Contest 012

ABC011A - 来月は何月?

高橋君は、来月遊びに行く約束をしました。

ですが、高橋君は頭が悪いので、来月が何月であるかが解りません。

今月が何月かが与えられるので、来月が何月であるかを出力するプログラムを作ってあげてください。

 出典: A - 来月は何月?

 ここまでくると言葉も出ませんね。もはや頭が悪いで済むレベルの話ではなくなってきています。まあんなことはともかく僕の提出をぺたり。

Submission #8931274 - AtCoder Beginner Contest 011

ABC013A - A

極めつけはこちら。

高橋君はとても英語が苦手で、アルファベットもまだ覚えきれていません。

そこで、高橋君のために、入力として与えられたアルファベットが A から数えて何番目のアルファベットかを求めるプログラムを作成してください。

幼稚園児か???????

 ......いや、ここまでならまだ幼稚園児で済むんですよ、ここまでなら。ここからが大問題なのです。いやここまででも十分問題だわ......。

ただし、高橋君は 5 より大きい数を知らないので、与えられるアルファベットは ABCDE のいずれかです。また、A 自身は A から数えて 1 番目であるとします(0 番目ではありません)。

 出典: A - A

 幼稚園児ですら10くらいまでは数えられるぞ。というかアルファベットより先に数字を覚えろ。てなわけでこのツッコミどころ満載な問題の提出コードはこちら。

Submission #8931516 - AtCoder Beginner Contest 013

おわり

いかがでしたか?(クソブログ特有の〆)

 あまり知られていない高橋くんの生態について理解してもらえたかと思います(?) もしこの記事で競プロに興味を持った方がおられましたら是非とも足を踏み入れてもらえたらなと思います(今年の4月に始めたばかりの僕が言うのもなんですが)。

ここまでお読みいただきありがとうございます。今回のAdvent Calendarにもう1つ記事を書けと脅されお願いされたのでまたそのときにでもお会いしましょう。では。

*1:AtCoder社の社長である高橋直大氏の名字から取ったと予想されている(yudegakiのブログより引用)

*2:魔法で小さくされピアノの上に乗せられる

*3:タイヤと木を組み合わせて鯛焼きを作る