お帰りなさい｡
最後のパートでは､ 円周率を計算するシンプルなPythonプログラムを効率的なCプラスアルファのコードに変換するという課題にGPTの4人とクローを与えたが､
どちらのフロンティアモデルもうまくいった｡
GPT4ではもう少しヒントを出しただけだったが､ 次はもっと難しい問題に移る｡
このコードは､ Python hardと呼ばれるPythonのコードで､ もうちょっとだけ仕事がある｡
最大サブアレイ和と呼ばれるものを計算するんだ｡
そして､ これがその結果だ｡
つまり､ ランダムな､ あるいは擬似的にランダムな正負の数の配列､
リストが与えられたとする｡
この質問で問われているのは､ 大きな配列の中にある連続した数字のサブ配列の集合をすべて取り出して足し合わせれば､
その部分の和が得られるということだ｡
可能なサブアレイの最大の合計は？
配列の任意の始点と終点を選び､ 最大の部分配列が得られるように選び､
その最大の数､ 最大の部分配列の数を返す｡
そしてもちろん､ ここにはマイナスの数字があることを念頭に置かなければならない｡
だから､ 明白な答えがあるわけではない｡
そして､ このコードが実際に機能する方法は､ 単純にすべてを試してみることだ｡
ループの中のループで､ 開始点をループし､ 終了点をループし､ 現在の合計と最大合計を比較してその合計を返す｡
つまり､ この機能はそういうことなのだ｡
それがこのコードの肝だ｡
ここにはもう2つのことがある｡
Pythonの乱数メソッドやrandomライブラリのようなものは使いたくない｡
その代わりに､ ここではごく一般的な､ ごく単純な擬似乱数発生器を実装した｡
これは線形合同発生器として知られている｡
公式を見たければググればいい｡
それが私のしたことだ｡
これは､ シードに基づいて予測可能な乱数のストリームを生成する簡単な方法である｡
このジェネレーターが乱数を生成する｡
フロンティア・モデルにとって､ それをC＋＋＋のコードに変換する方法を見つけるのは難しいだろうから｡
アプローチしなければならないだろう｡
うーん､ 簡単には変換できないけど､ 円周率関数のようなものは与えられない｡
ええと､ これはループの中でループを行うものです｡
そして､ これを20回繰り返す｡
そして......別のシードで行った20回の合計を取る｡
ここでいくつかのセッティングを行うことで､ すべての走行で一貫した走りができるようになる｡
ええと､ それからこれを20回やって時間を計っているんだけど､
これも実行しながら話すべきだったかもしれない｡
だから､ これから1分間､ どうすれば君に興味を持って待ってもらえるか考えなければならない｡
ええと､ 繰り返しになるけど､ exacは､ 誰かが何かにexacを実行するように言うたびに､
眉をひそめたくなるようなものだ｡
でも､ もちろん､ ここで私のコードを注意深く見て､ 何も悪賢いことは起きていないし､
数学の束しかないことを自分で納得することができる｡
それに､ 僕にはイギリス訛りがあるんだ｡
それは私が信じられるということに違いない｡
ええと｡
分かった｡
とにかく､ おしゃべりはここまでだ｡
ああ､ 役目は終わったよ｡
たった27秒だったから､ あんなにジャブジャブ喋る必要はなかった｡
そして､ 全20回を通したサブアレイの最大合計は､ 10,980というかなり大きな数字になった｡
もちろん､ プラスもマイナスもあり､ そのバランスが取れているからだ｡
分かった｡
だから今､ GPTにそのバージョンを作ってもらう時なんだ｡
今､ そうしよう｡
ここでGPTバージョンが登場したので､ それをコンパイルしてみよう｡
そして､ 暗黙の変換という警告が出た｡
そしてそれを実行したところ､ 間違った答えが返ってきた｡
休憩の後､ クロードがどのようなプレーを見せるか見てみよう｡