Görev
Kullanıcı tebrik gibi basit bir görev yapan basit bir IRC bot olun.
detay
( Bu RFC belgesini görebilirsiniz .)
Bunları gerçekleştiren eksiksiz bir program yazın:
Program girdileri
nickname
verealname
kullanıcıdan.- Herkese
nickname
verealname
hangi forma[A-Za-z0-9]+
izin verilir, ancak diğer formlara izin verilip verilmeyeceği önemli değildir. Örneğin, kullanıcı isterse1234qwerty
olaraknickname
ve5319009
sırarealname
program bu isimleri kullanmak gerekir, ancak programın kullanıp kullanamayacağını önemli değildir^^☆Rick Astley☆^^
olarak (non-alfabe & ondalık sayılar içerir) (nickname
veyarealname
) ya da değil, hatta bu isim reddedilebilir düşünce sunucu tarafından.
- Herkese
Program
serverAddress
kullanıcıdan girer .- Formu
serverAddress
DİRserverIP:serverPort
, neredeserverIP
sunucunun IP adresidir veserverPort
sunucunun port num olduğunu.
- Formu
Portuna programı bağlanacağı
serverPort
IRC sunucusundaserverIP
ve 's takma ad olarak belirlesinnickname
olarak ve gerçek adırealname
göndererekUSER realname 0 * :realname
veNICK nickname
.Program , kanala
channelName
dahil olmayan#
ve kanala katılan tek bir girdi girer#channelName
.Kanala böyle özel bir mesaj
Hello, world!
gönderin#channelName
:PRIVMSG #channelName :Hello, world!
Sonra program bunları yapar:
A. birisi söyleyerek onu tebrik katılırsa
Hello, @!
için#channelName
, nereye @ onu / onu takma adıdır.B. Program başlatılırsa, tekrar katılmayı deneyin.
C. Bir kişi vurulursa veya yasaklanırsa, deyin
POW HAHA
.D. Eğer bir kişi bırakırsa (
PART
ya daQUIT
), diyelim kiGoodbye, @!
, @ onun takma adıdır.E. Birisi
Turing test
veya dahil bazı metinlerturing test
söylerseI'm a human!
.F. Birisi dahil bazı metinler söylerse , sunucuya
6*9
göndererek çıkınQUIT :42
.G. Birisi
all your base are belong to us
(büyük / küçük harf duyarlı) dahil bazı metinler söylerseQUIT :What you say!
, sunucuya göndererek çıkın .H. Birisi boşluktan önce ve yukarıdaki eylemlerden bazılarının metin tarafından gerçekleştirilmediğini söylüyorsa, metindeki tüm (ilk boşluk hariç) karakterlerin charcode toplamını söyleyin.
Bir hata oluşursa
Bir hata oluşursa (bağlantı hatası veya geçersiz nickname
), ne yapmak istediğinizi yapabilirsiniz. Örneğin nickname
, zaten kullanımda ise program durabilir, nickname
kullanıcıdan yeni bir bilgi alabilir veya otomatik olarak değiştirip nickname
yeniden deneyebilir.
kısıtlama
Program
- IRC istemci / bot yapımı için herhangi bir dahili fonksiyon veya kütüphane kullanmamalıdır. IRC istemci kitaplıkları gibi bir şey
- Meli bir giriş girmeden önce ne girdi olacak, istemi . Örneğin, girdilerin önce
serverAddress
, bu istemi gerekirWrite the address of server:
,serverIP:serverPort >
,serverAddress >
, bazı metin veya kullanıcı tanıyabileceği. - UTF-8 kullanan birkaç IRC sunucusunda çalışmalıdır. (yani tek sunucu için değil)
- adlı kullanıcının sunucuya gönderdiği iletiler olmamalıdır
NOTICE
. (RFC 2812, 3.3.2 Uyarı:NOTICE
ve arasındaki farkPRIVMSG
, otomatik yanıtların birNOTICE
mesaja yanıt olarak ASLA gönderilmemesidir .) - İsteğin nereden geldiğini (
#channelName
veyanickname
) bir mesaj göndermelidir . - Should
PONG
zamanPING
tabii ki, ed.
PS
Bunu yaptım, çünkü IRC botu hakkında bir bulmaca yoktu.
Düzenle
@ Dmckee'nin yorumunu okuduktan sonra kazanan seçme kuralını değiştirdim.
Varsayılan
bonus
= +0Program bir şekilde bir kanala bağlanabiliyorsa (olmasa bile
#channelName
),bonus
= 1Program 1 ~ 5 adımlarını gerçekleştirebiliyorsa,
bonus
* = 2.Her görev için 6. adımda A ~ H, program uygulanırsa,
bonus
* =1.2
.Her altı kısıtlama için, program bunu takip ederse,
bonus
* =1.05
.
ve score = int(codelength/bonus)
.
En düşük puana sahip program kazanır. İki cevap aynı puana sahipse, en yüksek oyu alan cevap kazanır.
EDIT Edit: Bence 1.2
ve 1.05
adım 4 ve 5 biraz daha büyük ayarlanmalıdır .. Bu konuda ne düşünüyorsun?
Kazanan karar verilir, ancak çok az giriş olduğunu düşünüyorum.
Yine de herkes kodu gönderebilir ..: P