Tarea
Haga un bot IRC simple que realice tareas simples como saludar al usuario.
Detalle
(Puede ver este documento RFC ).
Escriba un programa completo que realice estos:
Las entradas del programa
nickname
yrealname
del usuario.- Todos
nickname
yrealname
qué formulario se[A-Za-z0-9]+
debe permitir, pero no es importante si se permiten otros formularios. Por ejemplo, si el usuario quiere1234qwerty
asnickname
y5319009
asrealname
, el programa debe usar esos nombres, pero no es importante si el programa puede usar^^☆Rick Astley☆^^
(que incluye no alfabeto y decimales) como (nickname
orealname
) o no, incluso si este nombre puede ser rechazado por el servidor
- Todos
Las entradas
serverAddress
del programa del usuario.- La forma de
serverAddress
esserverIP:serverPort
, dondeserverIP
está la dirección IP del servidor yserverPort
es el número de puerto del servidor.
- La forma de
El programa se conecta al puerto
serverPort
en el servidor IRCserverIP
, y debe establecer su apodo comonickname
y el nombre realrealname
al enviarUSER realname 0 * :realname
yNICK nickname
.El programa ingresa un solo
channelName
que no incluye#
, y se une al canal#channelName
.Envía un mensaje privado
Hello, world!
al#channelName
canal como este:PRIVMSG #channelName :Hello, world!
Luego, el programa hace lo siguiente:
R. Si alguien se une, salúdelo diciéndole
Hello, @!
a#channelName
, donde @ es el apodo de él / ella.B. Si el programa es pateado, intente volver a unirse.
C. Si una persona es expulsada o expulsada, diga
POW HAHA
.D. Si una persona se va (
PART
oQUIT
), digamosGoodbye, @!
, donde @ es el apodo de él / ella.E. Si alguien dice algún texto que incluya
Turing test
oturing test
, digamosI'm a human!
.F. Si alguien dice algún texto incluido
6*9
, salga enviándoloQUIT :42
al servidor.G. Si alguien dice algo de texto
all your base are belong to us
(sin distinción entre mayúsculas y minúsculas), salga enviándoloQUIT :What you say!
al servidor.H. Si alguien dice que un texto que precede con un espacio y los actos anteriores no son realizados por el texto, diga la suma de charcode de todos los caracteres (excepto el primer espacio) en el texto.
Si ocurre un error
Si nickname
se produce un error (como un error de conexión o no válido ), puede hacer lo que quiera hacer. Por ejemplo, si nickname
ya está en uso, el programa puede detenerse, recibir una nueva nickname
del usuario o cambiar automáticamente nickname
y volver a intentarlo.
Restricción
El programa
- No debe usar ninguna función interna o biblioteca que sea para la creación de clientes / bots IRC. es decir, algo así como las bibliotecas de clientes IRC
- Debe solicitar lo que ingresará, antes de que reciba una entrada . Por ejemplo, antes de las entradas
serverAddress
, se debe impulsarWrite the address of server:
,serverIP:serverPort >
,serverAddress >
, o algún texto que el usuario puede reconocer. - Debería funcionar en varios servidores IRC utilizando UTF-8. (es decir, no para un solo servidor)
- Los mensajes enviados al servidor no deberían ser
NOTICE
. (RFC 2812, 3.3.2 Aviso: la diferencia entreNOTICE
yPRIVMSG
es que las respuestas automáticas NUNCA DEBEN enviarse en respuesta a unNOTICE
mensaje). - Debe enviar un mensaje de donde proviene la solicitud (
#channelName
onickname
). - Debería
PONG
cuandoPING
ed, por supuesto.
PD
Bueno, acabo de hacer esto, porque no había rompecabezas sobre el bot IRC.
Editar
Después de leer el comentario de @ dmckee, cambié la regla para elegir al ganador.
Predeterminado
bonus
= +0Si de alguna manera el programa puede conectarse a un canal (incluso si no lo es
#channelName
),bonus
= 1Si el programa puede realizar los pasos 1 ~ 5,
bonus
* = 2.Para cada tarea A ~ H en el paso 6, si el programa implementa,
bonus
* =1.2
.Por cada seis restricciones, si el programa sigue eso,
bonus
* =1.05
.
y score = int(codelength/bonus)
.
El programa con la puntuación más baja es el ganador. Si dos respuestas tienen el mismo puntaje, entonces gana la respuesta con los votos más altos.
Editar editar: Pienso 1.2
y 1.05
en el paso 4 y 5 se debe ajustar ligeramente más grande .. ¿Qué opinas de esto?
El ganador se decide, sin embargo, creo que hubo muy pocas entradas.
Cualquiera puede enviar el código ...: P
Respuestas:
PHP - 121 puntos
Puntuación
Código
Nota al margen
Mi respuesta en realidad difiere ligeramente de las instrucciones; las instrucciones dicen usar el
realname
primer parámetro delUSER
comando cuando me registre, pero usé el apodo en su lugar. Esto se debe a querealname
se permite tener espacios, mientras que este parámetro no. Sin embargo, es un punto discutible, ya que cambiar la variable pararealname
sería exactamente el mismo recuento de caracteres.fuente
Python - 125 puntos
puntaje matemático (pitón):
código:
fuente
Perl, 66 puntos
Puntuación
Código
(nuevas líneas para presentación solamente, no contadas y mucho menos aceptables)
Nota al margen
El subpaso "TODAS TU BASE PERTENECEN A NOSOTROS" probablemente no valga la pena su recuento de caracteres, pero si lo elimino no tendría el buen recuento de caracteres. Tío.
fuente
Ruby, 28 puntos
Puntuación
Código
fuente
Ruby, 65 puntos
Puntuación
Código
fuente