Aufgabe
Erstellen Sie einen einfachen IRC-Bot, der einfache Aufgaben wie die Begrüßung des Benutzers ausführt.
Detail
(Möglicherweise wird dieses RFC-Dokument angezeigt .)
Schreiben Sie ein vollständiges Programm, das diese ausführt:
Das Programm gibt
nickname
undrealname
vom Benutzer ein.- Alle
nickname
undrealname
welche Form[A-Za-z0-9]+
sollte erlaubt sein, aber es ist nicht wichtig, ob andere Formen erlaubt sind. Wenn der Benutzer beispielsweise1234qwerty
asnickname
und5319009
as möchterealname
, sollte das Programm diese Namen verwenden, aber es ist nicht wichtig, ob das Programm^^☆Rick Astley☆^^
(einschließlich Nicht-Alphabet und Dezimalstellen) als (nickname
oderrealname
) verwenden kann oder nicht, obwohl dieser Name möglicherweise abgelehnt wird vom Server.
- Alle
Das Programm wird
serverAddress
vom Benutzer eingegeben.- Die Form von
serverAddress
istserverIP:serverPort
, woserverIP
ist die IP-Adresse des Servers undserverPort
ist die Portnummer des Servers.
- Die Form von
Das Programm ist mit Port
serverPort
im IRC - ServerserverIP
, und es sollte es die Spitznamen nachnickname
und Realnamen wierealname
durch das SendenUSER realname 0 * :realname
undNICK nickname
.Das Programm gibt eine Single ein,
channelName
die nicht enthalten ist#
, und verbindet sich mit dem Kanal#channelName
.Senden Sie eine private Nachricht wie folgt
Hello, world!
an den#channelName
Kanal:PRIVMSG #channelName :Hello, world!
Dann macht das Programm diese:
A. Wenn jemand verbindet, Gruß ihn mit den Worten
Hello, @!
an#channelName
, wo @ ist der Spitzname von ihm / ihr.B. Wenn das Programm gestartet wird, versuchen Sie erneut, sich anzumelden.
C. Wenn eine Person getreten oder verboten wird, sagen wir
POW HAHA
.D. Wenn eine Person geht (
PART
oderQUIT
), sagen SieGoodbye, @!
, wo @ der Spitzname von ihr ist.E. Wenn jemand einen Text sagt, einschließlich
Turing test
oderturing test
, sagen wirI'm a human!
.F. Wenn jemand Text sagt, einschließlich
6*9
, beenden Sie ihn, indem Sie ihnQUIT :42
an den Server senden .G. Wenn jemand Text sagt, einschließlich
all your base are belong to us
(ohne Berücksichtigung der Groß- und Kleinschreibung), beenden Sie den Vorgang, indem Sie ihnQUIT :What you say!
an den Server senden .H. Wenn jemand sagt, dass ein Text mit einem Leerzeichen und höher nicht vom Text ausgeführt wird, sagen Sie die Summe der Zeichen aller Zeichen (außer des ersten Leerzeichens) im Text.
Wenn ein Fehler auftritt
Wenn ein Fehler (z. B. ein Verbindungsfehler oder ein ungültiger Fehler nickname
) auftritt, können Sie das tun, was Sie möchten. Wenn nickname
das Programm beispielsweise bereits verwendet wird, wird das Programm möglicherweise gestoppt, erhält eine neue nickname
vom Benutzer oder ändert das automatisch nickname
und versucht es erneut.
Beschränkung
Das Programm
- Sollte keine internen Funktionen oder Bibliotheken verwenden, die für die Erstellung von IRC-Clients / Bots vorgesehen sind. dh so etwas wie IRC-Client-Bibliotheken
- Sollte auffordern, was eingegeben werden soll, bevor eine Eingabe erfolgt . Zum Beispiel, bevor Eingaben
serverAddress
, sollte es auffordernWrite the address of server:
,serverIP:serverPort >
,serverAddress >
oder einen Text , dass der Benutzer erkennen kann. - Sollte auf mehreren IRC-Servern mit UTF-8 funktionieren. (dh nicht für einzelne Server)
- Die an den Server gesendeten Nachrichten sollten nicht sein
NOTICE
. (RFC 2812, 3.3.2 Hinweis: Der Unterschied zwischenNOTICE
undPRIVMSG
besteht darin, dass automatische Antworten NIEMALS als Antwort auf eineNOTICE
Nachricht gesendet werden dürfen.) - Sollte eine Nachricht senden, woher die Anfrage kam (
#channelName
odernickname
). - Sollte
PONG
wennPING
ed natürlich.
PS
Nun, ich habe das gerade gemacht, weil es kein Rätsel um den IRC-Bot gab.
Bearbeiten
Nachdem ich den Kommentar von @ dmckee gelesen hatte, änderte ich die Regel für die Auswahl des Gewinners.
Standard
bonus
= +0Wenn das Programm irgendwie eine Verbindung zu einem Kanal herstellen kann (auch wenn dies nicht der Fall ist
#channelName
),bonus
= 1Wenn das Programm die Schritte 1 bis 5 ausführen kann, ist
bonus
* = 2.Für jede Aufgabe A ~ H in Schritt 6 gilt, wenn das Programm implementiert,
bonus
* =1.2
.Wenn das Programm dem folgt, gilt für jeweils sechs Einschränkungen
bonus
* =1.05
.
und score = int(codelength/bonus)
.
Programm mit der niedrigsten Punktzahl ist Gewinner. Wenn zwei Antworten die gleiche Punktzahl haben, gewinnt die Antwort mit den höchsten Stimmen.
EDIT Edit: Ich denke 1.2
und 1.05
in Schritt 4 und 5 sollte etwas größer eingestellt werden .. Was denkst du darüber?
Der Gewinner steht fest, aber ich denke, es gab zu wenige Einsendungen.
Jeder kann den Code noch einreichen ..: P.
Antworten:
PHP - 121 Punkte
Ergebnis
Code
Randnotiz
Meine Antwort unterscheidet sich tatsächlich geringfügig von den Anweisungen. Die Anweisungen besagen, dass bei der Registrierung der
realname
als erster Parameter für denUSER
Befehl verwendet werden soll, aber ich habe stattdessen den Spitznamen verwendet. Dies liegt daranrealname
, dass der Leerzeichen enthalten darf, dieser Parameter jedoch nicht. Es ist jedoch ein strittiger Punkt, da das Umschalten der Variablen fürrealname
genau die gleiche Zeichenanzahl wäre.quelle
Python - 125 Punkte
Punktzahl Mathematik (Python):
Code:
quelle
Perl, 66 Punkte
Ergebnis
Code
(Zeilenumbrüche nur zur Präsentation, nicht gezählt, geschweige denn akzeptabel)
Randnotiz
Der Unterschritt "ALLE IHRE BASIS GEHÖRT UNS" ist höchstwahrscheinlich die Anzahl der Zeichen nicht wert, aber wenn ich ihn fallen lassen würde, hätte ich nicht die schöne Anzahl der Zeichen. Mistkerl.
quelle
Ruby, 28 Punkte
Ergebnis
Code
quelle
Ruby, 65 Punkte
Ergebnis
Code
quelle