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番ホールをクリアした皆さんだけにお伝えしましょう。
社名「キャディ」に込められたもう一つの意味とは…?
キャディをアルファベット表記すると CADDi になりますが、これは CAD Direct の略であったりもします。設計ツールである CAD からダイレクトに製作の発注ができること。これはキャディが目指す理想の一つであり、創業期にも 3D CAD データを使った自動見積の仮説検証を行っていたりしました。 また、そういった理想を目指すために現在も図面データの情報抽出に関する研究開発を進めていたりもします。 CAD Direct という社名の由来に込められた理想は、「物理とデジタルの橋渡し」が高度に実現された状態と言えるのではないでしょうか。残念ながら、ありとあらゆる部品を CAD から即座に発注できるような仕組みはまだ少し時間がかかりそうですが、そういったものを実現していくために必要な物理とデジタルの連携を、キャディでは少しずつ、けれど確実に進めています。製造業で物理とデジタルの橋渡しをするために
製造業を設計、調達、製造、販売といった形でジャンルを分けた場合、設計は 3D CAD や CAE 、製造はロボット化をはじめとするファクトリオートメーション、販売については機械学習や統計解析を使ったマーケティングの高度化など、様々な DX やイノベーションが行われてきたと思いますが、調達の分野においてはまだまだ改善の余地があると考えています。 製造業は物理的なものを扱う業種です。製造業の調達の分野こそ、設計情報という最初はデジタルデータとなっている情報を、実際に実物に変換するところまでを一気通貫で見れる、まさに物理とデジタルの橋渡しが必要な領域だと考えています。 キャディにおいても、調達領域への支援として特注金属加工部品の受発注を進める上で、以下のようなシステムを内製開発することで、物理とデジタルの橋渡しを進めています。 それぞれ詳しくはこちらの記事も是非ご確認ください。 それ以外にも、キャディでは関東関西に検査拠点兼物流拠点を設けていますが、そこではバーコードリーダーを使ってリアルタイムに部品の検査ステータス等を把握するなど、様々な技術を現場に導入して検証を繰り返しています。 将来的にも様々なテーマがあります。製品の在庫管理の高度化や、検査プロセスにおける寸法計測やキズ検知の自動化など、あらゆる受発注の工程にあたって圧倒的な品質や速度をお届けできるように挑み続けます。 私は、リアルのモノを扱っている事業会社のCTOとして、物理とデジタルの世界の橋渡しをすることを通じ、今までは想像もできなかった未来を実現していきたいと思っています。そのために人と技術が協力して事業を推進していきたいですね。 それでは、そろそろゴルフに戻りましょう。次の問題は少し難しいと思う人もいるかもしれません。2番ホール「シャフト」
次の問題は「シャフト」に関する問題です。シャフトとは金属の棒状の部品のことで、上記画像で私の手のひらに浮いているのもシャフトの一種ですね。 シャフトは、主に回転機構を持つ様々な機械に使われている部品で、ある程度は量産されている汎用品もありますが、キャディで請け負っている特注品のシャフトは、産業機械の動力部分にあたる場合もあり高い加工精度が求められることもあります。問題
2つのシャフトはジョイントを使って連結することができます。長さXのシャフトと長さYのシャフトを連結すると長さX+Yの連結シャフトになります。 強度の関係で3本以上のシャフトを連結することはできません。 シャフトがN本あります。i番目のシャフトの長さはA_iです。 K個のジョイントがあります。これらを全て使って、N本のシャフトの内いくつかを連結すると、連結シャフトと連結していないシャフトが合わせてN-K個できます。このN-K個の全ての組み合わせの中で、N-K個のうち最も長さが短いものが、他の組み合わせの場合よりも最も長くなる場合の長さを求めてください。制約
\\ 0 < N \le 10000 \\ \\ 0 \le 2K \le N \\ \\ 1 \le A_i \le 1000 (1 \le i \le N) \\ \\ K, N, A_i(1 \le i \le N) は整数\\
入力形式
N K A_1 A_2 ... A_N
入力例
20 10 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14
出力例
19
クリア基準
300文字 回答: 言語: ※paiza.ioの各言語のバージョンや制約について<ヒント> 2K=Nの場合はどうなりますか?この問題は、競技プログラミングやコードゴルフに慣れていない方だと少し苦労するかもしれません。
2番ホールクリアおめでとう! だが、残念だったな!
私は悪のEM(Engineering Manager)の平岩だ! 残念だったな、この記事は私が乗っ取った! 2番ホールをクリアしたみんなには、EMの平岩に延々とキャディへの入社を口説かれる、カジュアル面談と言いながらうんざりするほど採用色たっぷりのカジュアル面談をする権利をやろう! 平岩がなぜキャディに入社したかにはじまり、日々のキャディでの業務、キャディ本社(蔵前)まわりのランチ事情、代表加藤の黒歴史、平岩が個人的に最近ハマっていることまで、聞いてもいないどうでもいいことを延々と数十分聞かせてやるのだ! どうだ嬉しいか? 嬉しいだろう! ガハハハハハハハハハハハハ……<ナレーター> なんてことだ!! この記事は面接の時は圧強めで怖いと噂(実話)の悪のEM平岩によって乗っ取られてしまった! 今こそ本当のキャディパワー(謎)を集め「モノづくり産業のポテンシャルを解放し」悪のEM平岩を打倒しなければ!!
3番ホール「CAD Direct」
ありがとうございます! 皆さんのキャディパワー(謎)により、モノづくり産業のポテンシャルが解放されかけていますが、まだ足りません。 そして、伝説の「CAD Direct」の封印が解かれようとしています!! ソフトウェアエンジニアの皆さん! 今こそ最後の問題を解いて「CAD Direct」の封印を解き、モノづくり産業のポテンシャルを解放するのです!問題
C,A,Dの3種類の文字から構成される長さNの文字列Sが与えられます。文字列Sに対して 以下の操作を可能な限り繰り返します。 操作:文字列Sから文字C,文字A,文字Dをちょうど1つずつ削除する。 1回操作をするたびにX点獲得できます。また、取り出したC,A,Dがこの順に連続していたらCAD DirectボーナスでさらにY点獲得できます。 獲得できる点数が最大になるよう操作を行ったときに、獲得できる点数を出力してください。制約
\\ 0 < N \leq 100 \\ \\ 0 \leq x, y \leq 1000 \\ \\ | S | = N \\ \\ S は'C', 'A', 'D'の3種類の文字のみから構成される\\
入力形式
N x y S
入力例
48 850 33 CDDDDDACCCCCDAAAAACACCADCADCADADCCADACADDCADCADD
出力例
13963
クリア基準
文字数制限なし、解けたらOK!(もはやコードゴルフじゃない) 回答: 言語: ※paiza.ioの各言語のバージョンや制約について<ヒント> ヒントはありません!
伝説の「CAD Direct」の封印が解かれた!
皆さんありがとうございます。皆さんのお力により「CAD Direct」の封印が解かれ、キャディの平和は守られました!エンジニア募集中!
キャディでは各種エンジニア絶賛募集中です! こちらのサイトで求人をご確認いただけます! @paiza転職へ謝辞
問題作成協力:Ken Ogura クリエイティブ作成協力:Minami Yamada powered by paiza.io実行中