Tugas
Buat bot IRC sederhana yang melakukan tugas sederhana seperti menyapa pengguna.
Detail
(Anda dapat melihat dokumen RFC ini .)
Tulis program lengkap yang melakukan ini:
Input program
nickname
danrealname
dari pengguna.- Semua
nickname
danrealname
formulir mana yang[A-Za-z0-9]+
harus diizinkan, tetapi tidak penting apakah formulir lain diizinkan. Misalnya, jika pengguna ingin1234qwerty
sepertinickname
dan5319009
sebagairealname
, program harus menggunakan nama-nama, tetapi tidak penting apakah program ini dapat menggunakan^^☆Rick Astley☆^^
(yang termasuk non-alfabet & desimal) sebagai (nickname
ataurealname
) atau tidak, bahkan berpikir nama ini mungkin ditolak oleh server.
- Semua
Input program
serverAddress
dari pengguna.- Bentuknya
serverAddress
adalahserverIP:serverPort
, di manaserverIP
adalah alamat IP server danserverPort
merupakan port nomor server.
- Bentuknya
Program terhubung ke port
serverPort
di server IRCserverIP
, dan itu harus mengatur nama panggilan itu sebagainickname
dan nama aslirealname
dengan mengirimUSER realname 0 * :realname
danNICK nickname
.Program memasukkan satu
channelName
yang tidak termasuk#
, dan bergabung ke saluran#channelName
.Kirim pesan pribadi
Hello, world!
ke#channelName
saluran seperti ini:PRIVMSG #channelName :Hello, world!
Kemudian, program melakukan ini:
A. Jika seseorang bergabung, menyapanya dengan mengatakan
Hello, @!
ke#channelName
mana @ adalah julukan dari dia / dirinya.B. Jika program ini ditendang, coba bergabung kembali.
C. Jika seseorang ditendang atau dilarang, katakan
POW HAHA
.D. Jika seseorang pergi (
PART
atauQUIT
), katakanGoodbye, @!
, di mana @ adalah nama panggilannya.E. Jika seseorang mengatakan beberapa teks termasuk
Turing test
atauturing test
, ucapkanI'm a human!
.F. Jika seseorang mengatakan beberapa teks termasuk
6*9
, berhenti dengan mengirimQUIT :42
ke server.G. Jika seseorang mengatakan beberapa teks termasuk
all your base are belong to us
(tidak peka huruf besar-kecil), berhentilah dengan mengirimQUIT :What you say!
ke server.H. Jika seseorang mengatakan beberapa teks yang diawali dengan spasi dan tindakan di atas tidak dilakukan oleh teks, ucapkan jumlah charcode dari semua (kecuali spasi pertama) karakter dalam teks.
Jika terjadi kesalahan
Jika kesalahan (seperti kesalahan koneksi atau tidak valid nickname
) terjadi, Anda dapat melakukan apa yang ingin Anda lakukan. Misalnya, jika nickname
sudah digunakan, program mungkin berhenti, mendapatkan yang baru nickname
dari pengguna, atau secara otomatis mengubah nickname
dan coba lagi.
Larangan
Program
- Sebaiknya tidak menggunakan fungsi internal atau pustaka yang dibuat untuk klien / bot IRC. yaitu sesuatu seperti perpustakaan klien IRC
- Harus meminta apa yang akan diinput, sebelum mendapat input . Misalnya, sebelum masukan
serverAddress
, harus memintaWrite the address of server:
,serverIP:serverPort >
,serverAddress >
, atau beberapa teks bahwa pengguna dapat mengenali. - Harus bekerja pada beberapa server IRC menggunakan UTF-8. (mis. tidak untuk server tunggal)
- Pesan yang dikirim ke server tidak boleh
NOTICE
. (RFC 2812, 3.3.2 Pemberitahuan: Perbedaan antaraNOTICE
danPRIVMSG
apakah balasan otomatis TIDAK PERNAH dikirim sebagai respons terhadapNOTICE
pesan.) - Harus mengirim pesan dari mana permintaan itu berasal (
#channelName
ataunickname
). - Haruskah
PONG
ketikaPING
ed, tentu saja.
PS
Yah, saya baru saja membuat ini, karena tidak ada teka-teki tentang bot IRC.
Edit
Setelah membaca komentar @ dmckee, saya mengubah aturan untuk memilih pemenang.
Default
bonus
= +0Jika entah bagaimana program dapat terhubung ke saluran (bahkan jika tidak
#channelName
),bonus
= 1Jika program dapat melakukan langkah 1 ~ 5,
bonus
* = 2.Untuk setiap tugas A ~ H pada langkah 6, jika program mengimplementasikan,
bonus
* =1.2
.Untuk setiap enam batasan, jika program mengikuti itu,
bonus
* =1.05
.
dan score = int(codelength/bonus)
.
Program dengan skor terendah adalah pemenang. Jika dua jawaban memiliki skor yang sama, maka jawaban dengan suara terbanyak menang.
Sunting EDIT: Saya pikir 1.2
dan 1.05
pada langkah 4 dan 5 harus disesuaikan sedikit lebih besar .. Apa pendapat Anda tentang ini?
Pemenangnya diputuskan, namun, saya pikir ada terlalu sedikit entri.
Siapa pun masih dapat mengirimkan kode ..: P
Jawaban:
PHP - 121 poin
Skor
Kode
Catatan Samping
Jawaban saya sebenarnya sedikit berbeda dari instruksi; instruksi mengatakan untuk menggunakan
realname
parameter pertama padaUSER
perintah saat mendaftar, tetapi saya menggunakan nama panggilan sebagai gantinya. Ini karenarealname
diizinkan memiliki spasi, sedangkan parameter ini tidak. Ini adalah sesuatu yang bisa diperdebatkan, karena beralih di variabel untukrealname
akan menjadi jumlah karakter yang sama persis.sumber
Python - 125 poin
skor matematika (python):
kode:
sumber
Perl, 66 poin
Skor
Kode
(baris baru untuk presentasi saja, tidak dihitung apalagi dapat diterima)
Catatan Samping
Substep "SEMUA DASAR ANDA Milik AS" kemungkinan besar tidak sebanding dengan jumlah karakternya, tetapi jika saya membatalkannya, saya tidak akan memiliki jumlah karakter yang bagus. Bersetubuh.
sumber
Ruby, 28 poin
Skor
Kode
sumber
Ruby, 65 poin
Skor
Kode
sumber