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
Bi gıdım feyz https://t.co/H5zFuqvdAE pic.twitter.com/qV9QkMZmuC
— Aşkın Gedik (@askngdk) 28 Mart 2016