Bi gıdım feyz #1
28 Mar 2016

Elimizdeki string sadece pozitif tam sayılardan mı oluşuyor veya string içinde herhangi bir rakam geçiyor mu? Bu tarz soruları minik bir regex ile çözebiliriz. Örneğin sadece sayılardan mı oluşuyor sorusu için:

"123abc" !~ /\D/ # => false
"123" !~ /\D/ # => true

Bu örnekler ile hafiften regexe alıştığınıza göre ana konuya geçeyim mi ne dersiniz?

Bilmeyenler için codewars kod kata yapabileceğiniz eğlenirken öğreten muhteşem bir servis. Oradaki sorulardan biri de:

Bir fonksiyon yazın verilen string içindeki tüm kelimelerin çift indexli karakterlerini büyütsün, tek indexli olanları küçültsün.

Yani beklenen

weirdcase( "String" )#=> returns "StRiNg"
weirdcase( "Weird string case" );#=> returns "WeIrD StRiNg CaSe"

Hemen aklınıza boşluklardan kelimelere parçalayıp döngü ile indeksi çift ise büyüt tek ise küçült şeklinde basit bir çözüm gelmiştir. Yalnız değilsiniz, codewars üzerinde de bu şekilde çözüm yapan onlarca insan var. Ruby ile bunu uygularsak şöyle bir şey oluyor.

def weirdcase string
  string.split.map do |s|
    s.chars.each_with_index.map do |y,i|
      i.odd? ? y.downcase : y.upcase
    end.join
  end.join(' ')
end

Ama codewars üzerinde ki diğer çözümleri incelediğinizde feyz dolu bir cevap görüyorsunuz.

def weirdcase string
  string.gsub(/\w{1,2}/) { $&.capitalize }
end

Hoayda!!

Ruby’de test yazarken fake data oluşturmak için kullandığımız faker‘da şöyle bir kod parçası var.

temp.chars.each_with_index do |char, index|
  temp[index] = char.upcase if index % 2 == 0
end

Bilmeyenler için ben de bu gem’i crystale port ediyorum (varsa alırım bi starınızı). Aynı örneği dün eklerken minik bir gülümseme eşliğinde crystal ile şu şekilde çözdüm:

temp.gsub(/.{1,2}/) { |s| s.capitalize }

Kaynaklar

Feyz aldıysan paylaş diğerleri de feyzlensin!
Aşkın Gedik Ruby on Rails Developer