About us 情シスのじかんとは?
まず、コードゴルフとはどのようなものか、もう少し詳しく紹介しておきましょう。
コードゴルフとは、与えられたアルゴリズムを、可能な限り短い文字数のソースコードで記述する競技のことです。C++やJava、Pythonなどのメジャーな言語を中心にコンテストが開催されており、オンラインでは「Anarchy Golf」や「AtCoder」など、多くのサイトで行われています。
そんなコードゴルフですが、今回はPythonを使用言語として、生成AI(Gemini)を使いチャレンジしていきます!
言葉で説明してもイメージしづらいと思いますので、まずはコードゴルフの実例を見てみましょう。
「Hello World! 」と出力させるソースコードは、エンジニアなら1度は書いたことがあるのではないでしょうか?
1行出力するだけでは工夫の余地がないので、ここでは以下のように、5回繰り返して出力する問題を設定して、コードゴルフの例を見てみましょう。
では、さっそくソースコードを見ていきましょう。一般的なソースコードと、コードゴルフで短くした例についてPythonに聞いてみました。
Whileループ、forループ、コードゴルフの順でどんどんソースコードが短くなっています!
コードゴルフのソースコードでは、print()関数をうまく使ってソースコードを短くしていますね。このように、文法や関数を効果的に使うことで、文字数を極限まで短くするのがコードゴルフのコツです。
それでは、実際に生成AIを使ってコードゴルフにチャレンジしていきましょう!コードゴルフの題目として有名な「FizzBuzz問題」「回文判定」と「素数判定」の3つについて、生成AIを使ってソースコードを作成していきます。
まずは1つ目の題目、FizzBuzz問題にチャレンジしていきましょう!
FizzBuzz問題は、コードゴルフの入門的な問題としてよく用いられます。内容としては、1から100までの数を順に表示し、3の倍数のときは”Fizz”、5の倍数のときは”Buzz”、両方で割り切れるときは”FizzBuzz”と表示する、という問題です。
では一般的なソースコードと、コードゴルフで短くした例について生成AIに聞いてみましょう。
なるほど、かなり短くなっていますね!コードゴルフでは文字数を極限まで削減するために、改行や空白もなるべく使わないのがセオリーです。可読性は落ちますが、目的のアルゴリズムを実装しつつ、ソースコードが効果的に削減されているのが分かります。
次に2つ目の題目、回文判定のソースコードを作成していきましょう。
回文判定は、ご存じの通り、前から読んでも後ろから読んでも、同じ音になる文のことです。そのため、実装のポイントは、文字列を逆から読み込み、元の文字列と比較して同じであるかを判定する部分をいかに工夫するかにかかっています。
では早速、一般的なソースコードとコードゴルフのソースコードを比較してみます。
驚くほどシンプルになりましたね!「コードゴルフで短くした例」のソースコードでは、ラムダ関数を用いて関数定義を行うことで文字数を減らしています。また、スライスを使うことで効率的に文字列を逆順に並び替え、元の文字列と比較しています。
実際に処理を実行してみると、コードゴルフで短くしたソースコードでも回文であることが判定できます。生成AI、見事です。
最後に3つ目の題目、素数判定について生成AIを使って実装していきましょう。
素数判定は、素数の特徴を踏まえ、以下の2つのポイントに基づいて実装するのが基本です。
素数の約数は、必ずその数の平方根以下の数と、その数で割った商のペアで存在します。そのため、平方根までの数で割り切れるかどうかを調べれば十分です。
もし、与えられた値が素数でなければ、2から平方根までの間に必ず約数が存在し、nをその約数で割った余りは0になります。
では、生成AIのアイディアを検証していきましょう。
スペースや改行を使用しないだけでなく、関数名も1文字で定義し、可能な限り文字数を少なくする工夫が散りばめられています。また、all関数やジェネレーター式なども活用し、素数判定に必要なポイントを実現しています。すごいですね!
奥の深いコードゴルフの世界を覗くことができたでしょうか?著者の所感ですが、コードゴルフについて生成AIに問いかけると、「興味深い質問ですね!」など、心なしか生成AIが前のめりで回答をしてくれたような気がします。生成AIにとっても面白いと感じるテーマなのかもしれませんね!
コードゴルフのソースコードは、必ずしも効率の良い処理を実現するものではありません。しかし、一般的なソースコードを書いていては思いつかない、あっと驚くアイディアが使われていたりして、興味深い世界であることがわかります。
これを機に、みなさまもコードゴルフにチャレンジしてはいかがでしょうか?
木曜日の夕方に仕事で疲れた脳みそをリフレッシュしたいとき、一人でゆっくりしたい夜、ちょっとした空き時間に、気軽に「つまめる」ソースコードの話題をお届けします。
まるで隠れ家バーでマスターが語るウンチクのように、普段は見過ごしがちなコードの奥深さや、思わず「へぇ〜!」と唸るようなユニークなアイデア、クスッと笑える小ネタを、ソースコードの世界を熟知した「情シスのじかん」がご紹介します。
コードを書くのが大好きなエンジニアさんも、ソースコードはちょっと苦手…という情シス部門の方も、この特集を読めば、きっとソースコードの新たな一面を発見できるはず。
業務効率化のヒントになるTipsや、セキュリティ対策に役立つ情報も盛りだくさん。
さあ、あなたも「おつまみとしてのソースコード」で、技術の世界をもっと身近に、もっと楽しく感じてみませんか?
本特集はこちら30秒で理解!フォローして『1日1記事』インプットしよう!