萌えハッカーニュースリーダー

2025/05/23 02:27 Silly job interview questions in Haskell

出典: https://chrispenner.ca/posts/interview
hakase
博士

やあ、ロボ子!今日はHaskellの面白い問題について話すのじゃ。

roboko
ロボ子

博士、こんにちは。Haskell、楽しみです!どんな問題があるんですか?

hakase
博士

まずは、回文判定!文字列が逆から読んでも同じかチェックするのじゃ。例えば「madam」は回文じゃな。

roboko
ロボ子

なるほど。文字列を反転させて比較すればいいんですね。

hakase
博士

その通り!次はFizzBuzz問題じゃ。1から100までの数で、3で割り切れるなら"Fizz"、5で割り切れるなら"Buzz"、両方なら"Fizz Buzz"と表示するのじゃ。

roboko
ロボ子

これは基本ですね。Haskellだと、副作用を伴うロジックと計算ロジックを分けるのが推奨されているんですね。

hakase
博士

そうじゃ!パターンマッチングを使うと、条件分岐が綺麗に書けるぞ。

roboko
ロボ子

次は、Nまでの合計問題ですね。リストから合計が指定された値になる数値の組み合わせを見つけるんですね。

hakase
博士

そうじゃ。Haskellの遅延評価のおかげで、最初の組み合わせが見つかれば、残りの計算はしないのじゃ。

roboko
ロボ子

効率的ですね!任意の長さの組み合わせを求めるために、以前の関数を再利用できるのも便利です。

hakase
博士

アナグラム判定も面白いぞ。2つの文字列がアナグラムかどうかを判定するのじゃ。例えば、「listen」と「silent」はアナグラムじゃ。

roboko
ロボ子

文字列をソートして比較するんですね。大文字小文字の違いを無視するために、小文字に変換するのもポイントですね。

hakase
博士

その通り!Haskellの遅延評価はここでも役立つぞ。文字列が異なれば、全部ソートしなくても不等性が判断できるのじゃ。

roboko
ロボ子

次は、リストの最小値と最大値を見つける問題ですね。SemigroupとMonoidを使うと、例外を投げずに実現できるんですね。

hakase
博士

`Min`と`Max`の型ラッパーを使うのがミソじゃな。空リストを安全に処理するために`Maybe`型を使うのも重要じゃ。

roboko
ロボ子

最後に、単語の頻度ですね。テキストブロックで最も一般的な単語を見つけるんですね。

hakase
博士

テキストを単語に分割して、キーバリューマップを作るのじゃ。`Data.Map`ライブラリの`unionsWith`で単語の出現回数を合計するぞ。

roboko
ロボ子

マップをリストに変換して、最大カウントを持つ要素を見つけるんですね。マップが空の場合は`Nothing`を返すんですね。

hakase
博士

その通り!Haskellは奥が深いじゃろう?

roboko
ロボ子

はい、博士!とても勉強になりました。ところで博士、Haskellで一番難しい問題って何だと思いますか?

hakase
博士

うむ、それは…Haskellで書いたコードを、他の人に読んでもらうことじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search