これはコードゴルフの課題であり、機械学習を説明するために馬または馬を改造する馬のように振る舞うプログラムを考案する必要があります。
バックグラウンド
ここで説明する「センザンコウゲーム」と呼ばれる基本的な人工知能プログラムがあります。基本的なアイデアは、プログラムを初めて実行するときに次のことを尋ねることです。
OK、何か考えてください
それはセンザンコウですか?
その後、次のいずれかを返信できます。
はい
その場合、それは言います:
良い。とても簡単でした。
または、そうでない場合:
ああ。さて、あなたは勝ちます-あなたは何を考えていましたか?
あなたが言うかもしれない:
犬
それに言うだろう
犬について質問してください。犬とセンザンコウの違いがわかります。
返信するかもしれません
アリを食べますか?
それから尋ねます:
犬の答えは何ですか?
あなたが言うだろう
いや
そしてそれは言うだろう
ありがとう
次回の実行時に、上記の質問をし、そのような質問のバイナリツリーを構築します。
チャレンジ
背景は十分です。この課題は、自己修正のセンザンコウプログラムを作成することです。ルールは次のとおりです。
プログラムの出力(上記の説明を参照)はになります
STDERR
。最終的な応答は常に「良い。それはすっごく簡単だった」です。または「ありがとう」。この後、プログラムの現在のバージョン、または質問をに組み込んだプログラムの新しいバージョンを出力する必要がありますSTDOUT
。書き込みをサポートしていない言語で書かれた無回答STDOUT
およびSTDERR
またはからの読み取りがSTDIN
有効になることはありません。言い換えると、UNIXの場合、次のようにプログラムを呼び出すことができます。
例:
$ mylanguage myprogram > myprogram.1
[dialog goes here]
$ mylanguage myprogram1 > myprogram.2
[dialog goes here]
- プログラムは指定されたプロンプトを正確に使用する必要があります(プロンプトを短くするとスキルが表示されないため)。プロンプトは、次のとおりです(引用符なし、および%sが置換されます)。
リスト:
"OK, please think of something"
"Is it %s?"
"Good. That was soooo easy."
"Oh. Well you win then -- What were you thinking of?"
"Please give me a question about %s, so I can tell the difference between %s and %s"
"What is the answer for %s?"
"Thanks"
はい/いいえ答えを期待していない場合は、あなたのプログラムが受け入れるべき
y
か、yes
「はい」のためにどのような場合で、かつn
またはno
「いいえ」のいずれかの場合には 不適合な入力をどうするかはあなた次第です。たとえば、「yes」で始まる、y
またはY
「yes」で始まる答えはすべて答え、それ以外は「no」で答える場合があります。提供されるものの名前と質問はASCII文字、数字、スペース、ハイフン、疑問符、コンマ、ピリオド、コロン、セミコロンのみで構成されていると仮定できます
^[-?,.;: a-zA-Z]+$
。つまり、次のregexと一致します。それ以上(特に選択した言語の引用文字)に対処できる場合は、独善的になりますが、余分なポイントは獲得しません。任意のファイルを読み書きないかもしれないあなたのプログラムが(除く
STDIN
、STDOUT
、およびSTDERR
またはネットワークから、); 具体的には、ディスクから独自のコードを読み書きすることはできません。その状態は、プログラムコード自体に保存する必要があります。プログラムが実行され、答えを正しく推測するとき、それは正確にクインと同じように実行する必要があります。つまり
STDOUT
、変更せずに正確に独自のコードに書き込む必要があります。プログラムを実行して、間違って答えを推測されている場合、それはしなければならない、独自のコード内で提供される新しい質問と答えをエンコードし、それを書き
STDOUT
、それが元の推測と提供される新しいオブジェクト間で区別することができるので、独自のコードでは、中以前に指定されたすべてのオブジェクトを区別することに加えて。多くのオブジェクトについて学習するために、ソフトウェアの複数の連続実行に対処できる必要があります。複数の実行の例については、こちらをご覧ください。
標準の抜け穴は除外されます。