задача
Сделайте простого IRC-бота, который выполняет простую задачу, например, приветствует пользователя.
подробность
(Вы можете увидеть этот документ RFC .)
Напишите полную программу, которая выполняет эти:
Программа ввода
nickname
иrealname
от пользователя.- Все
nickname
иrealname
какая форма[A-Za-z0-9]+
должна быть разрешена, но не важно, разрешены ли другие формы. Например, если пользователь хочет,1234qwerty
какnickname
и5319009
какrealname
, программа должна использовать эти имена, но не важно, может ли программа использовать^^☆Rick Astley☆^^
(которая включает в себя не алфавит и десятичные дроби) как (nickname
илиrealname
) или нет, даже если бы это имя могло быть отклонено на сервере.
- Все
Программа ввода
serverAddress
от пользователя.- Форма
serverAddress
:serverIP:serverPort
гдеserverIP
IP-адрес сервера иserverPort
номер порта сервера.
- Форма
Программа подключается к порту
serverPort
на IRC-сервереserverIP
, и ей следует установить псевдоним какnickname
и реальное имяrealname
, отправивUSER realname 0 * :realname
иNICK nickname
.Программа вводит сингл,
channelName
который не включает#
, и присоединяется к каналу#channelName
.Отправить личное сообщение
Hello, world!
на#channelName
канал, как это:PRIVMSG #channelName :Hello, world!
Затем программа делает это:
A. Если кто - то присоединяется, приветствуя его, говоря ,
Hello, @!
чтобы#channelName
, где @ это прозвище ему / ей.Б. Если программа запущена, попробуйте снова присоединиться.
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. Если кто-то говорит, что какой-то текст, предшествующий пробелу и выше, не выполняется в тексте, произнесите сумму charcode всех (кроме первого пробела) символов в тексте.
Если произошла ошибка
Если произошла ошибка (например, ошибка подключения или неверная nickname
), вы можете делать то, что хотите. Например, если nickname
он уже используется, программа может остановиться, получить новое nickname
от пользователя или автоматически изменить nickname
и повторить попытку.
ограничение
Программа
- Не следует использовать какие-либо внутренние функции или библиотеки для IRC-клиентов / ботов. то есть что-то вроде клиентских библиотек IRC
- Должен подсказать, что он будет вводить, прежде чем получит ввод . Например, перед входами
serverAddress
, он должен подсказатьWrite the address of server:
,serverIP:serverPort >
,serverAddress >
или какой - нибудь текст , который пользователь может распознать. - Должен работать на нескольких IRC-серверах с использованием UTF-8. (т.е. не для одного сервера)
- сообщений отправлять на сервер не следует
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.Для каждой задачи A ~ H на шаге 6, если программа реализует,
bonus
* =1.2
.Для каждых шести ограничений, если программа следует этому,
bonus
* =1.05
.
и score = int(codelength/bonus)
.
Программа с наименьшим количеством баллов является победителем. Если два ответа имеют одинаковую оценку, то выигрывает ответ с наибольшим количеством голосов.
РЕДАКТИРОВАТЬ Редактировать: Я думаю, 1.2
и 1.05
в шаге 4 и 5 должны быть скорректированы немного больше .. Что вы думаете об этом?
Победитель определен, однако, я думаю, что было слишком мало заявок.
Кто-нибудь еще может отправить код ..: P
Ответы:
PHP - 121 балл
Гол
Код
Примечание
Мой ответ на самом деле немного отличается от инструкции; В инструкциях говорится,
realname
чтоUSER
при регистрации в качестве первого параметра команды следует использовать команду, но вместо этого я использовал псевдоним. Это потому, чтоrealname
разрешено иметь пробелы, а этот параметр - нет. Тем не менее, это спорный вопрос, поскольку переключение переменной дляrealname
будет таким же количеством символов.источник
Питон - 125 очков
оценка математики (питона):
код:
источник
Perl, 66 очков
Гол
Код
(новые строки только для презентации, не считаются приемлемыми)
Примечание
Подэтап «ВСЕ ВАШЕ ОСНОВАНИЕ ДОЛЖНЫ НАМ», скорее всего, не стоит подсчета персонажей, но если бы я его отбросил, у меня не было бы хорошего количества персонажей. Мудак.
источник
Рубин, 28 баллов
Гол
Код
источник
Рубин, 65 баллов
Гол
Код
источник