Dostlar merhabalar. Her ne kadar dün farklı bi konu önerisi ile gelmiş olsamda, programlama dilleri bölümünün pek de canlı olmadığını fark ettim. Dedim ki neden olmasın, olayı basitçe açıklamam gerekirse; Bildiğiniz üzere hackerrank, hackerearth,
euler project solja gibi bir çok programming challenge sitesi mevcut. Bu sitelerin bize sunduğu soruları bu konu zincirinde parçalayıp anlaşılabilir bir halde size sunmaya çalışacağım.
euler project solja gibi bir çok programming challenge sitesi mevcut. Bu sitelerin bize sunduğu soruları bu konu zincirinde parçalayıp anlaşılabilir bir halde size sunmaya çalışacağım.
Not: Bu tür challengelar için tek bir cevap söz konusu dahi olamaz. Aynı amaca birden fazla şekilde ulaşabilirsiniz.
Ben ağırlıklı olarak C dilini kullanıp, kendi çözümlerimi sizlere aktarmaya çalışacağım. Olurda farklı bi yol bulursanız ve ya daha efektif bir çözüm bulursanız altta belirtmekten çekinmeyin.
İlk olarak basit bir soru ile başlayalım o zaman.
Soru:Sistem bize bir string veriyor, lakin bu stringin içerisinde büyük küçük harfler karışık bir vaziyette. Bizden istenen ise bu stringteki harflerin büyüklük küçüklüğünü tersine çevirmemiz.
Kod:
Örnek input: abcdE
Örnek output: ABCDe
Kod:
Ve constraint olarak bu stringimizin 100 karakter'e kadar çıkabileceği belirtiliyor.
Işin ilginç kısmı burada başlıyor. Soru ne kadar basit görünse de accuracy'si %60 civarında.
Şimdi çözüm metodlarına gelecek olursak. Iki farklı yol izleyebiliriz.
- Regex kullanmak
- Ascii karakter checklemek
ASCII Table:
Tabloda da görüldüğü üzere (U)ppercase karakterler 65 - 90, (l)overcase karakterler 97 - 122
Koda geçelim.
Kod:
/*
Author: kondanta
*/
#include <stdio.h>
int main(){
char str[101]; //ust limit 100 olmasina ragmen stringlerin sonu her zaman null karakter ile
//biter. ' \0'
int i = 0;
scanf("%s", &str);
while(str[i] != '\0'){
if(str[i] >= 'a' && str[i] <= 'z')
printf("%c", str[i] - 32);
else if(str[i] >= 'A' && str[i] <= 'Z')
printf("%c", str[i] + 32);
i++;
}
}
Önemli ilk noktamız buffer limiti neden 100 değil de 101. Yorum satırı olarak eklemiş olamam ramğmen tekrar değinmek istiyorum. Stringler her zaman null termination karakteri ile biter -> \0.
Ve gelelim kodumuzun mantığına...
Kod:
while(str[i] != '\0'){
if(str[i] >= 'a' && str[i] <= 'z')
printf("%c", str[i] - 32);
else if(str[i] >= 'A' && str[i] <= 'Z')
printf("%c", str[i] + 32);
Her karakter değiiştirdiğinde karakterin büyük harf mi küçük harf mi olduğunu kontrol ettik.
Ascii tablosunu önceden verme sebebim buradaki 32 yi açıklamak içindi. Dikkatli bakarsanız aralarındaki decimal farkı tam olarak 32. Bu yüzden eğer gelen harf küçükse 32 çıkartarak, Uppercase harflere dönüyoruz. Eğer tam tersi ise, 32 ekleyip küçük harfe dönüyoruz.
Kişisel görüşümü ekleyecek olursam, böyle basit bir sorunun doğru sonuç yüzdesi 60 larda oluşu beni de şaşırtmadı değil.
Onun dışında:
Bir kaç basit soru çözümünden sonra veri yapıları ve algoritma sorularına ağırlk vereceğim. İlgisini çeken olurda acaba yarın ne yapacak diye düşüneniz olursa, link list ile girip tree stack queue heap şeklinde ilerlemeyi planlıyorum.
İstek olduğu taktirde soru çözümüyle birlikte ilişkili veri yapısı hakkında bilgi ve kullanım alanları hakkında da bilgi verebilirim.
Saygılarımla.
İstek olduğu taktirde soru çözümüyle birlikte ilişkili veri yapısı hakkında bilgi ve kullanım alanları hakkında da bilgi verebilirim.
Saygılarımla.
Son düzenleme:
