Tarefa
Faça um bot simples de IRC, que executa tarefas simples como cumprimentar usuário.
Detalhe
(Você pode ver este documento RFC .)
Escreva um programa completo que execute estes:
As entradas do programa
nickname
erealname
do usuário.- Todo
nickname
erealname
qual formulário[A-Za-z0-9]+
deve ser permitido, mas não é importante se outros são permitidos. Por exemplo, se o usuário quiser1234qwerty
comonickname
e5319009
comorealname
, o programa deve usar esses nomes, mas não é importante se o programa pode usar^^☆Rick Astley☆^^
(que inclui caracteres não alfabéticos e decimais) como (nickname
ourealname
) ou não, mesmo que esse nome possa ser rejeitado pelo servidor.
- Todo
As entradas
serverAddress
do programa do usuário.- A forma de
serverAddress
éserverIP:serverPort
, ondeserverIP
é o endereço IP do servidor eserverPort
é o número da porta do servidor.
- A forma de
O programa se conecta à porta
serverPort
no servidor IRCserverIP
e deve definir seu apelido comonickname
e nome real comorealname
enviandoUSER realname 0 * :realname
eNICK nickname
.O programa insere um único
channelName
que não inclui#
e se junta ao canal#channelName
.Envie uma mensagem privada
Hello, world!
para o#channelName
canal assim:PRIVMSG #channelName :Hello, world!
Então, o programa faz o seguinte:
R. Se alguém entrar, cumprimente-o dizendo
Hello, @!
para#channelName
onde @ é o apelido dele.B. Se o programa for iniciado, tente entrar novamente.
C. Se uma pessoa for chutada ou banida, diga
POW HAHA
.D. Se uma pessoa sai (
PART
ouQUIT
), digamosGoodbye, @!
, onde @ é o apelido dela.E. Se alguém disser algum texto, incluindo
Turing test
outuring test
, digaI'm a human!
.F. Se alguém disser algum texto incluindo
6*9
, saia enviandoQUIT :42
para o servidor.G. Se alguém disser algum texto, incluindo
all your base are belong to us
(sem distinção entre maiúsculas e minúsculas), saia enviandoQUIT :What you say!
para o servidor.H. Se alguém disser que algum texto anterior com espaço e atos acima não são executados pelo texto, diga a soma do código de todos os caracteres (exceto o primeiro espaço) no texto.
Se ocorrer um erro
Se ocorrer um erro (como erro de conexão ou inválido nickname
), você poderá fazer o que deseja. Por exemplo, se ele nickname
já estiver em uso, o programa poderá parar, obter uma novidade nickname
do usuário ou alterar automaticamente nickname
e tentar novamente.
Restrição
O programa
- Não deve usar nenhuma função ou biblioteca interna destinada à criação de clientes / bot de IRC. ou seja, algo como bibliotecas de clientes IRC
- Deve solicitar o que será inserido, antes de receber uma entrada . Por exemplo, antes entradas
serverAddress
, deve solicitarWrite the address of server:
,serverIP:serverPort >
,serverAddress >
, ou algum texto que o usuário possa reconhecer. - Deve funcionar em vários servidores de IRC usando UTF-8. (ou seja, não para servidor único)
- As mensagens enviadas ao servidor não devem ser
NOTICE
. (RFC 2812, 3.3.2. Aviso: A diferença entreNOTICE
ePRIVMSG
é que as respostas automáticas NUNCA DEVEM ser enviadas em resposta a umaNOTICE
mensagem.) - Deve enviar uma mensagem de onde a solicitação veio (
#channelName
ounickname
). - Deve
PONG
quandoPING
ed, é claro.
PS
Bem, acabei de fazer isso, porque não havia quebra-cabeças sobre o bot de IRC.
Editar
Depois de ler o comentário de @ dmckee, mudei a regra para escolher o vencedor.
Padrão
bonus
= +0Se, de alguma forma, o programa puder se conectar a um canal (mesmo que não esteja
#channelName
),bonus
= 1Se o programa puder executar as etapas 1 a 5,
bonus
* = 2.Para cada tarefa A ~ H na etapa 6, se o programa implementar,
bonus
* =1.2
.Para cada seis restrições, se o programa seguir isso,
bonus
* =1.05
.
e score = int(codelength/bonus)
.
Programa com pontuação mais baixa é vencedor. Se duas respostas tiverem a mesma pontuação, a resposta com mais votos vence.
Edição: Eu acho que 1.2
e 1.05
nas etapas 4 e 5 devem ser ajustadas um pouco maiores .. O que você acha disso?
O vencedor está decidido, no entanto, acho que houve poucas inscrições.
Qualquer pessoa ainda pode enviar o código ..: P
Respostas:
PHP - 121 pontos
Ponto
Código
Nota
Minha resposta realmente difere das instruções muito ligeiramente; as instruções dizem para usar o
realname
como o primeiro parâmetro doUSER
comando ao registrar, mas usei o apelido. Isso ocorre porquerealname
é permitido ter espaços, enquanto esse parâmetro não é. É um ponto discutível, no entanto, uma vez que mudar a variável pararealname
seria exatamente a mesma contagem de caracteres.fonte
Python - 125 pontos
pontuação matemática (python):
código:
fonte
Perl, 66 pontos
Ponto
Código
(novas linhas apenas para apresentação, não contadas e muito menos aceitáveis)
Nota
A subetapa "TODA A SUA BASE ESTÁ PERTENCE A NÓS" provavelmente não vale sua contagem de caracteres, mas se eu a soltasse, não teria a boa contagem de caracteres. Bugger.
fonte
Ruby, 28 pontos
Ponto
Código
fonte
Ruby, 65 pontos
Ponto
Código
fonte