仕事
ユーザーへの挨拶のような単純なタスクを実行する単純なIRCボットを作成します。
細部
これらを実行する完全なプログラムを作成します。
プログラムの入力
nicknameとrealnameユーザーから。- すべて
nicknameとrealnameどのフォームを[A-Za-z0-9]+許可する必要がありますが、他のフォームを許可するかどうかは重要ではありません。たとえば、ユーザーが1234qwertyasnicknameおよび5319009asをrealname必要とする場合、プログラムはそれらの名前を使用する必要がありますが、プログラムが^^☆Rick Astley☆^^(非アルファベットと10進数を含む)を(nicknameまたはrealname)として使用できるかどうかは重要ではありません。サーバーによって。
- すべて
プログラム
serverAddressはユーザーから入力します。- の形式は
serverAddressですserverIP:serverPort。serverIPはサーバーのIPアドレスで、はサーバーserverPortのポート番号です。
- の形式は
プログラムは
serverPortIRCサーバーのポートに接続しserverIP、とを送信することによりnickname、ニックネームを実名に設定する必要があります。realnameUSER realname 0 * :realnameNICK nicknameプログラムは
channelNameを含まないシングルを入力#し、チャンネルに参加します#channelName。次のようにプライベートメッセージ
Hello, world!を#channelNameチャンネルに送信します。PRIVMSG #channelName :Hello, world!次に、プログラムはこれらを実行します。
A.誰かが参加する場合は、に言っ
Hello, @!て挨拶し#channelNameます。ここで、@は彼/彼女のニックネームです。B.プログラムがキックされた場合は、再度参加してみてください。
C.人がキックまたは禁止されている場合は、と言い
POW HAHAます。D.人が(
PARTまたはQUIT)を去る場合は、と言いますGoodbye, @!。ここで、@はその人のニックネームです。E.誰かが
Turing testまたはを含むテキストを言ったらturing test、と言いI'm a human!ます。F.誰かがを含むテキストを言った場合、サーバーに
6*9送信QUIT :42して終了します。G.誰かが
all your base are belong to us(大文字小文字を区別しない)を含むテキストを言った場合QUIT :What you say!、サーバーに送信して終了します。H.誰かがスペースの前にあるテキストとそれ以上の動作がテキストによって実行されないと言う場合、テキスト内のすべての(最初のスペースを除く)文字の文字コードの合計を言います。
エラーが発生した場合
エラー(接続エラーや無効などnickname)が発生した場合、必要な操作を実行できます。たとえば、nicknameがすでに使用されている場合、プログラムは停止するnicknameか、ユーザーから新しいものを取得するか、自動的にを変更しnicknameて再試行します。
制限
プログラム
- IRCクライアント/ボット作成用の内部関数またはライブラリを使用しないでください。つまり、IRCクライアントライブラリのようなもの
- 必要があり、それが入力を取得する前に、どのようなことは入力よプロンプト。たとえば、入力する前に
serverAddress、それはプロンプトを表示する必要がありWrite the address of server:、serverIP:serverPort >、serverAddress >、いくつかのテキストまたはユーザーが認識できること。 - UTF-8を使用する複数のIRCサーバーで動作するはずです。(つまり、単一サーバーではありません)
- のサーバーに送信されるメッセージはであってはなりません
NOTICE。(RFC 2812、3.3.2注意:差NOTICEとは、PRIVMSG自動返信がに応答して送信されてはならないということであるNOTICEメッセージ)。 - リクエスト元のメッセージを送信する必要があります(
#channelNameまたはnickname)。 - もちろん
PONG、PING編集する必要があります。
PS
まあ、私はこれを作っただけです。なぜならIRCボットについてのパズルがなかったからです。
編集する
@dmckeeのコメントを読んだ後、勝者を選ぶルールを変更しました。
デフォルト
bonus= +0何らかの理由でプログラムがチャネルに接続できる場合(そうでない場合でも
#channelName)、bonus= 1プログラムがステップ1から5を実行できる場合、
bonus* = 2。ステップ6の各タスクA〜Hについて、プログラムが実装する場合、
bonus* =1.2。6つの制限ごとに、プログラムがそれに従っている場合、
bonus* =1.05。
とscore = int(codelength/bonus)。
最も低いスコアのプログラムが勝者です。2つの回答のスコアが同じ場合、投票数が最も多い回答が優先されます。
EDIT編集:私は思う1.2し、1.05ステップ4と5に大きめに調整する必要があります..あなたはこれについてどう思いますか?
勝者は決まっていますが、エントリーが少なすぎると思います。
だれでもまだコードを送信できます..:P