Sedikit yang tidak biasa, tapi hei, mengapa tidak? :)
Tujuannya: Tulis daemon IRC yang berfungsi dalam bahasa pilihan Anda yang menyediakan fungsionalitas tulang belakang, sesedikit mungkin karakter. Selama memenuhi kriteria di bawah ini, ia tidak harus sepenuhnya mematuhi IRC RFC (ini akan membuat tantangan secara signifikan kurang menyenangkan), itu hanya perlu bekerja.
Persyaratan:
- Klien harus dapat terhubung pada port 6667 dan menggunakannya. Setidaknya irssi dan XChat harus dapat terhubung dengan sukses dengan konfigurasi default.
- Pengguna harus dapat menentukan nama panggilan mereka sendiri, mengubahnya saat sudah terhubung, bergabung dengan saluran, meninggalkan saluran, dan keluar dengan bersih (mis.
QUIT
). - Saluran harus dibuat seperti biasa - bergabung dengan saluran tanpa pengguna di dalamnya 'membuatnya'. Mereka tidak harus gigih.
- Pengguna harus dapat mengirim pesan saluran dan pesan pribadi (mis. Ke pengguna lain).
- The
WHOIS
Perintah harus dilaksanakan, sertaPING
/PONG
,LIST
danNAMES
(sebagian besar untuk menjaga klien senang).
Pembatasan:
- Anda tidak boleh menggunakan perpustakaan pihak ketiga mana pun (yang mencakup perpustakaan I / O yang bukan inti). Hanya perpustakaan standar yang datang dengan platform yang Anda gunakan, yang diizinkan.
- Jika implementasi Anda menyertakan dukungan eksplisit untuk IRC di perpustakaan standar, Anda mungkin tidak menggunakannya. Fungsi jaringan pustaka standar, tentu saja, baik.
- Kiriman Anda harus dapat berjalan secara independen. Tidak pandai dengan skrip mIRC :)
Mode, tendangan, dll. Tidak harus diterapkan (kecuali jika diperlukan untuk membuatnya bekerja dengan klien di atas). SSL juga tidak perlu. Hanya fungsi barebone di atas, untuk menjaga tantangan tetap pendek dan menyenangkan.
Informasi lebih lanjut tentang apa IRC di sini , RFC adalah 1459 dan 2812 (saya tidak dapat menautkan mereka secara langsung karena kurangnya reputasi saya). Pengajuan fungsional dan memenuhi persyaratan terpendek menang!
Jawaban:
C ++ (sebagian golf) 5655 (dengan penghitungan CRLF untuk 1)
Ini mengkompilasi di VS 2013 (menggunakan auto, lambdas dan winsock) Tampaknya berfungsi sebelum saya bermain golf jadi kecuali saya mengacaukannya itu harus tetap ok. Salah satu alasannya begitu besar adalah bahwa jawaban numerik yang saya kembalikan menyertakan teks yang ditentukan dalam RFC - Saya tidak tahu apakah itu perlu atau tidak. Saya mengujinya dengan KVirc karena berjalan dengan mudah (tidak diizinkan menginstal perangkat lunak pada PC saya!) KVirc tampaknya bekerja dengan server saya, tetapi saya tidak tahu tentang klien lain - saya melakukan apa yang saya pikir RFC katakan tetapi banyak dari itu adalah underspecified jadi semoga saya memahaminya dengan benar.
Server menangani DIE, KILL, NICK, USER, MODE, WHOIS, WHO, GABUNG, BAGIAN, TOPIK, DAFTAR, NAMA, PRIVMSG, PENGGUNA, PING, PONG, dan QUIT hingga tingkat yang berbeda-beda. Untuk sebagian besar dari mereka, saya mengembalikan respons yang diperlukan termasuk melakukan sebagian besar pemeriksaan yang diperlukan untuk mengembalikan balasan kesalahan yang ditentukan. Untuk beberapa dari mereka saya curang:
Saya pikir itu hanya golf sebagian karena saya tidak pandai bermain golf jadi jika Anda melihat sesuatu yang besar, silakan edit jawabannya dan perbaiki.
Ini adalah versi golfnya
Ini adalah versi yang sebagian besar tidak disunat (masih menggunakan beberapa makro):
sumber