Hoş problemlerden biri daha. Esasında sorunun çözümü bir hayli basit. Ben genelde programlamayı, insanın işlem gücünden kar elde etmek için kullanıyorum, fakat bazen çözüme ne olursa olsun bu yolla da ulaşmak için kullanılabilir.
Fakat bu soruyu el hesabıyla çözmek 5 dakikanızı almayacaktır. Programlaması ise biraz daha karmaşık.
Soru
Online bankacılıkta yaygın olarak kullanılan güvenlik metotlarından birisi de kullanıcıya verilen bir şifreden rastgele 3 sayı seçilmesinin istenmesidir. Örneğin şifre 531278 ise, 2. 3. ve 5. sayıları istediklerinde beklenen şifre 317 sayısı olacaktır.
Verilen .txt dosyasında başarılı 50 adet giriş bulunmaktadır. 3 sayıdan oluşan şifre, sıraya göre dizilmiştir(şifrede önde gelen sayı, bu 3'lüde de aynı sırada yer alır).
Buna göre uzunluğu bilinmeyen en kısa şifreyi listeden analiz ederek bulunuz.
http://projecteuler.net/project/keylog.txt
Çözüm
İlk yaptığım iş verilerin bulunduğu linki açınca tek tek tüm sayıları aratmak oldu. Bunun için CTRL + F kombinasyonunu kullanabilirsiniz. Bunu yaptığınızda 4 ve 5 sayısının hiç olmadığını göreceksiniz.
Öyleyse esas şifremiz en az birer adet 0, 1, 2, 3, 6, 7, 8, 9 sayıları içeriyor ve en az 8 basamaklı.
--------------------- Bizim şifremizi yerleştireceğimiz alanımız olsun. Rastgele miktarda çizgi içeriyor, kaç basamaklı bilmiyorum. Sırasıyla yerleştireceğim.
İlk 0'ı aratıyorum ve görüyorum ki, 0 rakamı hep en sonda yer almış. Öyleyse 0 kesinlikle en sonda yer alıyor.(Burada verilen eksiksiz ve en kısa şifrenin istendiği varsayılmalı)
--------------------0 şifrem oldu. Şimdi 9'a bakıyorum ve görüyorum ki 0'dan önce gelmiş, başka bir sayıdan önce hiç gelmemiş. Öyleyse 0'ın önünde olmalı.
-------------------90 şifremiz oldu. Yavaş yavaş tamamlanıyor.
Bu şekilde tüm sayılar için tamamladığınızda göreceksiniz ki şifreniz 73162890 olacak.
Hiç yorum yok:
Yorum Gönder