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
nicknameirealnameod użytkownika.- Wszystko
nicknameirealnamektó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 chce1234qwertyjaknicknamei5319009jakrealname, 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 (nicknamelubrealname), czy nawet nie, nawet sądząc, że ta nazwa może zostać odrzucona przez serwer.
- Wszystko
Dane wejściowe programu
serverAddressod użytkownika.- Formą
serverAddressjestserverIP:serverPort, gdzieserverIPjest adres IP serwera iserverPortnumer portu serwera.
- Formą
Program łączy się z portem
serverPortna serwerze IRCserverIPi powinien ustawić swój pseudonim jakonicknamei prawdziwą nazwę jakorealnamewysyłającUSER realname 0 * :realnameiNICK nickname.Program wprowadza singiel,
channelNamektóry nie zawiera#i dołącza do kanału#channelName.Wyślij prywatną wiadomość
Hello, world!do#channelNamekanał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 (
PARTlubQUIT), powiedzmyGoodbye, @!, gdzie @ jest jej pseudonimem.E. Jeśli ktoś powie jakiś tekst, w tym
Turing testlubturing test, powiedzmyI'm a human!.F. Jeśli ktoś powie coś, w tym tekst
6*9, wyjdź, wysyłającQUIT :42na 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 nicknamejest już w użyciu, program może zatrzymać się, pobrać nowy nicknameod użytkownika lub automatycznie zmienić nicknamei 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ędzyNOTICEiPRIVMSGpolega na tym, że automatyczne odpowiedzi NIGDY nie powinny być wysyłane w odpowiedzi naNOTICEwiadomość.) - Powinien wysłać wiadomość, z której pochodzi żądanie (
#channelNamelubnickname). - Należy
PONGprzyPINGed, 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.2i 1.05w 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