Arşiv:

Ağustos, 2006

...

Beyle Beyle etler ve çala-kalem iyileştirme

1 yorum

Devrim günlüğünde bütün suçu üzerimize atmış ama o da bizim kadar suçlu. Evet bunu buradan açıklıyorum. Bolu dağlarına vurmamızın asıl sebebi bu bahsi geçen şahıstır. Tartıları bozmamızın sebebi de odur. (Doruk bize bir yol göster ;) )

Ha ama değdi mi derseniz. Yine olsa yine yaparım derim. (Suçlu olay mahalline mutlaka geri döner)

Fazlamesai den Emre Sevinç, ruby ile yaptığım (bir önceki girdi) programı Fazlamesai yorumlarına taşımış. Bende orada gördükten sonra Çalakalem çözümümde süre sınırına dikkat etmediğimi farkettim. Bu yüzden bir kaç küçük iyileştirme eklemek istedim.

Bu sayede hem ruby yi biraz daha sevmeye başladım, hem de ruby deneyimi artırmış oldum. Sonuç, top yekün eğlence.

— decipher_raw.rb 2006-08-11 18:50:32.000000000 +0300
+++ decipher.rb 2006-08-11 19:02:26.000000000 +0300
@@ -28,9 +28,20 @@
puts “Crypting for key: #{key.key}”
ctext.each_byte { |byte|
b = byte ^ key.nextByte
+ if not (32..126).include? b then
+ break
+ end
t < < b.chr
}
- cleartext.push t
+ p = 0
+ if t.length > 30 then
+ [ "and","or","the","in",
+ "on","where","from", "when",
+ "am", "is", "are", "was"].each { |word|
+ if t.include? word then p = p + 1 end
+ }
+ if p > 3 then cleartext.push t end
+ end
}

f = File.open(“decipher.txt”,”w”)
Bu küçük iyileştirme sonunda toplam süre,

real 2m8.316s
user 1m35.646s
sys 0m7.632s
değerlerinden

real 0m16.701s
user 0m11.077s
sys 0m0.936s
değerlerine düştü. Tabii üretilen sonuç miktarı da 81 e. Neyse ufak şeylerle eğlenmek yeter. Daha güzel ve daha büyüklere yöneleyim tekrar.

Çala kalem ruby

2 yorum


fazlamesai
de çıkan Proje Euler yarışması dikkatimi çekmişti. Sırf meraktan soruları şöyle bir okudum. XOR lu kriptolu bir soru çok ilgimi çekti (ah merak ah..). Acaba bu metin de ne yazıyor diye aklıma bir kurt düştü.

Ben de çalakalem bir ruby kodu yazayım dedim. Çok da bildiğimden değil hani. sadece öğrenmiş olayım diye

Ortaya şöyle bir kod çıktı:

class Key
attr_reader :key
def nextByte
@base = (@base + 1) % 3
@key[@base]
end
def initialize(key)
@base = -1
@key = key
end
end ctextfile = File.open("cipher1.txt")
ctext = ctextfile.gets.split(",").collect { |b| b.to_i.chr }.join
cleartext = Array.new keylist = Array.new
('a'..'z').each { |v1|
('a'..'z').each { |v2|
('a'..'z').each { |v3|
keylist.push Key.new("#{v1}#{v2}#{v3}")
}
}
} keylist.each { |key|
t = ""
puts "Crypting for key: #{key.key}"
ctext.each_byte { |byte|
b = byte ^ key.nextByte
t < < b.chr
}
cleartext.push t
} f = File.open("decipher.txt","w")
cleartext.each { |t|
f.puts t
}

Tabii dikkatle kodu incelemiş olan sizlerde farkettiniz ki metni bulan bir kısım yok. o işi grep e bıraktım ;)

grep the decipher.txt | grep and | grep or | grep of | grep is | grep was

Ben merakımı giderdim. İsteyen de kendi merakını gidersin..

Switch to our mobile site