コードゴルフのキャディをやってみた

CTO自らコードゴルフのキャディをやってみた

こんにちは。キャディCTOの小橋です。キャディは特注部品の調達支援などを行っている製造業スタートアップです。8月に約80億円のシリーズBの資金調達を受けて今後のキャディについての記事を書かせていただきました。   そんなキャディですが社名の「キャディ」にはどんな意味が込められているか、皆さんご存知ですか? 実は、社名の「キャディ」という名前は、製造業に向き合う皆さまにとっての「プロゴルフにおけるキャディ的な存在」となり、メーカー様や加工会社様の事業に伴走し、ともに改善や成長を続けるという意味が込められています。(でも、他の意味もあります)   そして、ソフトウェアエンジニアにとってのゴルフといえば、そう、コードゴルフですね! ということで、ソフトウェアエンジニアの皆さんにとってのキャディとなるべく、私自らコードゴルフのキャディをやってみることにしました。  

コードゴルフとは…?

コードゴルフはコンピュータプログラミング・コンテストの一種。参加者は与えられたアルゴリズムを、可能な限りもっとも短いソースコードで記述することを競う。バイナリサイズではなく、ソースコードの文字数がスコアとなる。「Perl golf」など、トーナメントで使用されるプログラミング言語の名前がつけられることもある。ショートコーディング、コードパズル等とも呼ばれる。
WikiPediaより抜粋)   競技プログラミングコードゴルフのご経験がない方もいらっしゃると思います。でも、大丈夫です! 私がキャディとして、皆さんのコードゴルフに伴走します!   ゴルファー同士がオンラインでコードの文字数を競い合う形ではありませんが、クリア基準となる文字数を設けることで、一人用コードゴルフ的なことができるものをこの記事には組み込んであります。(そういう意味で本来のコードゴルフとはちょっと異なることをご容赦ください)   なお、本記事ではpaiza.io APIを利用してコードを実行しています。   コードゴルフの解き方は、文字数を競うという点を除けば競技プログラミングとだいたい同じです。標準入力にテストケースが与えられるので、標準出力に処理結果を出力するコードを実装します。   例えば、python3での入出力を行うだけのコードはこんな感じになります。
hoge = input()
answer = hoge # なにか処理
print(answer)
もし、こういったコードの実装に慣れていなければ「競技プログラミング 標準入出力 使いたい言語名」などで検索すると良いでしょう。   ただ、コードゴルフでは文字数をできるだけ少なくする必要がありますから、可読性は無視して、使う変数の数を減らしたり、シンタックスシュガーをフル活用したりなど、短い書き方を追求していくことになります。   最初の問題はクリア基準も緩めにしてありますから心配ありません。(後半は結構難しいかも) それでは、各ホールを回っていきましょう!

1番ホール「板金」

まずは簡単な問題からコードゴルフをはじめましょう。「板金」に関する問題です。     「板金」とは薄い金属の板のことで、板金加工は箱型やプレート型の部品を作るのに使われるごく一般的な金属加工です。上記画像で私が持っているのはキャディで製作したRustマークの板金加工品です(笑)。キャディは今でこそ切削や製罐など様々な金属加工品を対応していますが、2017年の創業当初は板金加工だけでした。そういう意味でキャディの原点とも言えますね。

問題

縦Hセンチ横Wセンチの長方形の形をした板金があります。この板金から正方形の板金を1つ切り出します。切り出される板金の面積が最大になるように切り出すとき、その面積は何平方センチメートルになるか求めて、それを出力してください。
制約
\\ 0 \le H, W \le 10^5 \\
入力形式
H W
入力例
10 5
出力例
25
クリア基準
180文字   回答 言語: ※paiza.ioの各言語のバージョンや制約について
<ヒント> 長方形ないし正方形から正方形を切り出すには、短い方の辺に合わせて切り出せば良いですね。
  ところで、「キャディ」という社名に込めた意味は、冒頭で少し触れた通り、製造業に向き合う皆さまにとっての「プロゴルフにおけるキャディ的な存在」という意味があることはお伝えした通りです。 しかし、それだけではなく、実はもう一つの意味があったりします。   「キャディ」に込めたもう一つの意味は…1番ホールをクリアした皆さんだけにお伝えしましょう。  

エンジニア募集中!

キャディでは各種エンジニア絶賛募集中です! こちらのサイトで求人をご確認いただけます! @paiza転職へ

謝辞

問題作成協力:Ken Ogura クリエイティブ作成協力:Minami Yamada powered by paiza.io