Zadanie
Stwórz prostego bota IRC, który wykonuje proste zadanie, takie jak powitanie użytkownika.
Szczegół
(Możesz zobaczyć ten dokument RFC .)
Napisz kompletny program, który wykona następujące czynności:
Dane wejściowe programu
nickname
irealname
od użytkownika.- Wszystko
nickname
irealname
która forma jest[A-Za-z0-9]+
dozwolona, ale nie jest ważne, czy dozwolone są inne formularze. Na przykład, jeśli użytkownik chce1234qwerty
jaknickname
i5319009
jakrealname
, program powinien używać tych nazw, ale nie jest ważne, czy program może używać^^☆Rick Astley☆^^
(w tym nie alfabetu i dziesiętnych) jako (nickname
lubrealname
), czy nawet nie, nawet sądząc, że ta nazwa może zostać odrzucona przez serwer.
- Wszystko
Dane wejściowe programu
serverAddress
od użytkownika.- Formą
serverAddress
jestserverIP:serverPort
, gdzieserverIP
jest adres IP serwera iserverPort
numer portu serwera.
- Formą
Program łączy się z portem
serverPort
na serwerze IRCserverIP
i powinien ustawić swój pseudonim jakonickname
i prawdziwą nazwę jakorealname
wysyłającUSER realname 0 * :realname
iNICK nickname
.Program wprowadza singiel,
channelName
który nie zawiera#
i dołącza do kanału#channelName
.Wyślij prywatną wiadomość
Hello, world!
do#channelName
kanału w ten sposób:PRIVMSG #channelName :Hello, world!
Następnie program wykonuje następujące czynności:
A. Jeśli ktoś dołączy, powitaj go, mówiąc
Hello, @!
do#channelName
, gdzie @ to jego / jej pseudonim.B. Jeśli program zostanie uruchomiony, spróbuj ponownie dołączyć.
C. Jeśli ktoś zostanie wyrzucony lub zbanowany, powiedzmy
POW HAHA
.D. Jeśli dana osoba opuszcza (
PART
lubQUIT
), powiedzmyGoodbye, @!
, gdzie @ jest jej pseudonimem.E. Jeśli ktoś powie jakiś tekst, w tym
Turing test
lubturing test
, powiedzmyI'm a human!
.F. Jeśli ktoś powie coś, w tym tekst
6*9
, wyjdź, wysyłającQUIT :42
na serwer.G. Jeśli ktoś powie jakiś tekst, w tym
all your base are belong to us
(bez rozróżniania wielkości liter), wyjdź, wysyłającQUIT :What you say!
na serwer.H. Jeśli ktoś powie, że tekst poprzedzony spacją i powyższe akty nie są wykonywane przez tekst, powiedz sumę znaków kodowych wszystkich znaków (z wyjątkiem pierwszej spacji) w tekście.
Jeśli wystąpi błąd
Jeśli wystąpi błąd (taki jak błąd połączenia lub nieprawidłowy nickname
), możesz zrobić to, co chcesz. Na przykład, jeśli program nickname
jest już w użyciu, program może zatrzymać się, pobrać nowy nickname
od użytkownika lub automatycznie zmienić nickname
i ponowić próbę.
Ograniczenie
Program
- Nie powinien używać żadnych wewnętrznych funkcji ani bibliotek, które służą do tworzenia klienta / bota IRC. tj. coś w rodzaju bibliotek klienta IRC
- Powinien zapytać, co wprowadzi, zanim otrzyma dane wejściowe . Na przykład, przed wejściami
serverAddress
, powinno skłonićWrite the address of server:
,serverIP:serverPort >
,serverAddress >
, lub jakiś tekst, że użytkownik może rozpoznać. - Powinien działać na kilku serwerach IRC korzystających z UTF-8. (tj. nie dla pojedynczego serwera)
- Wiadomości wysyłane na serwer nie powinny
NOTICE
. (RFC 2812, 3.3.2 Uwaga: Różnica międzyNOTICE
iPRIVMSG
polega na tym, że automatyczne odpowiedzi NIGDY nie powinny być wysyłane w odpowiedzi naNOTICE
wiadomość.) - Powinien wysłać wiadomość, z której pochodzi żądanie (
#channelName
lubnickname
). - Należy
PONG
przyPING
ed, oczywiście.
PS
Właśnie to zrobiłem, ponieważ nie było żadnej łamigłówki na temat bota IRC.
Edytować
Po przeczytaniu komentarza @ dmckee zmieniłem zasadę wyboru zwycięzcy.
Domyślnie
bonus
= +0Jeśli w jakiś sposób program może połączyć się z kanałem (nawet jeśli nie jest
#channelName
),bonus
= 1Jeśli program może wykonać kroki 1 ~ 5,
bonus
* = 2.Dla każdego zadania A ~ H w kroku 6, jeśli program implementuje,
bonus
* =1.2
.Dla każdego sześciu ograniczeń, jeśli program postępuje zgodnie z tym,
bonus
* =1.05
.
a score = int(codelength/bonus)
.
Program z najniższym wynikiem jest zwycięzcą. Jeśli dwie odpowiedzi mają ten sam wynik, wygrywa odpowiedź z największą liczbą głosów.
EDIT Edycja: Myślę, że 1.2
i 1.05
w kroku 4 i 5 powinny być dostosowane nieco większe .. Co sądzisz na ten temat?
Zwycięzca jest zdecydowany, jednak myślę, że było za mało zgłoszeń.
Nadal każdy może przesłać kod ..: P