Ein bisschen ungewöhnlich, aber hey, warum nicht? :) :)
Das Ziel: Schreiben Sie einen funktionierenden IRC-Daemon in der Sprache Ihrer Wahl, der Barebone-Funktionen in möglichst wenigen Zeichen bietet. Solange es die folgenden Kriterien erfüllt, muss es die IRC-RFCs nicht vollständig erfüllen (dies würde die Herausforderung erheblich weniger Spaß machen), es muss nur funktionieren.
Bedarf:
- Clients müssen in der Lage sein, eine Verbindung zu Port 6667 herzustellen und diesen zu verwenden. Zumindest irssi und XChat müssen in der Lage sein, mit einer Standardkonfiguration eine erfolgreiche Verbindung herzustellen.
- Benutzer müssen in der Lage sein, ihren eigenen Spitznamen anzugeben, ihn zu ändern, während sie bereits verbunden sind, Kanäle beizutreten, Kanäle zu verlassen und sauber zu beenden (dh
QUIT
). - Kanäle sollten wie gewohnt erstellt werden. Wenn Sie einem Kanal beitreten, in dem sich keine Benutzer befinden, wird er "erstellt". Sie müssen nicht hartnäckig sein.
- Benutzer müssen in der Lage sein, sowohl Kanalnachrichten als auch private Nachrichten (dh an andere Benutzer) zu senden.
- Der
WHOIS
Befehl muss ebenso implementiert werden wiePING
/PONG
,LIST
undNAMES
(hauptsächlich, um die Kunden zufrieden zu stellen).
Beschränkungen:
- Sie dürfen keine Bibliotheken von Drittanbietern verwenden (einschließlich nicht zum Kern gehörender E / A-Bibliotheken). Es sind nur Standardbibliotheken zulässig, die mit der von Ihnen verwendeten Plattform geliefert werden.
- Wenn Ihre Implementierung explizite Unterstützung für IRC in der Standardbibliothek enthält, können Sie diese auch nicht verwenden. Die Netzwerkfunktionalität der Standardbibliothek ist natürlich in Ordnung.
- Ihre Einreichung muss unabhängig ausgeführt werden können. Kein kluges MIRC-Scripting :)
Modi, Kicks usw. müssen nicht implementiert werden (es sei denn, dies ist erforderlich, damit es mit den oben genannten Clients funktioniert). SSL ist auch nicht notwendig. Nur die oben genannten Barebone-Funktionen, um die Herausforderung kurz und unterhaltsam zu halten.
Weitere Informationen zu IRC finden Sie hier . Die RFCs sind 1459 und 2812 (ich kann aufgrund meines mangelnden Rufs keine direkte Verknüpfung zu ihnen herstellen). Die kürzeste funktionale und anforderungskonforme Einreichung gewinnt!
Antworten:
C ++ (teilweise Golf) 5655 (wobei CRLF für 1 zählt)
Dies wird in VS 2013 kompiliert (verwendet Auto, Lambdas und Winsock). Es schien zu funktionieren, bevor ich es Golf gespielt habe. Wenn ich es nicht vermasselt habe, sollte es immer noch in Ordnung sein. Einer der Gründe, warum es so groß ist, ist, dass die numerischen Antworten, die ich zurückschicke, den im RFC angegebenen Text enthalten - ich weiß nicht, ob dies notwendig ist oder nicht. Ich habe es mit KVirc getestet, weil es portabel läuft (keine Software auf meinem PC installieren darf!). KVirc scheint mit meinem Server zu funktionieren, aber ich weiß nichts über andere Clients - ich habe getan, was ich dachte, dass der RFC sagte, aber viel davon ist so wenig spezifiziert, dass ich es hoffentlich richtig verstanden habe.
Der Server verarbeitet DIE, KILL, NICK, USER, MODE, WHOIS, WHO, JOIN, PART, THEMA, LISTE, NAMEN, PRIVMSG, USERS, PING, PONG und QUIT in unterschiedlichem Maße. Für die meisten von ihnen gebe ich die erforderlichen Antworten zurück, einschließlich der meisten Überprüfungen, die erforderlich sind, um die angegebenen Fehlerantworten zurückzugeben. Für einige von ihnen betrüge ich:
Ich denke, es ist nur teilweise Golf gespielt, weil ich nicht sehr gut Golf spielen kann. Wenn Sie also etwas Großes sehen, bearbeiten Sie bitte die Antwort und korrigieren Sie es.
Hier ist die Golfversion
Hier ist die meist ungolfed Version (verwendet noch einige Makros):
quelle