직무
인사말 사용자와 같은 간단한 작업을 수행하는 간단한 IRC 봇을 만듭니다.
세부 묘사
( 이 RFC 문서를 볼 수 있습니다 .)
다음을 수행하는 완전한 프로그램을 작성하십시오.
프로그램 입력
nickname
및realname
사용자.- 모두
nickname
와realname
어떤 형식이[A-Za-z0-9]+
허용되어야하지만 다른 형식이 허용되는지는 중요하지 않습니다. 예를 들어, 사용자가1234qwerty
asnickname
및5319009
as를 원하면realname
프로그램에서 해당 이름을 사용해야하지만 프로그램^^☆Rick Astley☆^^
에서 알파벳이 아닌 (소수자가 아닌) 포함 (nickname
또는realname
)을 사용할 수 있는지 여부는 중요 하지 않습니다. 서버에 의해.
- 모두
serverAddress
사용자가 프로그램을 입력 합니다.- 형식은
serverAddress
입니다serverIP:serverPort
. 여기서serverIP
서버의 IP 주소는 서버serverPort
의 포트 번호입니다.
- 형식은
포트에이 프로그램은 커넥트
serverPort
IRC 서버에서serverIP
, 그리고 그것의 별명으로 설정해야합니다nickname
같이 realname을realname
보내USER realname 0 * :realname
와NICK 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. 누군가 앞에 공백이 있고 위의 동작이 텍스트에 의해 수행되지 않는다고 말하면 텍스트의 모든 문자 (첫 번째 공백 제외)의 문자 코드 합계를 말합니다.
에러가 발생한 경우
연결 오류 또는 invalid와 같은 오류 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
물론, 에드.
추신
글쎄, IRC 봇에 대한 퍼즐이 없었기 때문에 방금 이것을 만들었습니다.
편집하다
@dmckee의 의견을 읽은 후 우승자를 선택하는 규칙을 변경했습니다.
기본값
bonus
= +0프로그램이 어떻게 든 채널에 연결할 수 있다면 ( 1이 아닌 경우에도
#channelName
),bonus
= 1프로그램이 1 ~ 5 단계를 수행 할 수 있으면
bonus
* = 2입니다.6 단계의 각 태스크 A ~ H에 대해 프로그램이 구현하는 경우
bonus
* =1.2
.6 가지 제한 사항마다 프로그램이 다음을 준수하면
bonus
* =1.05
.
그리고 score = int(codelength/bonus)
.
가장 낮은 점수를받은 프로그램이 승자입니다. 두 답변의 점수가 같으면 가장 높은 표를 얻은 답변이 승리합니다.
편집 편집 : 나는 생각 1.2
하고 1.05
4 단계와 5 단계에서 약간 더 크게 조정해야합니다. 이것에 대해 어떻게 생각하십니까?
우승자가 결정되었지만 출품작이 너무 적다고 생각합니다.
누구든지 여전히 코드를 제출할 수 있습니다 .. : P