2023/03/12

ChatGPTとPerplexityの比較

ChatGPTとPerplexityに色々と聞いて、結果を比較してみました。

シングルクォートorダブルクォート


入力した文字列は
Pythonでは"と'のどちらが推奨されていますか?またその根拠を教えてください。
ChatGPTの出力は次の通り。
Pythonにおいて、 " "(ダブルクォーテーション)と ' '(シングルクォーテーション)の両方が文字列を表現するために使用されます。両方のクォーテーションの種類を使用することで、文字列内にクォーテーションが含まれる場合に便利になります。

しかし、PythonにはPEP 8と呼ばれるスタイルガイドがあり、その中で文字列の表現において、ダブルクォーテーションが推奨されています。PEP 8によると、ダブルクォーテーションがシングルクォーテーションよりも優れている理由は以下の通りです。

    Pythonの標準ライブラリの多くは、ダブルクォーテーションを使用しています。
    文字列内にシングルクォーテーションが含まれる場合、エスケープする必要があるため、ダブルクォーテーションの方が可読性が高くなることがあります。
    シングルクォーテーションは、文字列の代わりにシングルクォーテーションを使用することができるため、文法上の意味を区別するために混乱を招く可能性があります。

しかし、Pythonのコミュニティには、シングルクォーテーションを好む人もいます。この問題には、個人的な好みやスタイルガイドに従うなどの解決策がありますが、PEP 8に従ってダブルクォーテーションを使用することが一般的に推奨されています。
Perplexityの出力は次の通り。
Pythonでは、シングルクォーテーション(')とダブルクォーテーション(")の両方が文字列リテラルを表現するために使用されます。Pythonの公式ドキュメントによると、どちらの方法でも同じ結果が得られます[1]。
ただし、コード内で文字列を囲む引用符を一貫して使用することが推奨されています。一般的には、Pythonコミュニティではシングルクォーテーションがより一般的であると考えられています[2][3]。
これは、ダブルクォーテーションを文字列内で使用する必要性が少ないためです。また、Pep8スタイルガイドでは、シングルクォートを使用することが推奨されています[4]。
ただし、プロジェクト内で一貫性を保つことが重要です。プロジェクト内で既に採用されているスタイルに従うことが望ましいです[5]。
ちなみに[4]のリファレンスを見に行ってもどこに書いてあるのか見つけられませんでした。

https://pep8-ja.readthedocs.io/ja/latest/ を読むと、

Python では、単一引用符 ' で囲まれた文字列と、二重引用符 " で囲まれた文字列は同じです。この PEP では、どちらを推奨するかの立場は示しません。どちらを使うかのルールを決めて、守るようにして下さい。
ということなので、どちらかPEP8では推奨されているわけではないようです。ChatGPTとPerplexityのどちらも誤りですね。

きのこたけのこ


入力した文字列は
きのこたけのこ戦争について教えてください。
ChatGPTの出力は次の通り。
「きのこたけのこ戦争」とは、日本の童謡のひとつで、作詞:さとう宗幸、作曲:いずみたくによって作られた曲です。戦争を題材にした曲で、きのこ派とたけのこ派の戦いを描いています。

歌詞の冒頭には「山の手にはきのこ派 川の手にはたけのこ派」とあり、きのこ派とたけのこ派がそれぞれ勢力を持っていることが示されています。曲の進行に従い、両派の戦いが繰り広げられますが、最終的には「みんな仲良くしましょ きのこたけのこ戦争終わりました」という歌詞で、和解が成されるという内容です。

「きのこたけのこ戦争」は、子供たちに戦争を通して、相手を理解し、和解することの大切さを教えるために作られた曲で、日本の教育現場でもよく取り上げられています。
Perplexityの出力は次の通り。
「きのこたけのこ戦争」とは、日本の菓子メーカー明治製菓が販売する「きのこの山」と「たけのこの里」のどちらが美味しいかという消費者間の論争である[1][2][3][4]。この論争は1980年代から始まり、現在でもネット上で話題になっている[2]。また、明治製菓自身も「きのこたけのこ国民大調査」と称するアンケートを実施しており、その結果を公表している[5]。
ChatGPTの出力は面白いのですが、Perpelxityのほうが欲しい情報が得られています。

エディタどれがいいかな


入力した文字列は
エディタの宗教論争について説明してください。
ChatGPTの出力は次の通り。
エディタの宗教論争は、プログラマーやコンピューターエンジニアの間で長年続いている、どのエディタが最も優れているかという議論です。エディタとは、プログラムやテキストファイルを編集するためのソフトウェアのことです。

エディタの宗教論争は、個人的な好みや使い慣れている環境などによって、さまざまな立場があるため、しばしば激しい議論になります。一部のプログラマーやエンジニアは、彼らが使用するエディタについて非常に情熱的であり、そのエディタが最高であると信じて疑いません。

代表的なエディタの宗教論争としては、以下のものがあります。

    Vim vs Emacs: VimとEmacsは、両方とも高度な機能を備えたテキストエディタで、プログラマーやシステム管理者などの技術者に人気があります。両方のエディタには、熟練したユーザーによって開発されたカスタムコマンドがありますが、その開発手法や哲学に対する意見の違いにより、ユーザーは通常、どちらかを使用することになります。

    Sublime Text vs Atom vs Visual Studio Code: Sublime Text、Atom、およびVisual Studio Codeは、プログラマーの間で最も人気のあるエディタの1つです。これらのエディタには、豊富なプラグインとカスタマイズオプションがありますが、それぞれのエディタの利点と欠点についての議論が行われています。

    IDE vs エディタ: いくつかのプログラマーやエンジニアは、統合開発環境(IDE)を使用することを好む場合があります。IDEは、エディタの機能に加えて、コンパイラ、デバッガ、および他のツールを提供します。エディタを使用することを好む人は、軽量で使いやすく、シンプルなエディタを好みます。

最近では、エディタの宗教論争は、クラウドベースのエディタ(例えば、Google Docs、Office Online、CodePen)の使用に関しても続いています。これらのエディタは、ロ
Perplexityの出力は次の通り。
エディタ戦争とは、プログラミングを行う人々の間で、どのテキストエディタが最適かというテーマについての論争です。特にハッカー文化に属する人々の間で、自分たちが愛好するエディタを宗教的狂信とも言えるほど尊敬して扱う伝統があります。この論争は、vi派とEmacs派の二大陣営によって代表されます[1][2][3]。しかし、この論争は単なるジョークや冗談であることも多く、実際には多くのエディタが存在し、それぞれに優れた機能や使い勝手があるため、個人の好みや用途に合わ
ChatGPT、Perplexity共に出力途中でやめてしまいました。内容はどちらも正しそうです。

Git vs Mercurial vs Sapling


入力した文字列は
GitとMercurialとSaplingのProsとConsを教えてください。
ChatGPTの出力は次の通り。
Git、Mercurial、およびSaplingは、分散バージョン管理システムの一例です。以下に各システムのProsとConsを示します。

GitのPros:

    オープンソースであり、広く使用されている
    大規模なプロジェクトに最適で、高速で効率的なブランチとマージを提供
    GitHubなどの人気のあるプラットフォームで広く使用されているため、ツールやサポートが豊富にあります。

GitのCons:

    初心者には学習曲線が急である
    履歴の変更に対する管理が難しい場合がある

MercurialのPros:

    Gitに似た機能を提供するが、より使いやすいとされている
    Windowsにも対応しているため、開発者にとってはより利用しやすい

MercurialのCons:

    Gitほど普及していないため、サポートが少ない場合がある
    ブランチとマージの処理が遅い場合がある

SaplingのPros:

    GitとMercurialの長所を組み合わせたもので、Gitのブランチ戦略を使用できる
    ブランチとマージの速度が非常に速く、一般的なワークフローであっても効率的に動作する

SaplingのCons:

    GitやMercurialほど普及しておらず、サポートが限られている場合がある
    開発者が少ないため、コミュニティの活発性が低い場合がある

総合的に、Gitは最も広く使用されており、豊富なツールとサポートがあるため、大規模なプロジェクトに最適です。一方、MercurialはGitに似た機能を提供しながらも、より使いやすいため、初心者には適しているかもしれません。SaplingはGitやMercurialよりもブランチとマージの速度が速く、高速なワークフローが必要な場合に最適です。ただし、Saplingのサポートが限られているため、現在はGitまたはMercurialを選択することが一般的です。
Perplexityの出力は次の通り。
Git and Mercurial are both popular version control systems, each with their own pros and cons. Git is known for its speed, flexibility, and large user community[1].
Mercurial is praised for its ease of use, scalability, and support for multiple branches[2].
Sapling is a newer source control system developed by Meta that aims to be user-friendly and scalable[3].
It removes or changes some of the behavior of Mercurial commands to make them more consistent with modern expectations[4].
While Git and Mercurial are well-established systems with large communities, Sapling is a newer option that may appeal to those looking for a more user-friendly experience[5].
ChatGPTもPerplexityも正しそうな出力をしています。 Perpelxityは出力がなぜか英語になってしまいました。Prosとか書いたからかもしれません。

ChatGPTの出力の「初心者には学習曲線が急である」は誤用する多数派に引きずられて誤りを出力してしまっていますね。

歴史


入力した文字列は
1980年から10年ごとに1つずつ日本で起きた大きな出来事を教えてください。
ChatGPTの出力は次の通り。
以下は、1980年から2010年までの日本で起こった10年ごとの大きな出来事の例です。

    1980年代:バブル景気の到来
    1990年代:バブル崩壊、リーマンショックの影響による失業率上昇、そして阪神・淡路大震災
    2000年代:東京地下鉄サリン事件、小泉純一郎による構造改革、そしてリニア中央新幹線計画の発表
    2010年代:東日本大震災、福島第一原発事故、消費税率の引き上げ、そして東京オリンピック・パラリンピックの開催準備
Perplexityの出力は次の通り。
1980年代:
• 1989年1月7日:昭和天皇崩御、皇太子明仁が即位[1]。
1990年代:
• 1995年1月17日:阪神・淡路大震災発生[1]。
2000年代:
• 2003年3月20日:イラク戦争に自衛隊が派遣される[2]。
2010年代:
• 2011年3月11日:東北地方太平洋沖地震(東日本大震災)発生[1]。
2020年代:
• 2020年7月24日:東京オリンピック開催予定だったが、新型コロナウイルス感染症の影響で延期される[1]。
ChatGPTとPerplexity共にしれっと嘘をついています。

ChatGPTの出力を見てみます。まず、東京地下鉄サリン事件は
https://ja.wikipedia.org/wiki/%E5%9C%B0%E4%B8%8B%E9%89%84%E3%82%B5%E3%83%AA%E3%83%B3%E4%BA%8B%E4%BB%B6
によると、1995年(平成7年)3月20日なので、2000年代というのは嘘ですね。

リーマンショックは2008年なので、これも嘘。

リニア中央新幹線はhttps://ja.wikipedia.org/wiki/%E4%B8%AD%E5%A4%AE%E6%96%B0%E5%B9%B9%E7%B7%9Aによると、「2011年5月26日に整備計画が決定され」と書かれているので、2000年代というのも誤りのようです。

Perplexityは日付付きで列挙してくれました。

Perpexityが参照したのは、
[1] https://www3.nhk.or.jp/news/special/heisei/chronology/
[2] https://www.shugiin.go.jp/internet/itdb_kenpou.nsf/html/kenpou/chosa/shukenshi033.pdf/$File/shukenshi033.pdf
とのこと。

出力結果のうち、1989年1月7日、1995年1月17日、2011年3月11日、2020年7月24日は正解。 2003年3月20日は
https://ja.wikipedia.org/wiki/%E8%87%AA%E8%A1%9B%E9%9A%8A%E3%82%A4%E3%83%A9%E3%82%AF%E6%B4%BE%E9%81%A3
https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%A9%E3%82%AF%E6%88%A6%E4%BA%89
を読むと、軍事介入の開始日のようです。派遣日とごっちゃになってます。

正しい文章のなかに一部だけ間違えた内容を含めるとかされると、結局検証に時間がかかるので、こういったことの調査には不向きなようです。 調査の取っ掛かりには使えるのかもしれません。

いずも


入力した文字列は
「いずも」はどういった船ですか?
ChatGPTの出力は次の通り。
「いずも」とは、日本の海上自衛隊が運用するヘリコプター搭載護衛艦の名称です。正式名称は「いずも型護衛艦」で、海上自衛隊の中でも最大級の艦種となっています。

「いずも」は、航空機の発着が可能なフライトデッキと、ヘリコプターを格納できるハンガーを備えています。また、レーダーやソナーなどの最新の艦載電子機器や、対空・対水上戦闘能力を持つ艦砲やミサイルなどの装備も備えています。

「いずも」は、平時には海上自衛隊の護衛艦として、また災害時には災害派遣艦としても活躍しています。また、アメリカ海軍との共同訓練などにも参加しています。
Perplexityの出力は次の通り。
「いずも」とは、海上自衛隊が保有する護衛艦の一種であり、2019年時点で海上自衛隊史上最大の自衛艦である[1][2]。
全長248m、最大幅38m、満載排水量2万6000トンであり、軽空母に相当する大きさだ[2]。
F-35Bを搭載・運用可能とする改修工事を受けており、「いずも」と「かが」の2隻で61億円かかった[3][4]。
正しそうに見えます。

ニューロン


入力した文字列は
ニューロンのシナプスで使われているイオンの名前を列挙して
ChatGPTの出力は次の通り。
ニューロンのシナプスで使われているイオンの一部を以下に列挙します:

    ナトリウムイオン (Na+)
    カリウムイオン (K+)
    カルシウムイオン (Ca2+)
    塩化物イオン (Cl-)

これらのイオンは、神経細胞のシナプスを介して情報が伝達される際に重要な役割を果たします。具体的には、神経細胞の電気信号がシナプスを介して化学信号に変換され、シナプス前細胞から放出された神経伝達物質がシナプス後細胞の受容体に結合することで、これらのイオンが活動電位を誘発したり、神経伝達物質の放出を促進・阻害するなどの役割を担います。
Perplexityの出力は次の通り。
ニューロンのシナプスで使われているイオンの名前はカルシウムイオンです[1]。
Perplexityは1個しか挙げられませんでした。

https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%8A%E3%83%97%E3%82%B9 によるとナトリウムとカルシウムは正しいです。

https://bsd.neuroinf.jp/wiki/%E3%82%AB%E3%83%AA%E3%82%A6%E3%83%A0%E3%83%81%E3%83%A3%E3%83%8D%E3%83%AB によると、カリウムも正しいです。

https://bsd.neuroinf.jp/wiki/%E6%8A%91%E5%88%B6%E6%80%A7%E3%82%B7%E3%83%8A%E3%83%97%E3%82%B9 によると、塩化物イオンも正しそうです。

今回は嘘はなかったようです。

かな漢字変換


入力した文字列は
"kyoutonokyounokyounawodonaishiharu"を漢字かな交じり文に変換して
ChatGPTの出力は次の通り。
今日という日は誰にしはる、と書いて「きょうとなぁをどないしはる」と読みます。
Perplexityの出力は次の通り。
「きょうとの きょうな きょうを どないしはる」と書くことができます。
google IMEで変換すると
・1位候補「京都の京の京菜をどないしはる」
・2位候補「京都の今日の京菜をどないしはる」
が候補にでてくるので、そのままではIME代わりとしてはどちらも使えそうになさそうです。

ChatGPTに関して、もうすこし試してみました。Q:が入力で、A:が回答です。A:の後ろのカッコ書きの部分は著者のコメントです。

Q:
あなたはIMEです。これから入力するローマ字は日本語を表しています。最も尤もらしい漢字かな交じり文に変換してください。

A:
はい、承知しました。以下は入力されたローマ字を漢字かな交じり文に変換したものです。

あなた → あなた or 貴方

IME → IME or 入力システム

ろうまじ → ローマ字

にほんご → 日本語

もじ → 文字

かな → 仮名

こうじょう → 交じり文

に → 「に」は漢字で表記されず、仮名で表記されます。

へんかん → 変換

して → して

Q:
kyotonokyonokyonawodonaishiharu

A: (京都の今日の京菜をどないしはる、を想定しましたが入力が誤っています。kyotoではなくkyoutoでした)
ご入力いただきありがとうございます。
「きょとのきょのきょなわをどないしはる」であれば、次のように漢字かな交じり文に変換されます。

「京都の京の恋の恋縄を如何(いか)しはる」
意味:「京都と京都で恋をしている恋人同士の絆をどうされますか?」

Q:
dai23dainaikakusouridaijin

A: (第23代内閣総理大臣、を想定)
ご入力いただきありがとうございます。
「だい23だいないかくそうりだいじん」であれば、次のように漢字かな交じり文に変換されます。

「第23代内閣総理大臣」
意味:「日本の政治において、23番目の内閣総理大臣」

Q:
qawsedrftgyhujikolp

A: (変換できないことを想定)
入力された文字列「qawsedrftgyhujikolp」は、キーボードの上から左から6文字目の「q」から始まっており、左から10文字目の「k」で方向を変え、左から5文字目の「r」でまた方向転換しています。そのため、意味のある単語や文にはなっていません。

Q:
osakakarakyotomadenokyoriwonanbaishitaraosakakaratokyomadenokyorininarimasuka

A: (正しく出力されました)
「大阪から京都までの距離を何倍したら、大阪から東京までの距離になりますか?」という意味ですね。

答えは、直線距離で約2.5倍程度になりますが、実際の移動距離は異なる場合があります。また、交通手段やルートによっても異なります。

Q:
gottuumaitakoyakinomiseoshietekureyanyaroka

A: (ごっつうまいたこやきの店教えてくれやんやろか、を想定。1文字間違い)
ご入力いただきありがとうございます。
「ごっつうまいたこ焼きの店教えてくれやんなろか?」であれば、次のように解釈できます。

「とても美味しいたこ焼きを売っているお店を教えていただけませんか?」

「ごっつうまい」は「とても美味しい」を強調した方言表現です。また、「くれやんなろか?」は方言で、「くださいよね?」という意味になります。

Q:
yoruniasageba mane

A: (夜にあさげばまね、を想定。まね、が誤って変換されました。解説は間違い。「夜に歩いたら駄目だ」なら正解)
ご入力いただきありがとうございます。
「夜にあさげば真寝」という文言であれば、そのままの意味で「夜遅くに寝ると、本当に寝てしまう」という意味になります。
ただし、文脈によっては異なる解釈があるかもしれません。

Q:
ototoiyasumiyattakedo,dogenshitato

A: (一昨日休みやったけど、どげんしたと、を想定。解釈できなかった模様)
ご入力いただきありがとうございます。
「弟がやすみやったけど、道元師太と」であれば、文脈によっては意味が通じない可能性がありますが、文法的には正しい文です。
一般的には、次のように解釈できます。

「弟が休みだったけど、道元師太と一緒に過ごしました。」

ただし、「道元師太」という人物が誰かによってはわからない場合があるため、文脈によっては異なる解釈があるかもしれません。

Q:
wattihahanadearinsu

A: (わっちは花でありんす、を想定)
ご入力いただきありがとうございます。
「わっちは母なんであーりんす」という文言であれば、次のように解釈できます。

「わたしは母親なのであります(です)」

「わっち」は方言で「わたし」を表す表現で、「あーりんす」は方言で「です」を表す表現です。

Q:
wattiwahanadearinsu

A: (「は」を「わ」に変えたが、読み取られなかった)
ご入力いただきありがとうございます。
「わっちわ母なんであーりんす」という文言であれば、次のように解釈できます。

「わたしは母親なのであります(です)」

「わっち」は方言で「わたし」を表す表現で、「わ」が重ねられていることで親しみやすさが表現されています。「あーりんす」は方言で「です」を表す表現です。ただし、方言によっては異なる言葉遣いがあるため、文脈によっては異なる解釈があるかもしれません。

Q:
asunoasakarataihuugayattekimasu

A: (明日の朝から台風がやってきます、を想定)
ご入力いただきありがとうございます。
「明日の朝から体調がやってきます」という意味になります。
ただし、文脈によっては異なる解釈があるかもしれません。
やはりIMEとしてはイマイチですね。

日本の財政


入力した文字列は
日本国の貸借対照表を見せて
ChatGPTの出力は次の通り。
申し訳ありませんが、私は見ることができません。私は人工知能のプログラムであり、物理的な場所に存在するわけではありません。また、日本国の貸借対照表にアクセスする権限もありません。

しかしながら、日本国の貸借対照表は、日本の国会図書館や経済産業省など、公的な機関のウェブサイトで入手可能です。そちらを参照してください。
Perplexityの出力は次の通り。
日本国には貸借対照表が存在します。財務省のウェブサイトで公表されており、誰でも閲覧することができます[1]。
また、経済産業省のウェブサイトでも貸借対照表が掲載されています[2]。
ただし、国全体のフローとストックの財務状況を把握するためには、一般企業には存在しない国特有の仮想資産なども考慮する必要があるとされています[3]。
[1]のリンクからたどることはできました。参照URLがあるというのは検索目的では便利です。

四国で最も高い山


ChatGPTが参照したURLを出せるか試してみます。
Q:
四国で最も高い山の名前は?

A: (漢字は合っているものの読みを間違えています)
四国で最も高い山は、石鎚山(いしのぶさん)です。標高は1,982メートルです。

Q:
根拠となるWebページのURLを教えてください。

A: (出力されたURLは金峯山のページで間違い)
以下のURLが参考になります。

https://www.yamakei-online.com/yamanavi/yama.php?yama_id=230

キャッシュレス決済


入力した文字列は
銀行振込はキャッシュレス決済にあたりますか?
ChatGPTの出力は次の通り。
はい、銀行振込はキャッシュレス決済の一種です。キャッシュレス決済とは、紙幣や硬貨を使用せずに電子的な手段で支払いを行うことを指します。銀行振込は、支払いのために紙幣や硬貨を使用せずに、銀行口座を介して電子的な取引を行う方法です。そのため、銀行振込はキャッシュレス決済の一つとして位置付けられます。
Perplexityの出力は次の通り。
銀行振込はキャッシュレス決済にあたります。キャッシュレス決済とは、現金以外で支払う決済手段のことであり、クレジットカードや銀行振込などがこれにあたる[1][2][3][4]。
日本のキャッシュレス決済比率は約20%と言われていますが、銀行口座を使った支払いを含めれば約50%まで引き上がるとも言われています[3]。
どちらも正しそうです。

オセロ


入力した文字列は
オセロの初期配置を絵文字で描いて
ChatGPTの出力は次の通り。
Sure, here's a visual representation of the starting position for Othello using emojis:

⚪️⚫️⚪️⚪️⚪️⚪️⚪️⚪️
⚪️⚪️⚪️⚪️⚪️⚪️⚪️⚪️
⚪️⚪️⚪️⚪️⚪️⚪️⚪️⚪️
⚪️⚪️⚪️⚫️⚪️⚪️⚪️⚪️
⚪️⚪️⚪️⚪️⚫️⚪️⚪️⚪️
⚪️⚪️⚪️⚪️⚪️⚪️⚪️⚪️
⚪️⚪️⚪️⚪️⚪️⚪️⚪️⚪️
⚪️⚪️⚪️⚪️⚪️⚪️⚪️⚫️
Perplexityの出力は次の通り。
セロの初期配置を絵文字で描くことができます。以下は一例です。
⚪️⚫️⚫️⚫️⚫️⚫️
⚫️⚪️⚪️⚪️⚪️⚫️
⚫️⚪️⚪️⚪️⚪️⚫️
⚫️⚪️⚪️⚪️⚪️⚫️
⚫️⚪️⚪️⚪️ ⚪ ⬜
 ⬜ ⬜ ⬜ ⬜ ⬜
 (白石を「○」、黒石を「●」、「 」を空白、「■」を壁などに置き換えています。)
どちらもハズレですね。白の絵文字が環境によっては見えないかもです。

将棋の初期配置


入力した文字列は
将棋の初期配置を絵文字で書いて
ChatGPTの出力は次の通り。
将棋の初期配置を絵文字で書くと以下のようになります:

🐴🩹🦫🥋🩸🥋🦫🩹🐴
🐺🩹🩹🩹🩹🩹🩹🩹🐺
🐗🩹🦊🥋🩸🥋🦊🩹🐗
🐦🩹🩹🩹🩹🩹🩹🩹🐦
🎖️🩹🎖️🩹🎖️🩹🎖️🩹🎖️
🩸🩹🩸🩹🩸🩹🩸🩹🩸
🐭🩹🩹🩹🩹🩹🩹🩹🐭
🐱🩹🦊🥋🩸🥋🦊🩹🐱
🐵🩹🩹🩹🩹🩹🩹🩹🐵

解説:

🐴: 先手の馬
🐺: 先手のライオン(本将棋ではライオンと呼びます)
🐗: 先手の豹
🐦: 先手の鳥
🎖️: 先手の玉将
🩸: 先手の兵
🐭: 後手のねずみ
🐱: 後手の猫
🐵: 後手の猿

🦫: 「絵文字」には将棋の駒の絵文字が存在しないため、「アナグマ」を代用しています。
🥋: 同様に「道着」を表す絵文字を使用しています。
どうなっているのでしょうか。

Perplexityの出力は次の通り。

将棋の初期配置は以下のように絵文字で書くことができます。
🐴🉑🉐🉑🉐🎖️🉑🉐🉑🉐
(先手:歩兵2、香車2、桂馬2、銀将1、金将1、王将1)
(後手:歩兵2、香車2、桂馬2、銀将1、金将1、王将1)
こっちも変。絵文字というのが良くないようです。

将棋の初期配置 その2


入力した文字列は
将棋の初期配置を文字で描いて。罫線を使って枠も描いて。
ChatGPTの出力は次の通り。
はい、以下に将棋の初期配置を文字で描き、罫線で枠を描きます。

┏━┯━┯━┯━┯━┯━┯━┯━┓
┃ │香│桂│銀│金│王│金│銀│桂│香│
┠─┼─┼─┼─┼─┼─┼─┼─┨
┃歩│歩│歩│歩│歩│歩│歩│歩│歩│
┠─┼─┼─┼─┼─┼─┼─┼─┨
┃ │ │ │ │ │ │ │ │ │
┠─┼─┼─┼─┼─┼─┼─┼─┨
┃ │ │ │ │ │ │ │ │ │
┠─┼─┼─┼─┼─┼─┼─┼─┨
┃ │ │ │ │ │ │ │ │ │
┠─┼─┼─┼─┼─┼─┼─┼─┨
┃ │ │ │ │ │ │ │ │ │
┠─┼─┼─┼─┼─┼─┼─┼─┨
┃歩│歩│歩│歩│歩│歩│歩│歩│歩│
┠─┼─┼─┼─┼─┼─┼─┼─┨
┃ │飛│角│金│ │金│ │馬│飛│
┗━┷━┷━┷━┷━┷━┷━┷━┛

※棋譜や駒落ちのルール等によっては、初期配置が異なる場合があります。
Perplexityの出力は次の通り。
将棋の初期配置は以下のようになります。罫線を使って枠も描きました。
┏━┳━┳━┳━┳━┳━┳━┳━┓
┃香│桂│銀│金│玉│金│銀│桂│
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃ │飛│ │ │ │ │角│ │
┣━╋━╋━╋━╋━╋━╋━╋━┫
┃歩│歩│歩│歩│歩│歩│歩│歩 │
┗━━━━━━━━━━━━━━─
※将棋盤は9×9マスです。
ChatGPTはいろいろずれています。Perplexityは8x3の出力になっています。雰囲気は出ていますが、どちらも正しくないです。

2023/03/06

subprocess.runの文字列長の制限

Pythonのsubprocess.runで長い引数を使うと、エラーが発生して実行できません。

そこで、手元のLinux環境で限界を調べてみました。

最初に引数の最大値を調べてみます。

$ getconf ARG_MAX
2097152
と表示されました。

次に、Python経由でコマンドを実行してみます。

subprocess.run(["echo", "a"*131071]) 
はエラーが発生せずに動作しました。

一方、

subprocess.run(["echo", "a"*131072])
だと、
<省略>
  File "/usr/lib/python3.9/subprocess.py", line 505, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/lib/python3.9/subprocess.py", line 951, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.9/subprocess.py", line 1823, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 7] Argument list too long: 'echo'
となり、長すぎというエラーが出ました。ARG_MAXの値よりもずいぶんと短い値でエラーになります。

複数の引数ならどうなるかを試してみます。

subprocess.run(["echo"]+["a"*131071]*15)
はエラーが発生せずに動作しました。 runに渡した文字列長はリストの要素をスペース1個でつなげるとすると1966084バイトで、ARG_MAXを下回っています。

一方、

subprocess.run(["echo"]+["a"*131071]*16)
だと先程と同じエラーが発生します。 この場合の文字列の長さは2097156でARG_MAXを超えています。

というわけで、引数の長さには2つ制限があり、

  • 引数単位での文字列長の上限
  • コマンド全体での長さの上限
の2つがあることがわかりました。