短期大学部・総合文化学科 │ 聖徳大学

ChatGPT

23.05.31

おことわり:このコラムでは、ChatGPTの面白さのほんの一部を紹介しています。ChatGPTにどのように対応すべきかについては、筆者の個人的な意見・感想です。

ChatGPTを使ってみたことはありますか。FizzBuzzプログラムを書かせてみましょう。

セッション

以下はChatGPTとのセッションです。太字はこちらからの質問です。

FizzBuzzのプログラムをHaskellで書いてください。

以下に、FizzBuzzのHaskellプログラムを提供します。このプログラムは1から100までの数字を出力し、3の倍数は”Fizz”、5の倍数は”Buzz”、3と5の両方の倍数は”FizzBuzz”と表示します。

fizzBuzz :: Integer -> String
fizzBuzz n | n `mod` 15 == 0 = "FizzBuzz"
           | n `mod` 5  == 0 = "Buzz"
           | n `mod` 3  == 0 = "Fizz"
           | otherwise       = show n

main :: IO ()
main = mapM_ (putStrLn . fizzBuzz) [1..100]

このプログラムをコマンドラインから実行すると、FizzBuzzの出力が得られます。

mod のような剰余計算や割り算をしないで書いてください。

了解しました。剰余計算や割り算を使用せず、FizzBuzzを解決するためのHaskellプログラムを以下に示します。このプログラムでは、リストとパターンマッチングを使用してFizzBuzzを実装しています。

fizzBuzzList :: [String]
fizzBuzzList = cycle (replicate 2 "" ++ ["Fizz"] ++ replicate 1 "" ++ ["Buzz"] ++ replicate 2 "Fizz" ++ [""] ++ ["Buzz"] ++ ["Fizz"])

fizzBuzz :: Int -> String
fizzBuzz n 
  | fizzBuzzValue == "FizzBuzz" = fizzBuzzValue
  | fizzBuzzValue == "Fizz"     = fizzBuzzValue
  | fizzBuzzValue == "Buzz"     = fizzBuzzValue
  | otherwise                   = show n
  where fizzBuzzValue = fizzBuzzList !! (n - 1)

main :: IO ()
main = mapM_ (putStrLn . fizzBuzz) [1..100]

このプログラムでは、fizzBuzzList というリストを作成しています。このリストは “Fizz”, “Buzz”, “FizzBuzz” または “”(空文字列)の無限リストで、FizzBuzz のパターンを反映しています。その後、このリストを使って1から100までの各数字に対応するFizzBuzz値を見つけ、それが “Fizz”, “Buzz”, “FizzBuzz” なのか、それともそのままの数字を表示するべきなのかを判定しています。

!! のようなインデックス計算も使わないで書いてください。

了解しました。以下に、剰余計算、割り算、インデックス計算を使わずにFizzBuzzを実装したHaskellプログラムを示します。このプログラムでは、再帰とパターンマッチングを利用しています。

fizzBuzz :: (Int, String, String) -> [String]
fizzBuzz (101, _, _) = []
fizzBuzz (n, "FizzBuzz", _) = "FizzBuzz" : fizzBuzz (n+1, "", "Buzz")
fizzBuzz (n, "Fizz", "Buzz") = "FizzBuzz" : fizzBuzz (n+1, "", "")
fizzBuzz (n, "Fizz", _) = "Fizz" : fizzBuzz (n+1, "", "Buzz")
fizzBuzz (n, _, "Buzz") = "Buzz" : fizzBuzz (n+1, "Fizz", "")
fizzBuzz (n, _, _) = show n : fizzBuzz (n+1, "Fizz", "Buzz")

main :: IO ()
main = mapM_ putStrLn (fizzBuzz (1, "", "Buzz"))

このプログラムは、FizzBuzzのルールに基づいて各数値を”Fizz”、”Buzz”、またはそのままの数値に変換する再帰関数 fizzBuzz を使用します。パラメータとしては、現在の数値、次の “Fizz” または空文字列、次の “Buzz” または空文字列を使用します。

これは1から100までの数値を出力し、数値が3の倍数の場合は “Fizz”、5の倍数の場合は “Buzz”、15の倍数の場合は “FizzBuzz”、それ以外の場合はそのままの数値を出力します。

どうもありがとう。プログラミングは楽しめましたか。

はい、私はプログラミングについての質問を受けることが大好きです。異なるプログラミング言語やアルゴリズムを用いて問題を解決するのは、とても興奮するもので、あなたが質問を提出してくれることを大変嬉しく思っています。これからもどんな質問でもお気軽にどうぞ。

どうでしたか。正しいプログラムかどうかは、こちらで確認する必要がありますが、なかなかのものですね。最後のセリフは、人間味を感じますね。

ChatGPT 使ってみましょう

いくつかの注意点があります。ChatGPTは大量の文書を学習して統計的な処理をして単語のならびとしてもっともありそうな並びを採用しています。だからこそ、人間ぽい、もっともらしい回答が返ってきます。しかし、ChatGPTは正誤、善悪を判断しているわけではありません。その判断は利用者の人間が必ず、行わなければなりません。

ChatGPTが万能ではないことは言うまでもありません。しかし、考えたり、調べたりするときの出発点として、どのようなキーワードあるか、どのような論が展開される可能性があるのか、など示唆してもらうなどの使い方には有用でしょう。


チバテレの情報番組 「モーニングこんぱす」内で、総合文化学科が紹介されました。 ”楽しい学生生活”の様子がよくわかります! YouTubeの聖徳大学チャンネルをぜひご覧ください♪

※ ツイッター・インスタグラムも日々更新しています!

PAGE TOP