En basit sıralama algoritması

En basit sıralama algoritması hangisidir? Okullarda genel olarak bubble-sort gösteriyorlar, fakat ben insertion sort’u tercih ediyordum. Bugün ise gnome-sort diye bir algoritmayla karşılaştım. Neredeyse insertion-sort kadar hızlı çalışıyor, ve anlaması hem bubble-sort’tan hem de insertion-sort’tan daha kolay.

Verdiğim linkte c ile örnek bir kod yazılmış, ruby ile yazmak gerekirse de şöyle bir şeyler oluyor:

1
2
3
4
5
6
7
8
9
10
def gnomesort!(a)
    i=1
    while i
        i+=1  if a[i-1]<=a[i]
        else
            a[i], a[i-1] = a[i-1], a[i]
            i-=1 if i>1
        end
    end
end

ruby’deki a,b=b,a yöntemi ne kadar müthiş değil mi? increment ve decrement operatörlerinin eksikliği ise hemen göze çarpıyor.


Etiketler: , , , , ,

ruby ceasar cipher

geçen gün ruby dökümanlarını karıştırmıştım. kendimi biraz yeterli hissetmeye başladım. bugun lab’da kubilay metine ruby’i anlatırken ceasar şifresini tek satır kod ile yazdım dedi, ben de özendim uğraştım eve gelince. ufak bi hile ile de olsa tek satırda şöyle bir şey oluyor:

gets.chop!.each_byte{|i| i=(i+29).modulo(29)+97; print i.chr}

gets kullanıcıya metin girişi yaptırtıyor.
chop string’in sonundaki satırsonu siliyor.
each_byte stringler için bir yineleyici. burda her seferinde her karakteri i’ye atıyor.
modulo mod alma methodu.
i.chr ise i tamsayısının karşılık geldiği karakteri temsil ediyor.

bu satırın içinde metnin kaç harf kaydıralacağını almayı beceremedim, 29′a eşitledim şimdilik, ama uğraşmaya devam ediyorum. :)


Etiketler: ,