1984 yılında Michael Crichton BASIC'te Creative Computing dergisinde yayınlanan bir güvenlik programı yazdı. Program kullanıcıdan kendi seçtiği bir cümleyi yazmasını, tuş vuruşları arasındaki aralıkları kaydetmesini ve daha sonra cümleyi tekrar yazmasını ister. Zamanlamalar çok fazla farklılık gösterirse, program kullanıcıyı bir sahtekâr olarak tanımlar.
Ödeviniz: Seçtiğiniz dilde Crichton programının bir versiyonunu oluşturun.
Kurallar:
Kullanıcı ile iletişim kurmak için kullanılan ifadeler ("Lütfen anahtar kelimeyi yazın," "Lütfen anahtar kelimeyi tekrar yazın," vb.) Gerçek uzunluk ne olursa olsun bir bayt olarak sayın. Bu yalnızca kullanıcı iletişimi içindir, dizelerde program kodunu saklamaya çalışmayın.
Başarılı / başarısız testi, orijinal aralıklardan yüzde sapmaların ortalama mutlak değerini temel almalıdır. Dizeler eşleşmezse, geri dönüş başarısız olur veya kullanıcının takdirine bağlı olarak tekrar denemesine izin verir.
Anahtar kelime grubu boş bir dizeye izin vermemelidir. Anahtar deyim, kendi takdirinize bağlı olarak, kısaltılmış veya izin vermemek ve baştan başlamak için dizgi veri türünüz için çok uzunsa.
Testin hassasiyeti (başarılı / başarısız testi için eşik) kaynak kodunda ayarlanabilir olmalıdır.
Kaynak kodunuz bir dinozora benzeyecek şekilde biçimlendirilebilirse, başlangıçta toplam bayt sayısının% 20'sini ekledim. Bunun son derece öznel ve belki de bir popülerlik yarışması için daha uygun olduğuna dikkat çekildi, bu yüzden bu bonusu kaldırdım. Ancak yine de dinozor biçimlendirmesini yürekten teşvik ediyorum ve kodunuzu bir dinozor gibi görünecek şekilde biçimlendirirseniz, bayt toplamınızdan tamamen kozmetik yorumlar, satır sonu veya boşluk karakterleri çıkarabilirsiniz.
Dize uzunluğu ve dinozor biçimlendirme ayarlarına tabi olarak en kısa bayt sayısı kazanır.
Yukarıdaki spesifikasyonumun, kopyaları çevrimiçi olarak bulunabilen Crichton kodunun çalışmasıyla tam olarak eşleşmediğini unutmayın. Spesifikasyonu takip edin, orijinali klonlamaya çalışmayın.
"Please type the key phrase"
1 bayt olarak mı sayılır, yoksa yalnızca kelime öbeği ve alıntılanan kelime öbeği 3 bayt ( "
, kelime öbeği "
) olarak sayılır mı? Çok daha uzun bir aralık ve daha kısa bir aralığın "iptal edileceği" ve tekrar eşit hale gelmesi kasti midir? Programın iki temel ifadenin eşleştiğini doğrulaması gerekiyor mu?